mirror of
https://github.com/Dichgrem/Blog.git
synced 2025-12-16 13:32:00 -05:00
Compare commits
3 Commits
1164d77a15
...
c883e002ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c883e002ad | ||
|
|
a5a811608d | ||
|
|
ad5bc86ddf |
@@ -274,13 +274,23 @@ return {
|
||||
|
||||
> 编辑器的基本素养
|
||||
|
||||
``文件操作``
|
||||
- 创建文件/文件夹
|
||||
- 打开/关闭/切换文件
|
||||
- 复制/粘贴
|
||||
- 写入/保存/退出
|
||||
``外观``
|
||||
- 面板
|
||||
- 侧边栏
|
||||
- Git符号
|
||||
- 全局主题
|
||||
- 文件类型主题
|
||||
|
||||
``编辑器``
|
||||
- 显示行号
|
||||
- 搜索替换
|
||||
|
||||
``Code``
|
||||
- 高亮
|
||||
- 格式化
|
||||
- 自动补全
|
||||
- 代码调试
|
||||
|
||||
``字符处理``
|
||||
- LF/CRLF处理
|
||||
- 零宽字符处理
|
||||
@@ -289,12 +299,16 @@ return {
|
||||
``终端``
|
||||
- 打开终端/复用终端
|
||||
|
||||
``文件操作``
|
||||
- 创建文件/文件夹
|
||||
- 打开/关闭/切换文件
|
||||
- 复制/粘贴
|
||||
- 写入/保存/退出
|
||||
|
||||
``其他功能``
|
||||
- LSP
|
||||
- 代码调试
|
||||
- 工作区切换
|
||||
- Git支持
|
||||
- 主题与显示效果
|
||||
- gitui
|
||||
- diff历史
|
||||
|
||||
|
||||
## 一份优秀的 Vim 速查表
|
||||
|
||||
@@ -6,15 +6,15 @@ date = 2025-07-20
|
||||
tags = ["Linux"]
|
||||
+++
|
||||
|
||||
前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前似乎没有Nixos上的打包。
|
||||
前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前没有Nixos上的打包。
|
||||
<!-- more -->
|
||||
|
||||
## 环境
|
||||
## 依赖包
|
||||
|
||||
- **Ubuntu**
|
||||
|
||||
以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。
|
||||
以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。
|
||||
```shell
|
||||
sudo apt update
|
||||
sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
|
||||
@@ -22,7 +22,7 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
|
||||
|
||||
- **Nixos**
|
||||
|
||||
虽然没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:
|
||||
虽然Nixos上没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:
|
||||
|
||||
```nix
|
||||
{
|
||||
@@ -56,24 +56,44 @@ sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb
|
||||
|
||||
## 源码
|
||||
|
||||
使用Git拉取项目源码:
|
||||
随后使用Git拉取项目源码:
|
||||
|
||||
```shell
|
||||
git clone https://github.com/RT-Thread/rt-thread.git
|
||||
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
|
||||
```
|
||||
|
||||
## ENV工具
|
||||
|
||||
使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。
|
||||
|
||||
```shell
|
||||
# 克隆仓库
|
||||
git clone https://github.com/RT-Thread/env.git ~/env
|
||||
# 将 ~/env 添加到 PATH
|
||||
export PATH="$PATH:$HOME/env"
|
||||
# 显示 PATH
|
||||
echo "$PATH"
|
||||
# 查看 pkgs 命令是否存在
|
||||
type pkgs
|
||||
```
|
||||
|
||||
随后可以使用PKG初始化并安装两个必要的包:
|
||||
|
||||
```shell
|
||||
pkgs --update
|
||||
pip install kconfiglib
|
||||
pip install scons
|
||||
```
|
||||
|
||||
## 连接
|
||||
|
||||
使用USB连接开发板和开发PC,并使用lsusb查看是否连接成功:
|
||||
使用USB线连接开发板和开发PC,并使用lsusb命令查看是否出现:
|
||||
```shell
|
||||
lsusb
|
||||
Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
|
||||
```
|
||||
|
||||
如果你和我一样使用 qemu ,需要在libvirt中使用Add_hardware添加usb设备。
|
||||
|
||||
添加成功后可以使用这个命令来检测:
|
||||
添加成功后可以使用这个命令来检测是否连接成功:
|
||||
|
||||
```shell
|
||||
❯ st-info --probe
|
||||
@@ -86,20 +106,11 @@ Found 1 stlink programmers
|
||||
dev-type: STM32F4x5_F4x7
|
||||
```
|
||||
|
||||
## ENV工具
|
||||
> 如果你和我一样将Ubuntu安装在QEMU虚拟机中 ,需要在libvirt中使用Add_hardware添加usb设备。
|
||||
|
||||
使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。我使用的是fish,你也可以用其他的Shell,命令有所不同。
|
||||
```shell
|
||||
git clone https://github.com/RT-Thread/env.git ~/env
|
||||
set -x PATH $PATH ~/env
|
||||
fish_add_path ~/env
|
||||
echo $PATH
|
||||
type pkgs
|
||||
```
|
||||
## 修改交叉工具链
|
||||
|
||||
## PKG工具
|
||||
|
||||
由于该项目大量使用Python,所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分:
|
||||
链接成功后进入项目目录,发现``rtconfig.py``没有Linux路径,需要我们手动修改交叉工具链部分:
|
||||
|
||||
```python
|
||||
#修改 rtconfig.py
|
||||
@@ -114,6 +125,7 @@ if CROSS_TOOL == 'gcc':
|
||||
# Windows 平台
|
||||
EXEC_PATH = r'C:\Users\XXYYZZ'
|
||||
else:
|
||||
# 修改这里
|
||||
# Linux / macOS 平台
|
||||
EXEC_PATH = '/usr/bin'
|
||||
|
||||
@@ -133,13 +145,7 @@ elif CROSS_TOOL == 'llvm-arm':
|
||||
else:
|
||||
EXEC_PATH = '/usr/bin'
|
||||
```
|
||||
随后可以使用PKG初始化并安装两个必要的包:
|
||||
|
||||
```shell
|
||||
pkgs --update
|
||||
pip install kconfiglib
|
||||
pip install scons
|
||||
```
|
||||
## 编译
|
||||
|
||||
在完成以上设置之后我们可以开始编译。STM32使用scons编译系统,同样是menuconfig命令:
|
||||
@@ -171,7 +177,6 @@ st-flash write rtthread.bin 0x08000000
|
||||
```shell
|
||||
sudo apt install picocom
|
||||
picocom -b 115200 /dev/ttyACM0
|
||||
version
|
||||
```
|
||||
可以使用``ctrl + A 然后 ctrl + x``退出。
|
||||
|
||||
@@ -179,9 +184,9 @@ version
|
||||
|
||||
通过官方文档可以得知除了scons外还可以使用Cmake来编译.
|
||||
|
||||
首先找到编译器的路径,并export:
|
||||
首先找到编译器的路径,并export,我这里是Nixos的路径,如果你使用其他发行版注意修改:
|
||||
|
||||
```shell
|
||||
```bash
|
||||
❯ which arm-none-eabi-gcc
|
||||
/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
|
||||
export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
|
||||
@@ -189,7 +194,7 @@ export RTT_CC=gcc
|
||||
```
|
||||
|
||||
随后使用指令``scons --target=cmake``:
|
||||
```shell
|
||||
```bash
|
||||
❯ scons --target=cmake
|
||||
|
||||
scons: Reading SConscript files ...
|
||||
@@ -207,7 +212,7 @@ scons: done building targets.
|
||||
```
|
||||
可以看到生成CmakeLists.txt成功,随后开始构建:
|
||||
|
||||
```shell
|
||||
```bash
|
||||
❯ cd ./build
|
||||
❯ cmake ..
|
||||
CMake Warning (dev) at CMakeLists.txt:43:
|
||||
@@ -236,7 +241,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
|
||||
```
|
||||
使用``make``命令编译:
|
||||
|
||||
```shell
|
||||
```bash
|
||||
❯ make
|
||||
[ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj
|
||||
[ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj
|
||||
@@ -254,7 +259,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
|
||||
|
||||
如果没有真实的开发版,可以使用Renode来进行仿真模拟:
|
||||
|
||||
```shell
|
||||
```bash
|
||||
# 启动renode
|
||||
renode
|
||||
|
||||
|
||||
182
content/linux-3-android-dev.md
Normal file
182
content/linux-3-android-dev.md
Normal file
@@ -0,0 +1,182 @@
|
||||
+++
|
||||
title = "Linux-Android开发环境部署"
|
||||
date = 2025-11-20
|
||||
|
||||
[taxonomies]
|
||||
tags = ["Linux"]
|
||||
+++
|
||||
|
||||
前言 本文记录Android命令行开发环境在Linux上的部署,用以替代Android-studio。
|
||||
|
||||
<!-- more -->
|
||||
|
||||
## Ubuntu方案
|
||||
|
||||
- 首先安装依赖包:
|
||||
|
||||
```bash
|
||||
sudo apt install openjdk-17-jdk nodejs
|
||||
```
|
||||
|
||||
- 安装Command-tools:
|
||||
|
||||
```bash
|
||||
mkdir -p ~/Android/cmdline-tools/latest
|
||||
## 下载链接:https://developer.android.com/studio?hl=zh-cn#command-tools
|
||||
cd ~/Android/cmdline-tools/latest
|
||||
wget https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip
|
||||
unzip ./commandlinetools-linux-13114758_latest.zip
|
||||
```
|
||||
|
||||
- 使用官方脚本安装Sdkman包管理器:
|
||||
|
||||
```bash
|
||||
curl -s "https://get.sdkman.io" | bash
|
||||
source "$HOME/.sdkman/bin/sdkman-init.sh"
|
||||
```
|
||||
|
||||
- 随后使用Sdkman下载并安装gradle/kotlin:
|
||||
|
||||
```bash
|
||||
sdk install gradle
|
||||
sdk install kotlin
|
||||
```
|
||||
|
||||
- 设置环境变量:
|
||||
```bash
|
||||
export ANDROID_HOME=$HOME/Android
|
||||
export PATH=$PATH:$ANDROID_HOME/emulator
|
||||
export PATH=$PATH:$ANDROID_HOME/platform-tools
|
||||
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
|
||||
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0
|
||||
source ~/.bashrc
|
||||
```
|
||||
|
||||
- 继续下载一些SDK平台与构建工具:
|
||||
|
||||
```bash
|
||||
sdkmanager "platforms;android-34" "build-tools;34.0.0" "platform-tools"
|
||||
sdkmanager "emulator" //虚拟机中调试
|
||||
```
|
||||
|
||||
- 查看版本
|
||||
|
||||
```bash
|
||||
(base) dich@uos:~$ sdk version
|
||||
|
||||
SDKMAN!
|
||||
script: 5.20.0
|
||||
native: 0.7.14 (linux x86_64)
|
||||
|
||||
(base) dich@uos:~$ gradle -v
|
||||
|
||||
------------------------------------------------------------
|
||||
Gradle 8.10.2
|
||||
------------------------------------------------------------
|
||||
|
||||
Build time: 2024-09-23 21:28:39 UTC
|
||||
Revision: 415adb9e06a516c44b391edff552fd42139443f7
|
||||
|
||||
Kotlin: 1.9.24
|
||||
Groovy: 3.0.22
|
||||
Ant: Apache Ant(TM) version 1.10.14 compiled on August 16 2023
|
||||
Launcher JVM: 17.0.16 (Ubuntu 17.0.16+8-Ubuntu-0ubuntu124.04.1)
|
||||
Daemon JVM: /usr/lib/jvm/java-17-openjdk-amd64 (no JDK specified, using current Java home)
|
||||
OS: Linux 6.14.0-35-generic amd64
|
||||
|
||||
(base) dich@uos:~/Git/android-templates$ kotlin -version
|
||||
Kotlin version 1.6.21-release-334 (JRE 21.0.8+9-Ubuntu-0ubuntu124.04.1)
|
||||
(base) dich@uos:~/Git/android-templates/template-compose$ kscript -v
|
||||
Copyright : 2022 Holger Brandl
|
||||
License : MIT
|
||||
Version : v4.0.3
|
||||
Website : https://github.com/holgerbrandl/kscript
|
||||
A new version (v4.2.0) of kscript is available.
|
||||
Kotlin : 2.1.10-release-473
|
||||
Java : JRE 17.0.16+8
|
||||
```
|
||||
|
||||
## Key方案
|
||||
|
||||
构建Release包需要密钥签名验证,可以使用传统的明文配置或者使用密钥管理器.
|
||||
|
||||
### 相同部分
|
||||
|
||||
- 生成密钥
|
||||
```bash
|
||||
keytool -genkey -v \
|
||||
-keystore ~/.android/jetlagged-release.keystore \
|
||||
-alias jetlagged \
|
||||
-keyalg RSA \
|
||||
-keysize 2048 \
|
||||
-validity 10000
|
||||
```
|
||||
|
||||
- 修改app/build.gradle.kts
|
||||
```bash
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
storeFile = System.getenv("KEYSTORE_FILE")?.let { file(it) }
|
||||
storePassword = System.getenv("KEYSTORE_PASSWORD")
|
||||
keyAlias = System.getenv("KEY_ALIAS")
|
||||
keyPassword = System.getenv("KEY_PASSWORD")
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig = signingConfigs.getByName("release") // 添加这行
|
||||
isMinifyEnabled = true
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
```
|
||||
### 传统方法
|
||||
|
||||
- 创建配置文件
|
||||
```bash
|
||||
cat > ~/.android-signing-secrets << 'EOF'
|
||||
export KEYSTORE_FILE="$HOME/.android/jetlagged-release.keystore"
|
||||
export KEYSTORE_PASSWORD="你的keystore密码"
|
||||
export KEY_ALIAS="jetlagged"
|
||||
export KEY_PASSWORD="你的key密码"
|
||||
EOF
|
||||
|
||||
# 设置权限
|
||||
chmod 600 ~/.android-signing-secrets
|
||||
|
||||
# 添加到 gitignore (全局)
|
||||
echo ".android-signing-secrets" >> ~/.gitignore_global
|
||||
```
|
||||
|
||||
- flake配置
|
||||
|
||||
```bash
|
||||
# Auto load Key
|
||||
if [ -f "$HOME/.android-signing-secrets" ]; then
|
||||
source "$HOME/.android-signing-secrets"
|
||||
echo "KeyOK"
|
||||
fi
|
||||
```
|
||||
|
||||
### 现代方法
|
||||
|
||||
- 安装libsecret包
|
||||
- keepassxc新建Android群组,添加条目``android_key_password``和``android_keystore_password``;
|
||||
- 设置密码,和上面生成的相同;
|
||||
- 在条目的高级-属性中添加``name/android_key_password``和``name/android_keystore_password``;
|
||||
- 打开设置-保密服务集成,公开Android文件夹
|
||||
- flake中写
|
||||
|
||||
```bash
|
||||
# Release Key
|
||||
export KEYSTORE_FILE="$HOME/.android/jetlagged-release.keystore"
|
||||
export KEY_ALIAS="jetlagged"
|
||||
export KEYSTORE_PASSWORD="$(secret-tool lookup name android_keystore_password)"
|
||||
export KEY_PASSWORD="$(secret-tool lookup name android_key_password)"
|
||||
```
|
||||
---
|
||||
**Done.**
|
||||
@@ -412,14 +412,26 @@
|
||||
<blockquote>
|
||||
<p>编辑器的基本素养</p>
|
||||
</blockquote>
|
||||
<p><code>文件操作</code></p>
|
||||
<p><code>外观</code></p>
|
||||
<ul>
|
||||
<li>创建文件/文件夹</li>
|
||||
<li>打开/关闭/切换文件</li>
|
||||
<li>复制/粘贴</li>
|
||||
<li>写入/保存/退出</li>
|
||||
<li>面板</li>
|
||||
<li>侧边栏</li>
|
||||
<li>Git符号</li>
|
||||
<li>全局主题</li>
|
||||
<li>文件类型主题</li>
|
||||
</ul>
|
||||
<p><code>编辑器</code></p>
|
||||
<ul>
|
||||
<li>显示行号</li>
|
||||
<li>搜索替换</li>
|
||||
</ul>
|
||||
<p><code>Code</code></p>
|
||||
<ul>
|
||||
<li>高亮</li>
|
||||
<li>格式化</li>
|
||||
<li>自动补全</li>
|
||||
<li>代码调试</li>
|
||||
</ul>
|
||||
<p><code>字符处理</code></p>
|
||||
<ul>
|
||||
<li>LF/CRLF处理</li>
|
||||
@@ -430,13 +442,18 @@
|
||||
<ul>
|
||||
<li>打开终端/复用终端</li>
|
||||
</ul>
|
||||
<p><code>文件操作</code></p>
|
||||
<ul>
|
||||
<li>创建文件/文件夹</li>
|
||||
<li>打开/关闭/切换文件</li>
|
||||
<li>复制/粘贴</li>
|
||||
<li>写入/保存/退出</li>
|
||||
</ul>
|
||||
<p><code>其他功能</code></p>
|
||||
<ul>
|
||||
<li>LSP</li>
|
||||
<li>代码调试</li>
|
||||
<li>工作区切换</li>
|
||||
<li>Git支持</li>
|
||||
<li>主题与显示效果</li>
|
||||
<li>gitui</li>
|
||||
<li>diff历史</li>
|
||||
</ul>
|
||||
<h2 id="yi-fen-you-xiu-de-vim-su-cha-biao">一份优秀的 Vim 速查表</h2>
|
||||
<blockquote>
|
||||
|
||||
@@ -110,6 +110,16 @@
|
||||
|
||||
|
||||
<ul><li class="post-list">
|
||||
<a href="https://blog.dich.bid/linux-3-android-dev/">
|
||||
<span class="post-date">2025-11-20</span>
|
||||
:: <span class="post-list-title">Linux-Android开发环境部署</span></a>
|
||||
|
||||
<span class="post-tags-inline">
|
||||
::
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
|
||||
|
||||
</li>
|
||||
<li class="post-list">
|
||||
<a href="https://blog.dich.bid/linux-2-stm32/">
|
||||
<span class="post-date">2025-07-20</span>
|
||||
:: <span class="post-list-title">Linux-STM32开发环境部署</span></a>
|
||||
|
||||
@@ -6,8 +6,27 @@
|
||||
<link rel="self" type="application/atom+xml" href="https://blog.dich.bid/atom.xml"/>
|
||||
<link rel="alternate" type="text/html" href="https://blog.dich.bid"/>
|
||||
<generator uri="https://www.getzola.org/">Zola</generator>
|
||||
<updated>2025-07-20T00:00:00+00:00</updated>
|
||||
<updated>2025-11-20T00:00:00+00:00</updated>
|
||||
<id>https://blog.dich.bid/atom.xml</id>
|
||||
<entry xml:lang="en">
|
||||
<title>Linux-Android开发环境部署</title>
|
||||
<published>2025-11-20T00:00:00+00:00</published>
|
||||
<updated>2025-11-20T00:00:00+00:00</updated>
|
||||
|
||||
<author>
|
||||
<name>
|
||||
|
||||
Unknown
|
||||
|
||||
</name>
|
||||
</author>
|
||||
|
||||
<link rel="alternate" type="text/html" href="https://blog.dich.bid/linux-3-android-dev/"/>
|
||||
<id>https://blog.dich.bid/linux-3-android-dev/</id>
|
||||
|
||||
<summary type="html"><p>前言 本文记录Android命令行开发环境在Linux上的部署,用以替代Android-studio。</p></summary>
|
||||
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
<title>Linux-STM32开发环境部署</title>
|
||||
<published>2025-07-20T00:00:00+00:00</published>
|
||||
@@ -24,8 +43,8 @@
|
||||
<link rel="alternate" type="text/html" href="https://blog.dich.bid/linux-2-stm32/"/>
|
||||
<id>https://blog.dich.bid/linux-2-stm32/</id>
|
||||
|
||||
<summary type="html"><p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前似乎没有Nixos上的打包。</p></summary>
|
||||
<summary type="html"><p>前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前没有Nixos上的打包。</p></summary>
|
||||
|
||||
</entry>
|
||||
<entry xml:lang="en">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/linux-3-android-dev/">Linux-Android开发环境部署</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-11-20
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文记录Android命令行开发环境在Linux上的部署,用以替代Android-studio。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/linux-3-android-dev/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/linux-2-stm32/">Linux-STM32开发环境部署</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -125,8 +158,8 @@
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前似乎没有Nixos上的打包。</p>
|
||||
<p>前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前没有Nixos上的打包。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
@@ -236,39 +269,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-baci/">乱七八糟:Baci实验笔记</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-04-23
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 BACI是一个简化的并发程序模拟器,这里对其语法与运行环境进行说明。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-baci/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -122,20 +122,20 @@
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前似乎没有Nixos上的打包。</p>
|
||||
<span id="continue-reading"></span><h2 id="huan-jing">环境</h2>
|
||||
<p>前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源
|
||||
软件,但目前没有Nixos上的打包。</p>
|
||||
<span id="continue-reading"></span><h2 id="yi-lai-bao">依赖包</h2>
|
||||
<ul>
|
||||
<li><strong>Ubuntu</strong></li>
|
||||
</ul>
|
||||
<p>以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。</p>
|
||||
<p>以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt update
|
||||
</span><span>sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li><strong>Nixos</strong></li>
|
||||
</ul>
|
||||
<p>虽然没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:</p>
|
||||
<p>虽然Nixos上没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:</p>
|
||||
<pre data-lang="nix" style="background-color:#151515;color:#e8e8d3;" class="language-nix "><code class="language-nix" data-lang="nix"><span>{
|
||||
</span><span> </span><span style="color:#ffb964;">description </span><span>= </span><span style="color:#99ad6a;">"STM32 && RT-Thread development environment"</span><span>;
|
||||
</span><span> </span><span style="color:#ffb964;">inputs</span><span>.</span><span style="color:#ffb964;">nixpkgs</span><span>.</span><span style="color:#ffb964;">url </span><span>= </span><span style="color:#99ad6a;">"github:NixOS/nixpkgs/nixpkgs-unstable"</span><span>;
|
||||
@@ -165,17 +165,31 @@
|
||||
</span><span>}
|
||||
</span></code></pre>
|
||||
<h2 id="yuan-ma">源码</h2>
|
||||
<p>使用Git拉取项目源码:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread/rt-thread.git
|
||||
</span><span>git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
|
||||
<p>随后使用Git拉取项目源码:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
|
||||
</span></code></pre>
|
||||
<h2 id="envgong-ju">ENV工具</h2>
|
||||
<p>使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span># 克隆仓库
|
||||
</span><span>git clone https://github.com/RT-Thread/env.git ~/env
|
||||
</span><span># 将 ~/env 添加到 PATH
|
||||
</span><span>export PATH="$PATH:$HOME/env"
|
||||
</span><span># 显示 PATH
|
||||
</span><span>echo "$PATH"
|
||||
</span><span># 查看 pkgs 命令是否存在
|
||||
</span><span>type pkgs
|
||||
</span></code></pre>
|
||||
<p>随后可以使用PKG初始化并安装两个必要的包:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>pkgs --update
|
||||
</span><span>pip install kconfiglib
|
||||
</span><span>pip install scons
|
||||
</span></code></pre>
|
||||
<h2 id="lian-jie">连接</h2>
|
||||
<p>使用USB连接开发板和开发PC,并使用lsusb查看是否连接成功:</p>
|
||||
<p>使用USB线连接开发板和开发PC,并使用lsusb命令查看是否出现:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>lsusb
|
||||
</span><span>Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
|
||||
</span></code></pre>
|
||||
<p>如果你和我一样使用 qemu ,需要在libvirt中使用Add_hardware添加usb设备。</p>
|
||||
<p>添加成功后可以使用这个命令来检测:</p>
|
||||
<p>添加成功后可以使用这个命令来检测是否连接成功:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>❯ st-info --probe
|
||||
</span><span>Found 1 stlink programmers
|
||||
</span><span> version: V2J35S26
|
||||
@@ -185,16 +199,11 @@
|
||||
</span><span> chipid: 0x413
|
||||
</span><span> dev-type: STM32F4x5_F4x7
|
||||
</span></code></pre>
|
||||
<h2 id="envgong-ju">ENV工具</h2>
|
||||
<p>使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。我使用的是fish,你也可以用其他的Shell,命令有所不同。</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>git clone https://github.com/RT-Thread/env.git ~/env
|
||||
</span><span>set -x PATH $PATH ~/env
|
||||
</span><span>fish_add_path ~/env
|
||||
</span><span>echo $PATH
|
||||
</span><span>type pkgs
|
||||
</span></code></pre>
|
||||
<h2 id="pkggong-ju">PKG工具</h2>
|
||||
<p>由于该项目大量使用Python,所以需要PKG包支持。首先我们修改这个文件的交叉工具链部分:</p>
|
||||
<blockquote>
|
||||
<p>如果你和我一样将Ubuntu安装在QEMU虚拟机中 ,需要在libvirt中使用Add_hardware添加usb设备。</p>
|
||||
</blockquote>
|
||||
<h2 id="xiu-gai-jiao-cha-gong-ju-lian">修改交叉工具链</h2>
|
||||
<p>链接成功后进入项目目录,发现<code>rtconfig.py</code>没有Linux路径,需要我们手动修改交叉工具链部分:</p>
|
||||
<pre data-lang="python" style="background-color:#151515;color:#e8e8d3;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#888888;">#修改 rtconfig.py
|
||||
</span><span>
|
||||
</span><span style="color:#888888;"># cross_tool provides the cross compiler
|
||||
@@ -207,6 +216,7 @@
|
||||
</span><span> </span><span style="color:#888888;"># Windows 平台
|
||||
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#8fbfdc;">r</span><span style="color:#556633;">'</span><span style="color:#99ad6a;">C:\Users\XXYYZZ</span><span style="color:#556633;">'
|
||||
</span><span> </span><span style="color:#8fbfdc;">else</span><span>:
|
||||
</span><span> </span><span style="color:#888888;"># 修改这里
|
||||
</span><span> </span><span style="color:#888888;"># Linux / macOS 平台
|
||||
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#556633;">'</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">'
|
||||
</span><span>
|
||||
@@ -226,11 +236,6 @@
|
||||
</span><span> </span><span style="color:#8fbfdc;">else</span><span>:
|
||||
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#556633;">'</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">'
|
||||
</span></code></pre>
|
||||
<p>随后可以使用PKG初始化并安装两个必要的包:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>pkgs --update
|
||||
</span><span>pip install kconfiglib
|
||||
</span><span>pip install scons
|
||||
</span></code></pre>
|
||||
<h2 id="bian-yi">编译</h2>
|
||||
<p>在完成以上设置之后我们可以开始编译。STM32使用scons编译系统,同样是menuconfig命令:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>scons --menuconfig
|
||||
@@ -250,92 +255,91 @@
|
||||
<p>除了USB之外我们还可以使用串口连接:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>sudo apt install picocom
|
||||
</span><span>picocom -b 115200 /dev/ttyACM0
|
||||
</span><span>version
|
||||
</span></code></pre>
|
||||
<p>可以使用<code>ctrl + A 然后 ctrl + x</code>退出。</p>
|
||||
<h2 id="shi-yong-cmake">使用Cmake</h2>
|
||||
<p>通过官方文档可以得知除了scons外还可以使用Cmake来编译.</p>
|
||||
<p>首先找到编译器的路径,并export:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>❯ which arm-none-eabi-gcc
|
||||
</span><span>/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
|
||||
</span><span>export RTT_EXEC_PATH=/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
|
||||
</span><span>export RTT_CC=gcc
|
||||
<p>首先找到编译器的路径,并export,我这里是Nixos的路径,如果你使用其他发行版注意修改:</p>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">❯</span><span> which arm-none-eabi-gcc
|
||||
</span><span style="color:#ffb964;">/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">RTT_EXEC_PATH</span><span>=</span><span style="color:#99ad6a;">/nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">RTT_CC</span><span>=</span><span style="color:#99ad6a;">gcc
|
||||
</span></code></pre>
|
||||
<p>随后使用指令<code>scons --target=cmake</code>:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>❯ scons --target=cmake
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">❯</span><span> scons</span><span style="color:#ffb964;"> --target</span><span>=cmake
|
||||
</span><span>
|
||||
</span><span>scons: Reading SConscript files ...
|
||||
</span><span>Newlib version:4.5.0
|
||||
</span><span>Update setting files for CMakeLists.txt...
|
||||
</span><span>Done!
|
||||
</span><span>scons: done reading SConscript files.
|
||||
</span><span>scons: Building targets ...
|
||||
</span><span>scons: building associated VariantDir targets: build
|
||||
</span><span>CC build/applications/main.o
|
||||
</span><span>LINK rt-thread.elf
|
||||
</span><span>arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
|
||||
</span><span>arm-none-eabi-size rt-thread.elf
|
||||
</span><span>scons: done building targets.
|
||||
</span><span style="color:#ffb964;">scons:</span><span> Reading SConscript files ...
|
||||
</span><span style="color:#ffb964;">Newlib</span><span> version:4.5.0
|
||||
</span><span style="color:#ffb964;">Update</span><span> setting files for CMakeLists.txt...
|
||||
</span><span style="color:#ffb964;">Done!
|
||||
</span><span style="color:#ffb964;">scons:</span><span> done reading SConscript files.
|
||||
</span><span style="color:#ffb964;">scons:</span><span> Building targets ...
|
||||
</span><span style="color:#ffb964;">scons:</span><span> building associated VariantDir targets: build
|
||||
</span><span style="color:#ffb964;">CC</span><span> build/applications/main.o
|
||||
</span><span style="color:#ffb964;">LINK</span><span> rt-thread.elf
|
||||
</span><span style="color:#ffb964;">arm-none-eabi-objcopy -O</span><span> binary rt-thread.elf rtthread.bin
|
||||
</span><span style="color:#ffb964;">arm-none-eabi-size</span><span> rt-thread.elf
|
||||
</span><span style="color:#ffb964;">scons:</span><span> done building targets.
|
||||
</span></code></pre>
|
||||
<p>可以看到生成CmakeLists.txt成功,随后开始构建:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>❯ cd ./build
|
||||
</span><span>❯ cmake ..
|
||||
</span><span>CMake Warning (dev) at CMakeLists.txt:43:
|
||||
</span><span> Syntax Warning in cmake code at column 100
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">❯</span><span> cd ./build
|
||||
</span><span style="color:#ffb964;">❯</span><span> cmake ..
|
||||
</span><span style="color:#ffb964;">CMake</span><span> Warning (dev) </span><span style="color:#ffb964;">at</span><span> CMakeLists.txt:43:
|
||||
</span><span> </span><span style="color:#ffb964;">Syntax</span><span> Warning in cmake code at column 100
|
||||
</span><span>
|
||||
</span><span> Argument not separated from preceding token by whitespace.
|
||||
</span><span>This warning is for project developers. Use -Wno-dev to suppress it.
|
||||
</span><span> </span><span style="color:#ffb964;">Argument</span><span> not separated from preceding token by whitespace.
|
||||
</span><span style="color:#ffb964;">This</span><span> warning is for project developers. Use</span><span style="color:#ffb964;"> -Wno-dev</span><span> to suppress it.
|
||||
</span><span>
|
||||
</span><span>-- The C compiler identification is GNU 14.3.1
|
||||
</span><span>-- The CXX compiler identification is GNU 14.3.1
|
||||
</span><span>-- The ASM compiler identification is GNU
|
||||
</span><span>-- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
|
||||
</span><span>-- Detecting C compiler ABI info
|
||||
</span><span>-- Detecting C compiler ABI info - done
|
||||
</span><span>-- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
|
||||
</span><span>-- Detecting C compile features
|
||||
</span><span>-- Detecting C compile features - done
|
||||
</span><span>-- Detecting CXX compiler ABI info
|
||||
</span><span>-- Detecting CXX compiler ABI info - done
|
||||
</span><span>-- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
|
||||
</span><span>-- Detecting CXX compile features
|
||||
</span><span>-- Detecting CXX compile features - done
|
||||
</span><span>-- Configuring done (0.4s)
|
||||
</span><span>-- Generating done (0.0s)
|
||||
</span><span>-- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
|
||||
</span><span style="color:#ffb964;">--</span><span> The C compiler identification is GNU 14.3.1
|
||||
</span><span style="color:#ffb964;">--</span><span> The CXX compiler identification is GNU 14.3.1
|
||||
</span><span style="color:#ffb964;">--</span><span> The ASM compiler identification is GNU
|
||||
</span><span style="color:#ffb964;">--</span><span> Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting C compiler ABI info
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting C compiler ABI info - done
|
||||
</span><span style="color:#ffb964;">--</span><span> Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting C compile features
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting C compile features - done
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compiler ABI info
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compiler ABI info - done
|
||||
</span><span style="color:#ffb964;">--</span><span> Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compile features
|
||||
</span><span style="color:#ffb964;">--</span><span> Detecting CXX compile features - done
|
||||
</span><span style="color:#ffb964;">--</span><span> Configuring done (0.4s)
|
||||
</span><span style="color:#ffb964;">--</span><span> Generating done (0.0s)
|
||||
</span><span style="color:#ffb964;">--</span><span> Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
|
||||
</span></code></pre>
|
||||
<p>使用<code>make</code>命令编译:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>❯ make
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">❯</span><span> make
|
||||
</span><span>[ 1%] Building C object CMakeFiles/rtthread.elf.dir/applications/main.c.obj
|
||||
</span><span>[ 2%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cctype.c.obj
|
||||
</span><span>[ 3%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cstdio.c.obj
|
||||
</span><span>......
|
||||
</span><span style="color:#ffb964;">......
|
||||
</span><span>[ 97%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c.obj
|
||||
</span><span>[ 98%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/libraries/STM32F4xx_HAL/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c.obj
|
||||
</span><span>[100%] Linking C executable rtthread.elf
|
||||
</span><span> text data bss dec hex filename
|
||||
</span><span> 98516 1468 8400 108384 1a760 rtthread.elf
|
||||
</span><span>[100%] Built target rtthread.elf
|
||||
</span><span style="color:#ffb964;">[100%]</span><span> Linking C executable rtthread.elf
|
||||
</span><span> </span><span style="color:#ffb964;">text</span><span> data bss dec hex filename
|
||||
</span><span> </span><span style="color:#ffb964;">98516</span><span> 1468 8400 108384 1a760 rtthread.elf
|
||||
</span><span style="color:#ffb964;">[100%]</span><span> Built target rtthread.elf
|
||||
</span></code></pre>
|
||||
<h2 id="shi-yong-renode">使用Renode</h2>
|
||||
<p>如果没有真实的开发版,可以使用Renode来进行仿真模拟:</p>
|
||||
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span># 启动renode
|
||||
</span><span>renode
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 启动renode
|
||||
</span><span style="color:#ffb964;">renode
|
||||
</span><span>
|
||||
</span><span># 创建机器
|
||||
</span><span>(monitor) mach create
|
||||
</span><span style="color:#888888;"># 创建机器
|
||||
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) mach create
|
||||
</span><span>
|
||||
</span><span># 加载STM32F407平台
|
||||
</span><span>(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
|
||||
</span><span style="color:#888888;"># 加载STM32F407平台
|
||||
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
|
||||
</span><span>
|
||||
</span><span># 加载你的固件
|
||||
</span><span>(monitor) sysbus LoadELF @/你的路径/rtthread.elf
|
||||
</span><span style="color:#888888;"># 加载你的固件
|
||||
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) sysbus LoadELF @/你的路径/rtthread.elf
|
||||
</span><span>
|
||||
</span><span># 打开串口窗口(finsh会显示在这里)
|
||||
</span><span>(monitor) showAnalyzer sysbus.usart1
|
||||
</span><span style="color:#888888;"># 打开串口窗口(finsh会显示在这里)
|
||||
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) showAnalyzer sysbus.usart1
|
||||
</span><span>
|
||||
</span><span># 启动仿真
|
||||
</span><span>(monitor) start
|
||||
</span><span style="color:#888888;"># 启动仿真
|
||||
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) start
|
||||
</span></code></pre>
|
||||
<blockquote>
|
||||
<p>Renode 常用命令大全</p>
|
||||
@@ -419,6 +423,13 @@
|
||||
</a>
|
||||
</span>
|
||||
|
||||
|
||||
<span class="button next">
|
||||
<a href="https://blog.dich.bid/linux-3-android-dev/">
|
||||
<span class="button__text">Linux-Android开发环境部署</span>
|
||||
<span class="button__icon">→</span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
326
public/linux-3-android-dev/index.html
Normal file
326
public/linux-3-android-dev/index.html
Normal file
@@ -0,0 +1,326 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Dich's Blog</title>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="robots" content="noodp"/>
|
||||
<!-- 字体预加载 - 减少布局偏移 CLS -->
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-regular.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bold.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-italic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="https://blog.dich.bid/fonts/hack-bolditalic.woff2?sha=3114f1256" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
|
||||
|
||||
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
|
||||
|
||||
<meta name="description" content="">
|
||||
|
||||
<meta property="og:description" content="">
|
||||
<meta property="og:title" content="Dich's Blog">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:url" content="https://blog.dich.bid/linux-3-android-dev/">
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:description" content="">
|
||||
<meta name="twitter:title" content="Dich's Blog">
|
||||
<meta property="twitter:domain" content="blog.dich.bid">
|
||||
<meta property="twitter:url" content="https://blog.dich.bid/linux-3-android-dev/">
|
||||
|
||||
<link rel="alternate" type="application/atom+xml" title="Dich's Blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
|
||||
<link rel="shortcut icon" type="image/webp" href="/dich.webp">
|
||||
|
||||
<!-- ✅ Added center alignment styles -->
|
||||
<style>
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 1rem 0;
|
||||
}
|
||||
|
||||
.footer__inner {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.copyright {
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="">
|
||||
<div class="container">
|
||||
|
||||
<header class="header">
|
||||
<div class="header__inner">
|
||||
<div class="header__logo">
|
||||
|
||||
<a href="https://blog.dich.bid" style="text-decoration: none;">
|
||||
<div class="logo">
|
||||
|
||||
Dich's Blog
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<nav class="menu">
|
||||
<ul class="menu__inner">
|
||||
<li class="active"><a href="https://blog.dich.bid">Blog</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/archive">Archive</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/weekly">Weekly</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/tags">Tags</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/search">Search</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/links">Links</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/atom.xml">Rss</a></li>
|
||||
|
||||
<li><a href="https://blog.dich.bid/about">About me</a></li>
|
||||
|
||||
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">My github</a></li>
|
||||
|
||||
<li><a href="https://github.com/getzola/zola" target="_blank" rel="noopener noreferrer">Zola frame</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
<div class="content">
|
||||
|
||||
<div class="post" data-pagefind-body>
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/linux-3-android-dev/">Linux-Android开发环境部署</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-11-20
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文记录Android命令行开发环境在Linux上的部署,用以替代Android-studio。</p>
|
||||
<span id="continue-reading"></span><h2 id="ubuntufang-an">Ubuntu方案</h2>
|
||||
<ul>
|
||||
<li>首先安装依赖包:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sudo</span><span> apt install openjdk-17-jdk nodejs
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>安装Command-tools:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">mkdir -p ~</span><span>/Android/cmdline-tools/latest
|
||||
</span><span style="color:#888888;">## 下载链接:https://developer.android.com/studio?hl=zh-cn#command-tools
|
||||
</span><span>cd </span><span style="color:#ffb964;">~</span><span>/Android/cmdline-tools/latest
|
||||
</span><span style="color:#ffb964;">wget</span><span> https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip
|
||||
</span><span style="color:#ffb964;">unzip</span><span> ./commandlinetools-linux-13114758_latest.zip
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>使用官方脚本安装Sdkman包管理器:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">curl -s </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">https://get.sdkman.io</span><span style="color:#556633;">" </span><span>| </span><span style="color:#ffb964;">bash
|
||||
</span><span>source </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.sdkman/bin/sdkman-init.sh</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>随后使用Sdkman下载并安装gradle/kotlin:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sdk</span><span> install gradle
|
||||
</span><span style="color:#ffb964;">sdk</span><span> install kotlin
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>设置环境变量:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">ANDROID_HOME</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/Android
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/emulator
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/platform-tools
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/cmdline-tools/latest/bin
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">PATH</span><span>=</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">PATH</span><span style="color:#99ad6a;">:$</span><span style="color:#ffb964;">ANDROID_HOME</span><span style="color:#99ad6a;">/build-tools/34.0.0
|
||||
</span><span>source </span><span style="color:#ffb964;">~</span><span>/.bashrc
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>继续下载一些SDK平台与构建工具:</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">sdkmanager </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">platforms;android-34</span><span style="color:#556633;">" "</span><span style="color:#99ad6a;">build-tools;34.0.0</span><span style="color:#556633;">" "</span><span style="color:#99ad6a;">platform-tools</span><span style="color:#556633;">"
|
||||
</span><span style="color:#ffb964;">sdkmanager </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">emulator</span><span style="color:#556633;">"</span><span> //虚拟机中调试
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>查看版本</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>$ sdk version
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">SDKMAN!
|
||||
</span><span style="color:#ffb964;">script:</span><span> 5.20.0
|
||||
</span><span style="color:#ffb964;">native:</span><span> 0.7.14 (linux x86_64)
|
||||
</span><span>
|
||||
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>$ gradle</span><span style="color:#ffb964;"> -v
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">------------------------------------------------------------
|
||||
</span><span style="color:#ffb964;">Gradle</span><span> 8.10.2
|
||||
</span><span style="color:#ffb964;">------------------------------------------------------------
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">Build</span><span> time: 2024-09-23 21:28:39 UTC
|
||||
</span><span style="color:#ffb964;">Revision:</span><span> 415adb9e06a516c44b391edff552fd42139443f7
|
||||
</span><span>
|
||||
</span><span style="color:#ffb964;">Kotlin:</span><span> 1.9.24
|
||||
</span><span style="color:#ffb964;">Groovy:</span><span> 3.0.22
|
||||
</span><span style="color:#ffb964;">Ant:</span><span> Apache Ant(TM) </span><span style="color:#ffb964;">version</span><span> 1.10.14 compiled on August 16 2023
|
||||
</span><span style="color:#ffb964;">Launcher</span><span> JVM: 17.0.16 (Ubuntu 17.0.16+8-Ubuntu-0ubuntu124.04.1)
|
||||
</span><span style="color:#ffb964;">Daemon</span><span> JVM: /usr/lib/jvm/java-17-openjdk-amd64 (no JDK specified, using current Java home)
|
||||
</span><span style="color:#ffb964;">OS:</span><span> Linux 6.14.0-35-generic amd64
|
||||
</span><span>
|
||||
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>/Git/android-templates$ kotlin</span><span style="color:#ffb964;"> -version
|
||||
</span><span style="color:#ffb964;">Kotlin</span><span> version 1.6.21-release-334 (JRE 21.0.8+9-Ubuntu-0ubuntu124.04.1)
|
||||
</span><span>(</span><span style="color:#ffb964;">base</span><span>) dich@uos:</span><span style="color:#ffb964;">~</span><span>/Git/android-templates/template-compose$ kscript</span><span style="color:#ffb964;"> -v
|
||||
</span><span style="color:#ffb964;">Copyright</span><span> : 2022 Holger Brandl
|
||||
</span><span style="color:#ffb964;">License</span><span> : MIT
|
||||
</span><span style="color:#ffb964;">Version</span><span> : v4.0.3
|
||||
</span><span style="color:#ffb964;">Website</span><span> : https://github.com/holgerbrandl/kscript
|
||||
</span><span style="color:#ffb964;">A</span><span> new version (v4.2.0) </span><span style="color:#ffb964;">of</span><span> kscript is available.
|
||||
</span><span style="color:#ffb964;">Kotlin</span><span> : 2.1.10-release-473
|
||||
</span><span style="color:#ffb964;">Java</span><span> : JRE 17.0.16+8
|
||||
</span></code></pre>
|
||||
<h2 id="keyfang-an">Key方案</h2>
|
||||
<p>构建Release包需要密钥签名验证,可以使用传统的明文配置或者使用密钥管理器.</p>
|
||||
<h3 id="xiang-tong-bu-fen">相同部分</h3>
|
||||
<ul>
|
||||
<li>生成密钥</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">keytool -genkey -v </span><span>\
|
||||
</span><span style="color:#ffb964;"> -keystore ~</span><span>/.android/jetlagged-release.keystore \
|
||||
</span><span style="color:#ffb964;"> -alias</span><span> jetlagged \
|
||||
</span><span style="color:#ffb964;"> -keyalg</span><span> RSA \
|
||||
</span><span style="color:#ffb964;"> -keysize</span><span> 2048 \
|
||||
</span><span style="color:#ffb964;"> -validity</span><span> 10000
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>修改app/build.gradle.kts</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span> </span><span style="color:#ffb964;">signingConfigs </span><span>{
|
||||
</span><span> create(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">"</span><span>) {
|
||||
</span><span> storeFile = System.getenv(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">KEYSTORE_FILE</span><span style="color:#556633;">"</span><span>)?.let { file(it) }
|
||||
</span><span> storePassword = System.getenv(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">KEYSTORE_PASSWORD</span><span style="color:#556633;">"</span><span>)
|
||||
</span><span> keyAlias = System.getenv(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">KEY_ALIAS</span><span style="color:#556633;">"</span><span>)
|
||||
</span><span> keyPassword = System.getenv(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">KEY_PASSWORD</span><span style="color:#556633;">"</span><span>)
|
||||
</span><span> }
|
||||
</span><span> }
|
||||
</span><span>
|
||||
</span><span> </span><span style="color:#ffb964;">buildTypes </span><span>{
|
||||
</span><span> release {
|
||||
</span><span> signingConfig = signingConfigs.getByName(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">release</span><span style="color:#556633;">"</span><span>) // 添加这行
|
||||
</span><span> isMinifyEnabled = true
|
||||
</span><span> proguardFiles(
|
||||
</span><span> getDefaultProguardFile(</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">proguard-android-optimize.txt</span><span style="color:#556633;">"</span><span>),
|
||||
</span><span> </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">proguard-rules.pro</span><span style="color:#556633;">"
|
||||
</span><span> )
|
||||
</span><span> }
|
||||
</span><span> }
|
||||
</span></code></pre>
|
||||
<h3 id="chuan-tong-fang-fa">传统方法</h3>
|
||||
<ul>
|
||||
<li>创建配置文件</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">cat </span><span>> </span><span style="color:#ffb964;">~</span><span>/.android-signing-secrets </span><span style="color:#99ad6a;"><< </span><span style="color:#556633;">'</span><span style="color:#8fbfdc;">EOF</span><span style="color:#556633;">'
|
||||
</span><span style="color:#99ad6a;">export KEYSTORE_FILE="$HOME/.android/jetlagged-release.keystore"
|
||||
</span><span style="color:#99ad6a;">export KEYSTORE_PASSWORD="你的keystore密码"
|
||||
</span><span style="color:#99ad6a;">export KEY_ALIAS="jetlagged"
|
||||
</span><span style="color:#99ad6a;">export KEY_PASSWORD="你的key密码"
|
||||
</span><span style="color:#8fbfdc;">EOF
|
||||
</span><span>
|
||||
</span><span style="color:#888888;"># 设置权限
|
||||
</span><span style="color:#ffb964;">chmod</span><span> 600 </span><span style="color:#ffb964;">~</span><span>/.android-signing-secrets
|
||||
</span><span>
|
||||
</span><span style="color:#888888;"># 添加到 gitignore (全局)
|
||||
</span><span>echo </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">.android-signing-secrets</span><span style="color:#556633;">" </span><span>>> </span><span style="color:#ffb964;">~</span><span>/.gitignore_global
|
||||
</span></code></pre>
|
||||
<ul>
|
||||
<li>flake配置</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># Auto load Key
|
||||
</span><span style="color:#8fbfdc;">if </span><span>[ </span><span style="color:#ffb964;">-f </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android-signing-secrets</span><span style="color:#556633;">" </span><span>]; </span><span style="color:#8fbfdc;">then
|
||||
</span><span> source </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android-signing-secrets</span><span style="color:#556633;">"
|
||||
</span><span> echo </span><span style="color:#556633;">"</span><span style="color:#99ad6a;">KeyOK</span><span style="color:#556633;">"
|
||||
</span><span style="color:#8fbfdc;">fi
|
||||
</span></code></pre>
|
||||
<h3 id="xian-dai-fang-fa">现代方法</h3>
|
||||
<ul>
|
||||
<li>安装libsecret包</li>
|
||||
<li>keepassxc新建Android群组,添加条目<code>android_key_password</code>和<code>android_keystore_password</code>;</li>
|
||||
<li>设置密码,和上面生成的相同;</li>
|
||||
<li>在条目的高级-属性中添加<code>name/android_key_password</code>和<code>name/android_keystore_password</code>;</li>
|
||||
<li>打开设置-保密服务集成,公开Android文件夹</li>
|
||||
<li>flake中写</li>
|
||||
</ul>
|
||||
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># Release Key
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEYSTORE_FILE</span><span>=</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$</span><span style="color:#ffb964;">HOME</span><span style="color:#99ad6a;">/.android/jetlagged-release.keystore</span><span style="color:#556633;">"
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEY_ALIAS</span><span>=</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">jetlagged</span><span style="color:#556633;">"
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEYSTORE_PASSWORD</span><span>=</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">secret-tool</span><span style="color:#99ad6a;"> lookup name android_keystore_password)</span><span style="color:#556633;">"
|
||||
</span><span style="color:#8fbfdc;">export </span><span style="color:#ffb964;">KEY_PASSWORD</span><span>=</span><span style="color:#556633;">"</span><span style="color:#99ad6a;">$(</span><span style="color:#ffb964;">secret-tool</span><span style="color:#99ad6a;"> lookup name android_key_password)</span><span style="color:#556633;">"
|
||||
</span></code></pre>
|
||||
<hr />
|
||||
<p><strong>Done.</strong></p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
<div class="pagination__title">
|
||||
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
|
||||
<hr />
|
||||
</div>
|
||||
<div class="pagination__buttons">
|
||||
<span class="button previous">
|
||||
<a href="https://blog.dich.bid/linux-2-stm32/">
|
||||
<span class="button__icon">←</span>
|
||||
<span class="button__text">Linux-STM32开发环境部署</span>
|
||||
</a>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<footer class="footer">
|
||||
<div class="footer__inner">
|
||||
<div class="copyright">
|
||||
<span>©
|
||||
2025
|
||||
Dichgrem</span>
|
||||
<span class="copyright-theme">
|
||||
<span class="copyright-theme-sep"> :: CC BY-SA 4.0 :: A friend comes from distant lands</span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-openwrt/">综合工程:OpenWrt路由部署与软件编译</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2023-08-12
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/zong-he-gong-cheng/">#综合工程</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 openwrt 是一个自由的、兼容性好的嵌入式 linux 发行版。作为软路由玩家必备的一款神器,可以实现诸如去广告,多拨和科学上网等多种功能。本文介绍openwrt在各种平台上的部署流程。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/awesome-openwrt/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-pve-mcsm/">综合工程:PVE安装与MC服务器搭建</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-baci/">乱七八糟:Baci实验笔记</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-04-23
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 BACI是一个简化的并发程序模拟器,这里对其语法与运行环境进行说明。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-baci/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-lazyvim/">乱七八糟:lazyvim快速上手</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-markdown/">乱七八糟:Markdown使用快速教程</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-04-08
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文为 Markdown 教程,内容涵盖 Markdown 的历史、作用、基本语法和显示效果,可以在github将本文的源码拷贝供大家参考和学习。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-markdown/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-markdown/">乱七八糟:Markdown使用快速教程</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-04-08
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文为 Markdown 教程,内容涵盖 Markdown 的历史、作用、基本语法和显示效果,可以在github将本文的源码拷贝供大家参考和学习。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-markdown/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-gfs/">乱七八糟:GFS项目考量笔记</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/network-homenet-1/">家庭组网系列(1):方案与设备选购</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-01-21
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文介绍一些家庭组网方案和家庭网络升级方案。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/network-homenet-1/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/network-homenet-1/">家庭组网系列(1):方案与设备选购</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2025-01-21
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文介绍一些家庭组网方案和家庭网络升级方案。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/network-homenet-1/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-2024/">乱七八糟:2024年度总结</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-cslearning/">乱七八糟:计算机科学优质视频</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-05-31
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 CSdiy珠玉在前,为CS教育做出了极大贡献.这里分享一些优质的CS学习相关视频.</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-cslearning/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-cslearning/">乱七八糟:计算机科学优质视频</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-05-31
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 CSdiy珠玉在前,为CS教育做出了极大贡献.这里分享一些优质的CS学习相关视频.</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-cslearning/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/windows-5-py/">Windows系列(5):Python开发配置</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/windows-2-set/">Windows系列(2):常用操作与配置</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-05-25
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/windows/">#Windows</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一,其用户界面的设计非常经典,但存在许多不足之处,本篇记录一些常用脚本。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/windows-2-set/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/windows-2-set/">Windows系列(2):常用操作与配置</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-05-25
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/windows/">#Windows</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一,其用户界面的设计非常经典,但存在许多不足之处,本篇记录一些常用脚本。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/windows-2-set/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/windows-1-install/">Windows系列(1):系统安装与设置</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-opensource/">乱七八糟:开源软件与协议</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-03-03
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文旨在介绍开源以及开源许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-opensource/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-opensource/">乱七八糟:开源软件与协议</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-03-03
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文旨在介绍开源以及开源许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-opensource/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/network-how-email-works-2/">网络艺术:自建域名邮箱</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/network-isps/">网络艺术:国内/国际骨干ISP线路整理</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-02-10
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文主要探讨的是IPv4网络,国际出口线路的质量分析以及各大ISP的介绍。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/network-isps/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/network-isps/">网络艺术:国内/国际骨干ISP线路整理</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2024-02-10
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/network/">#Network</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 本文主要探讨的是IPv4网络,国际出口线路的质量分析以及各大ISP的介绍。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/network-isps/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-git/">乱七八糟:Git使用简明手册</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-accurate-pronunciation/">乱七八糟:常见发音错误术语集合</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2023-08-25
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-accurate-pronunciation/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
@@ -107,6 +107,39 @@
|
||||
<div class="posts">
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-accurate-pronunciation/">乱七八糟:常见发音错误术语集合</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2023-08-25
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/luan-qi-ba-zao/">#乱七八糟</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/about-accurate-pronunciation/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/about-calling-cards/">乱七八糟:流量卡购买与套路</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
@@ -235,39 +268,6 @@
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div class="post on-list">
|
||||
|
||||
<h1 class="post-title"><a href="https://blog.dich.bid/awesome-openwrt/">综合工程:OpenWrt路由部署与软件编译</a></h1>
|
||||
<div class="post-meta-inline">
|
||||
|
||||
<span class="post-date">
|
||||
2023-08-12
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<span class="post-tags-inline">
|
||||
:: tags:
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/zong-he-gong-cheng/">#综合工程</a></span>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-content">
|
||||
<p>前言 openwrt 是一个自由的、兼容性好的嵌入式 linux 发行版。作为软路由玩家必备的一款神器,可以实现诸如去广告,多拨和科学上网等多种功能。本文介绍openwrt在各种平台上的部署流程。</p>
|
||||
</div>
|
||||
<div>
|
||||
<!-- ︎ -- force text style - some devices render this as emoji -->
|
||||
<a class="read-more button" href="https://blog.dich.bid/awesome-openwrt/">
|
||||
<span class="button__text">Read more</span>
|
||||
<span class="button__icon">↩︎</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="pagination">
|
||||
<div class="pagination__buttons">
|
||||
|
||||
BIN
public/pagefind/fragment/en_26bba7e.pf_fragment
Normal file
BIN
public/pagefind/fragment/en_26bba7e.pf_fragment
Normal file
Binary file not shown.
BIN
public/pagefind/fragment/en_3e963e1.pf_fragment
Normal file
BIN
public/pagefind/fragment/en_3e963e1.pf_fragment
Normal file
Binary file not shown.
BIN
public/pagefind/fragment/en_ad72516.pf_fragment
Normal file
BIN
public/pagefind/fragment/en_ad72516.pf_fragment
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
public/pagefind/index/en_14737ec.pf_index
Normal file
BIN
public/pagefind/index/en_14737ec.pf_index
Normal file
Binary file not shown.
BIN
public/pagefind/index/en_1acdddd.pf_index
Normal file
BIN
public/pagefind/index/en_1acdddd.pf_index
Normal file
Binary file not shown.
Binary file not shown.
BIN
public/pagefind/index/en_4d9c321.pf_index
Normal file
BIN
public/pagefind/index/en_4d9c321.pf_index
Normal file
Binary file not shown.
BIN
public/pagefind/index/en_556894b.pf_index
Normal file
BIN
public/pagefind/index/en_556894b.pf_index
Normal file
Binary file not shown.
BIN
public/pagefind/index/en_57fc655.pf_index
Normal file
BIN
public/pagefind/index/en_57fc655.pf_index
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
{"version":"1.3.0","languages":{"en":{"hash":"en_15f5696b4f","wasm":"en","page_count":78}}}
|
||||
{"version":"1.3.0","languages":{"en":{"hash":"en_b39f2e47c5","wasm":"en","page_count":79}}}
|
||||
Binary file not shown.
BIN
public/pagefind/pagefind.en_b39f2e47c5.pf_meta
Normal file
BIN
public/pagefind/pagefind.en_b39f2e47c5.pf_meta
Normal file
Binary file not shown.
@@ -153,6 +153,10 @@
|
||||
<loc>https://blog.dich.bid/linux-2-stm32/</loc>
|
||||
<lastmod>2025-07-20</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.dich.bid/linux-3-android-dev/</loc>
|
||||
<lastmod>2025-11-20</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.dich.bid/network-aria2/</loc>
|
||||
<lastmod>2025-04-15</lastmod>
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
<li class="tag-list">
|
||||
<a href="https://blog.dich.bid/tags/linux/">
|
||||
Linux (3 posts)
|
||||
Linux (4 posts)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ Dich's Blog</title>
|
||||
<div class="post">
|
||||
<h1 class="post-title">
|
||||
tag: #Linux
|
||||
(3 posts)
|
||||
(4 posts)
|
||||
</h1>
|
||||
|
||||
<a href="https://blog.dich.bid/tags">
|
||||
@@ -119,6 +119,16 @@ Dich's Blog</title>
|
||||
|
||||
|
||||
<ul><li class="post-list">
|
||||
<a href="https://blog.dich.bid/linux-3-android-dev/">
|
||||
<span class="post-date">2025-11-20</span>
|
||||
:: <span class="post-list-title">Linux-Android开发环境部署</span></a>
|
||||
|
||||
<span class="post-tags-inline">
|
||||
::
|
||||
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
|
||||
|
||||
</li>
|
||||
<li class="post-list">
|
||||
<a href="https://blog.dich.bid/linux-2-stm32/">
|
||||
<span class="post-date">2025-07-20</span>
|
||||
:: <span class="post-list-title">Linux-STM32开发环境部署</span></a>
|
||||
|
||||
Reference in New Issue
Block a user