diff --git a/content/linux-2-stm32.md b/content/linux-2-stm32.md index c6481c0..c7454da 100644 --- a/content/linux-2-stm32.md +++ b/content/linux-2-stm32.md @@ -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上的打包。 -## 环境 +## 依赖包 - **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 diff --git a/public/atom.xml b/public/atom.xml index a2a3984..d7c6d85 100644 --- a/public/atom.xml +++ b/public/atom.xml @@ -24,8 +24,8 @@ https://blog.dich.bid/linux-2-stm32/ - <p>前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。</p> + <p>前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。</p> diff --git a/public/index.html b/public/index.html index 81f7d20..2a72406 100644 --- a/public/index.html +++ b/public/index.html @@ -125,8 +125,8 @@
-

前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。

+

前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。

diff --git a/public/linux-2-stm32/index.html b/public/linux-2-stm32/index.html index fc2a5a7..68b83df 100644 --- a/public/linux-2-stm32/index.html +++ b/public/linux-2-stm32/index.html @@ -122,20 +122,20 @@
-

前言 本文记录STM32命令行开发环境在Ubuntu上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 -软件,但目前似乎没有Nixos上的打包。

-

环境

+

前言 本文记录STM32命令行开发环境在Linux上的部署,用以替代Windows上的RT-Thread-studio。RT-Thread-studio同样是开源 +软件,但目前没有Nixos上的打包。

+

依赖包

  • Ubuntu
-

以ubuntu24.04为例,安装这些包,包括连接工具,工具链和调试器等等。

+

以ubuntu24.04为例,首先安装这些包,包括连接工具,工具链和调试器等等。

sudo apt update
 sudo apt install -y git python3 scons openocd stlink-tools gcc-arm-none-eabi gdb-multiarch
 
  • Nixos
-

虽然没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:

+

虽然Nixos上没有RT-Thread-studio这个包,但是可以用flake.nix很方便的搭建一个开发环境:

{
   description = "STM32 && RT-Thread development environment";
   inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
@@ -165,17 +165,31 @@
 }
 

源码

-

使用Git拉取项目源码:

-
git clone https://github.com/RT-Thread/rt-thread.git
-git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
+

随后使用Git拉取项目源码:

+
git clone https://github.com/RT-Thread-Studio/sdk-bsp-stm32f407-spark.git
+
+

ENV工具

+

使用Git拉取RT-Thread配套的linux开发环境,并添加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初始化并安装两个必要的包:

+
pkgs --update
+pip install kconfiglib
+pip install scons
 

连接

-

使用USB连接开发板和开发PC,并使用lsusb查看是否连接成功:

+

使用USB线连接开发板和开发PC,并使用lsusb命令查看是否出现:

lsusb
 Bus 001 Device 004: ID 0483:374b STMicroelectronics ST-LINK/V2.1
 
-

如果你和我一样使用 qemu ,需要在libvirt中使用Add_hardware添加usb设备。

-

添加成功后可以使用这个命令来检测:

+

添加成功后可以使用这个命令来检测是否连接成功:

❯ st-info --probe
 Found 1 stlink programmers
   version:    V2J35S26
@@ -185,16 +199,11 @@
   chipid:     0x413
   dev-type:   STM32F4x5_F4x7
 
-

ENV工具

-

使用Git拉取RT-Thread配套的linux开发环境,并添加Shell变量。我使用的是fish,你也可以用其他的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包支持。首先我们修改这个文件的交叉工具链部分:

+
+

如果你和我一样将Ubuntu安装在QEMU虚拟机中 ,需要在libvirt中使用Add_hardware添加usb设备。

+
+

修改交叉工具链

+

链接成功后进入项目目录,发现rtconfig.py没有Linux路径,需要我们手动修改交叉工具链部分:

#修改 rtconfig.py 
 
 # cross_tool provides the cross compiler
@@ -207,6 +216,7 @@
         # Windows 平台
         EXEC_PATH = r'C:\Users\XXYYZZ'
     else:
+        # 修改这里
         # Linux / macOS 平台
         EXEC_PATH = '/usr/bin'
 
@@ -226,11 +236,6 @@
     else:
         EXEC_PATH = '/usr/bin'
 
-

随后可以使用PKG初始化并安装两个必要的包:

-
pkgs --update
-pip install kconfiglib
-pip install scons
-

编译

在完成以上设置之后我们可以开始编译。STM32使用scons编译系统,同样是menuconfig命令:

scons --menuconfig
@@ -250,92 +255,91 @@
 

除了USB之外我们还可以使用串口连接:

sudo apt install picocom
 picocom -b 115200 /dev/ttyACM0
-version
 

可以使用ctrl + A 然后 ctrl + x退出。

