mirror of
https://github.com/Dichgrem/Blog.git
synced 2025-12-16 21:42:00 -05:00
update:stm32
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user