Files
My-Blog/public/linux-2-stm32/index.html
2025-11-17 16:30:44 +08:00

448 lines
28 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;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-2-stm32/">
<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-2-stm32/">
<link rel="alternate" type="application/atom+xml" title="Dich&#x27;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&#x27;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-2-stm32/">Linux-STM32开发环境部署</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2025-07-20
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/linux/">#Linux</a></span>
<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>
<ul>
<li><strong>Ubuntu</strong></li>
</ul>
<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>
<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;">&quot;STM32 &amp;&amp; RT-Thread development environment&quot;</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;">&quot;github:NixOS/nixpkgs/nixpkgs-unstable&quot;</span><span>;
</span><span> </span><span style="color:#ffb964;">outputs </span><span>= { </span><span style="color:#ffb964;">self</span><span>, </span><span style="color:#ffb964;">nixpkgs </span><span>}:
</span><span> let
</span><span> </span><span style="color:#ffb964;">supportedSystems </span><span>= [ </span><span style="color:#99ad6a;">&quot;x86_64-linux&quot; &quot;aarch64-linux&quot; </span><span>];
</span><span> </span><span style="color:#ffb964;">forEachSupportedSystem </span><span>= </span><span style="color:#ffb964;">f</span><span>: </span><span style="color:#ffb964;">nixpkgs</span><span>.</span><span style="color:#ffb964;">lib</span><span>.</span><span style="color:#ffb964;">genAttrs supportedSystems </span><span>(</span><span style="color:#ffb964;">system</span><span>: </span><span style="color:#ffb964;">f </span><span>{
</span><span> </span><span style="color:#ffb964;">pkgs </span><span>= import </span><span style="color:#ffb964;">nixpkgs </span><span>{ inherit </span><span style="color:#ffb964;">self system</span><span>; };
</span><span> });
</span><span> in
</span><span> {
</span><span> </span><span style="color:#ffb964;">devShells </span><span>= </span><span style="color:#ffb964;">forEachSupportedSystem </span><span>({ </span><span style="color:#ffb964;">pkgs </span><span>}: {
</span><span> </span><span style="color:#ffb964;">default </span><span>= </span><span style="color:#ffb964;">pkgs</span><span>.</span><span style="color:#ffb964;">mkShell </span><span>{
</span><span> </span><span style="color:#ffb964;">packages </span><span>= with </span><span style="color:#ffb964;">pkgs</span><span>; [
</span><span> </span><span style="color:#ffb964;">python312
</span><span> </span><span style="color:#ffb964;">scons
</span><span> </span><span style="color:#ffb964;">openocd
</span><span> </span><span style="color:#ffb964;">stlink
</span><span> </span><span style="color:#ffb964;">stlink-tool
</span><span> </span><span style="color:#ffb964;">gcc-arm-embedded
</span><span> </span><span style="color:#ffb964;">picocom
</span><span> </span><span style="color:#ffb964;">renode-bin
</span><span> ];
</span><span> };
</span><span> });
</span><span> };
</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
</span></code></pre>
<h2 id="lian-jie">连接</h2>
<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>
<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
</span><span> serial: 0671FF373654393143244522
</span><span> flash: 1048576 (pagesize: 16384)
</span><span> sram: 196608
</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>
<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
</span><span style="color:#888888;"># EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
</span><span style="color:#8fbfdc;">import </span><span>os
</span><span>
</span><span style="color:#8fbfdc;">if </span><span style="color:#ffb964;">CROSS_TOOL </span><span>== </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">gcc</span><span style="color:#556633;">&#39;</span><span>:
</span><span> </span><span style="color:#ffb964;">PLATFORM </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">gcc</span><span style="color:#556633;">&#39;
</span><span> </span><span style="color:#8fbfdc;">if </span><span>os.name == </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">nt</span><span style="color:#556633;">&#39;</span><span>:
</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;">&#39;</span><span style="color:#99ad6a;">C:\Users\XXYYZZ</span><span style="color:#556633;">&#39;
</span><span> </span><span style="color:#8fbfdc;">else</span><span>:
</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;">&#39;</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">&#39;
</span><span>
</span><span style="color:#8fbfdc;">elif </span><span style="color:#ffb964;">CROSS_TOOL </span><span>== </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">keil</span><span style="color:#556633;">&#39;</span><span>:
</span><span> </span><span style="color:#ffb964;">PLATFORM </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">armclang</span><span style="color:#556633;">&#39; </span><span style="color:#888888;"># KEIL AC6
</span><span> </span><span style="color:#888888;"># PLATFORM = &#39;armcc&#39; # KEIL AC5
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#8fbfdc;">r</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">C:/Keil_v5</span><span style="color:#556633;">&#39;
</span><span>
</span><span style="color:#8fbfdc;">elif </span><span style="color:#ffb964;">CROSS_TOOL </span><span>== </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">iar</span><span style="color:#556633;">&#39;</span><span>:
</span><span> </span><span style="color:#ffb964;">PLATFORM </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">iccarm</span><span style="color:#556633;">&#39;
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#8fbfdc;">r</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3</span><span style="color:#556633;">&#39;
</span><span>
</span><span style="color:#8fbfdc;">elif </span><span style="color:#ffb964;">CROSS_TOOL </span><span>== </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">llvm-arm</span><span style="color:#556633;">&#39;</span><span>:
</span><span> </span><span style="color:#ffb964;">PLATFORM </span><span>= </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">llvm-arm</span><span style="color:#556633;">&#39;
</span><span> </span><span style="color:#8fbfdc;">if </span><span>os.name == </span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">nt</span><span style="color:#556633;">&#39;</span><span>:
</span><span> </span><span style="color:#ffb964;">EXEC_PATH </span><span>= </span><span style="color:#8fbfdc;">r</span><span style="color:#556633;">&#39;</span><span style="color:#99ad6a;">D:\Progrem\LLVMEmbeddedToolchainForArm-17.0.1-Windows-x86_64</span><span style="color:#8fbfdc;">\b</span><span style="color:#99ad6a;">in</span><span style="color:#556633;">&#39;
</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;">&#39;</span><span style="color:#99ad6a;">/usr/bin</span><span style="color:#556633;">&#39;
</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
</span></code></pre>
<p>修改配置并保存退出后即可开始编译,$(nproc)代表使用全部CPU线程来编译</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>scons -j$(nproc)
</span></code></pre>
<h2 id="shao-ru">烧入</h2>
<p>编译成功后你应该会看到有一个rtthread.bin在目录下这就是我们编译出来的系统</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-flash read firmware_backup.bin 0x08000000 0x100001
</span></code></pre>
<p>随后使用如下命令烧入系统:</p>
<pre data-lang="shell" style="background-color:#151515;color:#e8e8d3;" class="language-shell "><code class="language-shell" data-lang="shell"><span>st-flash write rtthread.bin 0x08000000
</span></code></pre>
<h2 id="chuan-kou">串口</h2>
<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
</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
</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></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
</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>-- 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></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
</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>[ 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></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
</span><span>
</span><span># 创建机器
</span><span>(monitor) mach create
</span><span>
</span><span># 加载STM32F407平台
</span><span>(monitor) machine LoadPlatformDescription @platforms/boards/stm32f4_discovery.repl
</span><span>
</span><span># 加载你的固件
</span><span>(monitor) sysbus LoadELF @/你的路径/rtthread.elf
</span><span>
</span><span># 打开串口窗口finsh会显示在这里
</span><span>(monitor) showAnalyzer sysbus.usart1
</span><span>
</span><span># 启动仿真
</span><span>(monitor) start
</span></code></pre>
<blockquote>
<p>Renode 常用命令大全</p>
</blockquote>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 机器管理
</span><span style="color:#ffb964;">mach</span><span> add </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">名称</span><span style="color:#556633;">&quot; </span><span style="color:#888888;"># 创建新机器(指定名称)
</span><span style="color:#ffb964;">mach</span><span> create </span><span style="color:#888888;"># 创建新机器(自动命名)
</span><span style="color:#ffb964;">mach</span><span> set </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">名称</span><span style="color:#556633;">&quot; </span><span style="color:#888888;"># 切换到指定机器
</span><span style="color:#ffb964;">mach</span><span> set 0 </span><span style="color:#888888;"># 切换到编号0的机器
</span><span style="color:#ffb964;">mach</span><span> rem </span><span style="color:#556633;">&quot;</span><span style="color:#99ad6a;">名称</span><span style="color:#556633;">&quot; </span><span style="color:#888888;"># 删除机器
</span><span style="color:#ffb964;">mach</span><span> clear </span><span style="color:#888888;"># 清除当前选择
</span><span style="color:#ffb964;">mach </span><span style="color:#888888;"># 显示帮助信息
</span><span style="color:#ffb964;">emulation </span><span style="color:#888888;"># 查看仿真信息
</span><span>
</span><span style="color:#888888;"># 仿真控制
</span><span style="color:#ffb964;">start </span><span style="color:#888888;"># 启动仿真
</span><span style="color:#ffb964;">pause </span><span style="color:#888888;"># 暂停仿真
</span><span style="color:#ffb964;">quit </span><span style="color:#888888;"># 退出Renode
</span><span>
</span><span style="color:#888888;"># 帮助
</span><span>help </span><span style="color:#888888;"># 显示帮助
</span><span>help 命令名 </span><span style="color:#888888;"># 查看特定命令帮助
</span><span>
</span><span style="color:#888888;"># 加载固件
</span><span style="color:#ffb964;">sysbus</span><span> LoadELF @/path/to/firmware.elf </span><span style="color:#888888;"># 加载ELF文件
</span><span style="color:#ffb964;">sysbus</span><span> LoadBinary @/path/to/firmware.bin 0x8000000 </span><span style="color:#888888;"># 加载BIN到指定地址
</span><span>
</span><span style="color:#888888;"># 重置
</span><span style="color:#ffb964;">sysbus</span><span> Reset </span><span style="color:#888888;"># 重置系统总线
</span><span style="color:#ffb964;">machine</span><span> Reset </span><span style="color:#888888;"># 重置整个机器
</span><span>
</span><span style="color:#888888;"># 读取内存
</span><span style="color:#ffb964;">sysbus</span><span> ReadByte 0x20000000 </span><span style="color:#888888;"># 读1字节
</span><span style="color:#ffb964;">sysbus</span><span> ReadWord 0x20000000 </span><span style="color:#888888;"># 读2字节
</span><span style="color:#ffb964;">sysbus</span><span> ReadDoubleWord 0x20000000 </span><span style="color:#888888;"># 读4字节
</span><span>
</span><span style="color:#888888;"># 写入内存
</span><span style="color:#ffb964;">sysbus</span><span> WriteByte 0x20000000 0xFF
</span><span style="color:#ffb964;">sysbus</span><span> WriteWord 0x20000000 0x1234
</span><span style="color:#ffb964;">sysbus</span><span> WriteDoubleWord 0x20000000 0x12345678
</span><span>
</span><span style="color:#888888;"># 查看内存区域
</span><span style="color:#ffb964;">sysbus</span><span> FindSymbolAt 0x08000000 </span><span style="color:#888888;"># 查找地址对应的符号
</span><span>
</span><span style="color:#888888;"># 查看GPIO端口
</span><span style="color:#ffb964;">sysbus.gpioPortA
</span><span>
</span><span style="color:#888888;"># 设置GPIO状态
</span><span style="color:#ffb964;">sysbus.gpioPortA.0</span><span> Set true </span><span style="color:#888888;"># 设置PA0为高
</span><span style="color:#ffb964;">sysbus.gpioPortA.0</span><span> Set false </span><span style="color:#888888;"># 设置PA0为低
</span><span style="color:#ffb964;">sysbus.gpioPortA.0</span><span> Toggle </span><span style="color:#888888;"># 切换PA0状态
</span><span>
</span><span style="color:#888888;"># 读取GPIO状态
</span><span style="color:#ffb964;">sysbus.gpioPortA.0</span><span> State
</span><span>
</span><span style="color:#888888;"># 使用GDB调试
</span><span>(</span><span style="color:#ffb964;">monitor</span><span>) machine StartGdbServer 3333
</span><span style="color:#888888;"># 另一个终端
</span><span style="color:#ffb964;">arm-none-eabi-gdb</span><span> firmware.elf
</span><span>(</span><span style="color:#ffb964;">gdb</span><span>) target remote :3333
</span><span>(</span><span style="color:#ffb964;">gdb</span><span>) load
</span><span>(</span><span style="color:#ffb964;">gdb</span><span>) b main
</span><span>(</span><span style="color:#ffb964;">gdb</span><span>) c
</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/about-sports/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">乱七八糟:运动健身基本理论</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>