使用Cmake

通过官方文档可以得知除了scons外还可以使用Cmake来编译.

-

首先找到编译器的路径,并export:

-
❯ 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
-export RTT_CC=gcc
+

首先找到编译器的路径,并export,我这里是Nixos的路径,如果你使用其他发行版注意修改:

+
 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
+export RTT_CC=gcc
 

随后使用指令scons --target=cmake

-
❯ scons --target=cmake
+
 scons --target=cmake
 
-scons: Reading SConscript files ...
-Newlib version:4.5.0
-Update setting files for CMakeLists.txt...
-Done!
-scons: done reading SConscript files.
-scons: Building targets ...
-scons: building associated VariantDir targets: build
-CC build/applications/main.o
-LINK rt-thread.elf
-arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
-arm-none-eabi-size rt-thread.elf
-scons: done building targets.
+scons: Reading SConscript files ...
+Newlib version:4.5.0
+Update setting files for CMakeLists.txt...
+Done!
+scons: done reading SConscript files.
+scons: Building targets ...
+scons: building associated VariantDir targets: build
+CC build/applications/main.o
+LINK rt-thread.elf
+arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
+arm-none-eabi-size rt-thread.elf
+scons: done building targets.
 

可以看到生成CmakeLists.txt成功,随后开始构建:

-
❯ cd ./build       
-❯ cmake ..  
-CMake Warning (dev) at CMakeLists.txt:43:
-  Syntax Warning in cmake code at column 100
+
 cd ./build       
+ cmake ..  
+CMake Warning (dev) at CMakeLists.txt:43:
+  Syntax Warning in cmake code at column 100
 
-  Argument not separated from preceding token by whitespace.
-This warning is for project developers.  Use -Wno-dev to suppress it.
+  Argument not separated from preceding token by whitespace.
+This warning is for project developers.  Use -Wno-dev to suppress it.
 
--- The C compiler identification is GNU 14.3.1
--- The CXX compiler identification is GNU 14.3.1
--- The ASM compiler identification is GNU
--- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
--- Detecting C compiler ABI info
--- Detecting C compiler ABI info - done
--- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
--- Detecting C compile features
--- Detecting C compile features - done
--- Detecting CXX compiler ABI info
--- Detecting CXX compiler ABI info - done
--- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
--- Detecting CXX compile features
--- Detecting CXX compile features - done
--- Configuring done (0.4s)
--- Generating done (0.0s)
--- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
+-- The C compiler identification is GNU 14.3.1
+-- The CXX compiler identification is GNU 14.3.1
+-- The ASM compiler identification is GNU
+-- Found assembler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc
+-- Detecting C compiler ABI info
+-- Detecting C compiler ABI info - done
+-- Check for working C compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-gcc - skipped
+-- Detecting C compile features
+-- Detecting C compile features - done
+-- Detecting CXX compiler ABI info
+-- Detecting CXX compiler ABI info - done
+-- Check for working CXX compiler: /nix/store/v9p5md3d4aaqwc9i9hlaxkl7nawd9vrc-gcc-arm-embedded-14.3.rel1/bin/arm-none-eabi-g++ - skipped
+-- Detecting CXX compile features
+-- Detecting CXX compile features - done
+-- Configuring done (0.4s)
+-- Generating done (0.0s)
+-- Build files have been written to: /home/dich/Git/sdk-bsp-stm32f407-spark/projects/02_basic_ir/build
 

使用make命令编译:

-
❯ make   
+
 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
 [  3%] Building C object CMakeFiles/rtthread.elf.dir/home/dich/Git/sdk-bsp-stm32f407-spark/rt-thread/components/libc/compilers/common/cstdio.c.obj
-......
+......
 [ 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
 [ 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
-[100%] Linking C executable rtthread.elf
-   text    data     bss     dec     hex filename
-  98516    1468    8400  108384   1a760 rtthread.elf
-[100%] Built target rtthread.elf
+[100%] Linking C executable rtthread.elf
+   text    data     bss     dec     hex filename
+  98516    1468    8400  108384   1a760 rtthread.elf
+[100%] Built target rtthread.elf
 

使用Renode

如果没有真实的开发版,可以使用Renode来进行仿真模拟:

-
# 启动renode
-renode
+
# 启动renode
+renode
 
-# 创建机器
-(monitor) mach create
+# 创建机器
+(monitor) mach create
 
-# 加载STM32F407平台
-(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
+# 加载STM32F407平台
+(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
 
-# 加载你的固件
-(monitor) sysbus LoadELF @/你的路径/rtthread.elf
+# 加载你的固件
+(monitor) sysbus LoadELF @/你的路径/rtthread.elf
 
-# 打开串口窗口(finsh会显示在这里)
-(monitor) showAnalyzer sysbus.usart1
+# 打开串口窗口(finsh会显示在这里)
+(monitor) showAnalyzer sysbus.usart1
 
-# 启动仿真
-(monitor) start
+# 启动仿真
+(monitor) start
 

Renode 常用命令大全

diff --git a/public/pagefind/fragment/en_19effcf.pf_fragment b/public/pagefind/fragment/en_19effcf.pf_fragment new file mode 100644 index 0000000..44bd33f Binary files /dev/null and b/public/pagefind/fragment/en_19effcf.pf_fragment differ diff --git a/public/pagefind/fragment/en_b99cdbd.pf_fragment b/public/pagefind/fragment/en_b99cdbd.pf_fragment deleted file mode 100644 index 372e7cc..0000000 Binary files a/public/pagefind/fragment/en_b99cdbd.pf_fragment and /dev/null differ diff --git a/public/pagefind/index/en_2f3681c.pf_index b/public/pagefind/index/en_2f3681c.pf_index deleted file mode 100644 index f0c50db..0000000 Binary files a/public/pagefind/index/en_2f3681c.pf_index and /dev/null differ diff --git a/public/pagefind/index/en_38bac08.pf_index b/public/pagefind/index/en_38bac08.pf_index new file mode 100644 index 0000000..57a72b0 Binary files /dev/null and b/public/pagefind/index/en_38bac08.pf_index differ diff --git a/public/pagefind/index/en_49b7d39.pf_index b/public/pagefind/index/en_49b7d39.pf_index new file mode 100644 index 0000000..977d26c Binary files /dev/null and b/public/pagefind/index/en_49b7d39.pf_index differ diff --git a/public/pagefind/index/en_54e8cab.pf_index b/public/pagefind/index/en_54e8cab.pf_index new file mode 100644 index 0000000..d9ed600 Binary files /dev/null and b/public/pagefind/index/en_54e8cab.pf_index differ diff --git a/public/pagefind/index/en_6ab6e6e.pf_index b/public/pagefind/index/en_6ab6e6e.pf_index deleted file mode 100644 index a602f9d..0000000 Binary files a/public/pagefind/index/en_6ab6e6e.pf_index and /dev/null differ diff --git a/public/pagefind/index/en_8d484dd.pf_index b/public/pagefind/index/en_8d484dd.pf_index new file mode 100644 index 0000000..8a1b5dd Binary files /dev/null and b/public/pagefind/index/en_8d484dd.pf_index differ diff --git a/public/pagefind/index/en_9a9ddf5.pf_index b/public/pagefind/index/en_9a9ddf5.pf_index new file mode 100644 index 0000000..324081f Binary files /dev/null and b/public/pagefind/index/en_9a9ddf5.pf_index differ diff --git a/public/pagefind/index/en_9c9f9d9.pf_index b/public/pagefind/index/en_9c9f9d9.pf_index deleted file mode 100644 index b92d304..0000000 Binary files a/public/pagefind/index/en_9c9f9d9.pf_index and /dev/null differ diff --git a/public/pagefind/index/en_b8e3dd1.pf_index b/public/pagefind/index/en_b8e3dd1.pf_index deleted file mode 100644 index c12785b..0000000 Binary files a/public/pagefind/index/en_b8e3dd1.pf_index and /dev/null differ diff --git a/public/pagefind/index/en_cd22948.pf_index b/public/pagefind/index/en_cd22948.pf_index deleted file mode 100644 index f07b27f..0000000 Binary files a/public/pagefind/index/en_cd22948.pf_index and /dev/null differ diff --git a/public/pagefind/pagefind-entry.json b/public/pagefind/pagefind-entry.json index 41bc995..d1dec23 100644 --- a/public/pagefind/pagefind-entry.json +++ b/public/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"1.3.0","languages":{"en":{"hash":"en_15f5696b4f","wasm":"en","page_count":78}}} \ No newline at end of file +{"version":"1.3.0","languages":{"en":{"hash":"en_dd877f82ec","wasm":"en","page_count":78}}} \ No newline at end of file diff --git a/public/pagefind/pagefind.en_15f5696b4f.pf_meta b/public/pagefind/pagefind.en_15f5696b4f.pf_meta deleted file mode 100644 index df0ee69..0000000 Binary files a/public/pagefind/pagefind.en_15f5696b4f.pf_meta and /dev/null differ diff --git a/public/pagefind/pagefind.en_dd877f82ec.pf_meta b/public/pagefind/pagefind.en_dd877f82ec.pf_meta new file mode 100644 index 0000000..e04a6ba Binary files /dev/null and b/public/pagefind/pagefind.en_dd877f82ec.pf_meta differ