news 2026/5/20 2:14:05

Ubuntu 16.04 32位系统下RT-Thread开发环境搭建全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 16.04 32位系统下RT-Thread开发环境搭建全攻略

1. 项目概述:为何要重温一个“过时”的旧系统环境?

如果你在2024年看到这个标题,第一反应可能是:“Ubuntu 16.04?还是32位?这都什么年代的配置了,现在不都用Ubuntu 22.04或者24.04了吗?” 没错,从主流桌面开发的角度看,这个环境确实显得有些“复古”。但作为一名嵌入式领域的从业者,我深知这类需求的真实性与必要性。这个项目标题背后,往往对应着一些特定的、甚至有些“棘手”的实际场景。

你可能正在维护一个历史悠久的工业控制项目,其配套的编译工具链和库文件只兼容老旧的32位系统;或者,你手头有一台性能有限但依然坚挺的旧电脑或工控机,你想用它来学习或开发RT-Thread;又或者,你接手的项目文档明确要求必须在这个特定环境下进行构建,以确保与生产线测试环境百分百一致。无论是哪种情况,在Linux系统下,为Ubuntu 16.04 LTS 32位英文版搭建RT-Thread开发环境,都是一个需要精确操作、避开无数依赖陷阱的技术任务。它考验的不是追逐最新技术的能力,而是解决实际兼容性问题的功底。

本文将带你完整走一遍这个搭建过程。我不会只给你一串命令,而是会解释每个步骤背后的原因,分享我在这个特定环境里踩过的坑和总结的技巧。我们的目标是在这个“限定”的舞台上,搭建一个稳定、高效、可用的RT-Thread开发环境,让你能顺畅地进行代码编辑、编译、下载和调试。

2. 环境准备与系统基础配置

在开始安装任何开发工具之前,我们必须先让Ubuntu 16.04 32位系统本身处在一个健康且高效的状态。这一步常常被新手忽略,却直接决定了后续所有步骤的顺利程度。

2.1 系统更新与基础工具安装

刚安装好的Ubuntu 16.04,其软件源列表可能已经失效,因为该版本早已过了标准支持期。我们的第一步是更新源,并安装一些不可或缺的基础工具。

首先,备份原有的源列表文件,然后替换为仍可用的旧源镜像。这里我推荐使用阿里云的旧镜像仓库,相对稳定。

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list

更新软件包列表并升级现有软件。这个过程可能会比较慢,因为需要从镜像站拉取老版本的元数据。

sudo apt update sudo apt upgrade -y

接下来,安装一系列基础开发工具和依赖库。这些是编译任何C/C++项目,包括RT-Thread及其工具链的基石。

sudo apt install -y build-essential # 包含gcc, g++, make等 sudo apt install -y git wget curl # 版本管理和文件下载工具 sudo apt install -y python python3 # RT-Thread的scons构建工具依赖Python sudo apt install -y device-tree-compiler # 设备树编译工具,某些BSP需要 sudo apt install -y libncurses5-dev # menuconfig配置界面依赖 sudo apt install -y libssl-dev # 一些网络相关功能可能需要 sudo apt install -y u-boot-tools # 处理uImage等镜像 sudo apt install -y net-tools # 网络调试工具

注意:在32位系统上,某些软件包的最新版本可能已不提供32位构建。apt命令可能会提示某些包无法安装或已被更新的包替代。只要核心的build-essentialpython能成功安装,通常就不影响RT-Thread环境搭建。如果遇到无法满足的依赖,可以尝试使用aptitude进行更智能的依赖解决,或者寻找功能等效的旧版本包。

2.2 配置本地环境与用户权限

为了避免在后续操作中频繁使用sudo,尤其是涉及串口设备操作时,我们需要将当前用户添加到相关的用户组。

将用户添加到dialout组,以获得串口读写权限(用于后续的串口调试和下载):

sudo usermod -a -G dialout $USER

将用户添加到plugdev组,这对于一些通过USB连接的调试器(如J-Link、ST-Link)的权限管理有帮助:

sudo usermod -a -G plugdev $USER

这些组权限更改需要重新登录系统后才能生效。你可以注销当前桌面会话再登录,或者如果是在SSH连接中,可以断开重连。

最后,检查一下系统的基本信息,确认环境无误:

uname -a # 应显示32位(i686或i386)内核 lsb_release -a # 应显示Ubuntu 16.04 LTS gcc --version # 查看GCC版本,16.04默认大概是5.x版本 python --version # 查看Python2版本,RT-Thread的scons构建系统主要依赖Python2.7

3. 获取与配置RT-Thread源码

RT-Thread是一个高度模块化的实时操作系统,其源码管理清晰。我们直接从官方仓库获取代码。

3.1 克隆RT-Thread源码仓库

选择一个合适的目录,例如在用户家目录下创建workspace文件夹,然后克隆代码。这里我们克隆主仓库,它包含了内核、组件、BSP(板级支持包)等所有内容。

cd ~ mkdir -p workspace/rt-thread cd workspace/rt-thread git clone https://github.com/RT-Thread/rt-thread.git cd rt-thread

克隆完成后,你可以查看一下目录结构。bsp目录下包含了所有官方支持的开发板BSP,这是我们后续工作的起点。tools目录下有一些脚本工具。

实操心得:对于国内用户,如果git clone速度过慢,可以考虑使用Gitee的镜像仓库:https://gitee.com/rtthread/rt-thread.git。两者的代码是同步的。但请注意,在提交Issue或Pull Request时,仍应关联官方GitHub仓库。

3.2 认识RT-Thread的构建系统:scons

RT-Thread默认使用scons作为构建工具。scons是一个用Python编写的软件构建工具,类似于make,但构建脚本是用Python语法写的,更灵活。在RT-Thread中,每个BSP目录下都有一个SConscript文件,定义了如何编译该BSP。

我们需要先安装scons。由于系统自带Python 2.7,我们使用pip来安装。首先确保pip已安装:

sudo apt install -y python-pip # 安装Python2的pip

然后安装scons

pip install scons

安装完成后,可以测试一下:

scons --version

正常情况下会显示SCons的版本号,例如SCons by Steven Knight et al.: version 2.3.5 ...

注意事项:在Ubuntu 16.04的默认源中,通过apt直接安装的scons版本可能较老,且可能与RT-Thread的构建脚本不完全兼容。因此,强烈建议使用pip install scons来安装较新的版本。如果遇到与Python3的兼容性问题,请确保你调用的是python2对应的scons

4. 交叉编译工具链的安装与配置

这是整个环境搭建中最关键、也最容易出问题的一环。RT-Thread可以运行在多种架构的CPU上(如ARM Cortex-M, RISC-V, MIPS等),我们需要对应的交叉编译工具链,才能在x86的Ubuntu电脑上编译生成目标芯片可执行的代码。

4.1 工具链选型:为何选择gcc-arm-none-eabi

对于最流行的ARM Cortex-M系列内核,GNU工具链(gcc-arm-none-eabi)是免费且功能强大的首选。none表示没有操作系统,eabi是嵌入式应用二进制接口。我们将手动下载并安装它。

为什么不使用系统包管理器apt安装?因为Ubuntu 16.04官方源中的gcc-arm-none-eabi版本可能非常旧(可能是4.x),而较新的RT-Thread BSP和组件可能需要更高版本的编译器支持(例如对C11标准的完整支持、更好的优化)。手动安装允许我们选择更合适的版本。

4.2 下载与安装ARM GCC工具链

我们前往ARM官方开发者网站或国内镜像站下载。这里我们选择版本10.3-2021.10,这是一个比较稳定且较新的版本,对Cortex-M系列支持良好。

~/workspace目录下操作:

cd ~/workspace # 下载64位主机用的工具链(注意:即使Ubuntu是32位,但工具链是运行在主机上,编译目标代码,通常下载64位版本效率更高) # 但如果你的32位Ubuntu是运行在纯32位硬件上,可能需要寻找旧的32位主机工具链,这非常困难。 # 幸运的是,ARM官方从某个版本后不再提供32位Linux主机工具链。因此,我们假设你的32位Ubuntu是运行在64位CPU上(绝大多数情况),并使用64位工具链。 # 工具链是预编译的二进制文件,只要主机有对应的64位库支持即可运行。32位系统需要安装64位运行库支持。 # 首先,安装运行64位程序所需的库 sudo apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 lib32z1 # 然后下载64位工具链 wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

如果下载速度慢,可以使用国内镜像:

wget https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/_toolchains/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

下载完成后,解压并安装到/opt目录,这是一个存放第三方软件的标准位置:

sudo tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt

解压后,工具链位于/opt/gcc-arm-none-eabi-10.3-2021.10目录。为了方便使用,我们将其二进制文件路径添加到系统的PATH环境变量中。

编辑当前用户的~/.bashrc文件:

nano ~/.bashrc

在文件末尾添加以下行:

# ARM GCC Toolchain PATH export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin

保存并退出编辑器(在nano中按Ctrl+X,然后按Y确认,再按Enter保存)。

让配置立即生效:

source ~/.bashrc

现在,验证工具链是否安装成功:

arm-none-eabi-gcc --version

你应该能看到类似arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 10.3-2021.10) 10.3.1 20210824 (release)的输出。这证明64位的工具链在32位系统上成功运行了。

踩坑记录:这是32位系统上最大的一个坑。直接运行64位工具链会报错“找不到文件”或“无法执行二进制文件”。必须首先安装libc6:i386等多架构运行库。如果安装后仍不行,可能需要检查系统是否启用了多架构支持:dpkg --print-foreign-architectures,如果没有i386,则需要运行sudo dpkg --add-architecture i386 && sudo apt update。我们的第一步sudo apt install -y libc6:i386 ...已经隐含了这个操作。

5. 编译第一个BSP:以STM32为例

工具链就绪后,我们就可以尝试编译一个具体的板级支持包了。这里以最常用的stm32BSP中的stm32f407-atk-explorer(正点原子探索者开发板)为例。

5.1 进入BSP目录并进行菜单配置

cd ~/workspace/rt-thread/rt-thread/bsp/stm32/stm32f407-atk-explorer

首先,执行菜单配置命令。这会启动一个基于ncurses的图形化配置界面,你可以在这里选择需要启用的RT-Thread组件、配置内核参数、使能外设驱动等。

scons --menuconfig

如果这是第一次运行,它会自动调用pkgs --update来更新软件包列表,可能会从GitHub拉取索引,需要一点时间。进入界面后,你可以浏览各个菜单项。对于初次测试,我们可以先保持默认配置,直接保存退出。

在配置界面中,使用方向键移动,Enter键进入子菜单或选择选项,Y键启用,N键禁用,Space键切换选择状态(对于多选项目)。Esc键返回上级菜单。配置完成后,选择< Save >并回车,使用默认的.config文件名保存,然后选择< Exit >退出。

5.2 使用scons编译工程

保存配置后,直接使用scons命令进行编译:

scons

scons会读取当前目录下的SConscript构建脚本,以及我们刚才生成的.config文件,开始编译整个工程。你会看到大量的编译命令滚动输出。

编译成功的标志是最后生成一个名为rtthread.elfrtthread.binrtthread.hex的文件。.bin.hex是纯二进制和十六进制格式的固件,可以直接烧录到芯片的Flash中。.elf文件包含调试信息,用于调试。

编译问题排查

  1. 错误:arm-none-eabi-gcc: not found:说明环境变量PATH没有设置正确。请检查~/.bashrc中的路径是否正确,并执行source ~/.bashrc。也可以使用绝对路径测试:/opt/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc --version
  2. 错误:scons: command not found:说明scons没有安装成功。请用pip list | grep scons检查,并重新安装。
  3. 编译过程中提示缺少头文件或库:这通常是BSP特定的依赖。请回到BSP目录,仔细阅读README.md文件,里面通常会列出额外的软件包需求。例如,某些STM32 BSP可能需要安装libnewlib-arm-none-eabi,但通常RT-Thread使用了自己的newlib实现,包含在源码中。
  4. 内存不足导致编译中断:32位系统每个进程的可用内存地址空间有限(约3GB),如果开启多线程编译(scons -j4),可能因内存耗尽而崩溃。建议首次编译时使用单线程(默认scons即为单线程),或使用scons -j2

5.3 清理与重新编译

如果需要清理编译产物,可以运行:

scons -c

这会删除build目录(存放中间文件)和生成的固件文件。

如果修改了配置(menuconfig),或者更新了源码,重新编译只需再次执行scons即可。scons具有智能的增量编译能力,只会重新编译改动过的部分。

6. 开发辅助工具安装与配置

一个完整的开发环境除了编译,还需要代码编辑、串口调试和程序烧录等工具。

6.1 代码编辑与阅读工具

在Linux下,VSCode是一个强大的选择,但Ubuntu 16.04官方源中的版本极旧。我们可以通过微软的官方仓库来安装较新版本。

首先,导入微软GPG密钥并添加仓库:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

注意,这里添加的是amd64架构的仓库。对于32位系统,需要安装64位架构支持(之前已安装libc6:i386等),并且VSCode本身是64位应用。更新并安装:

sudo apt update sudo apt install -y code

安装完成后,可以在应用菜单找到Visual Studio Code。打开后,建议安装以下扩展以提升RT-Thread开发体验:

  • C/C++(Microsoft):提供代码智能感知、跳转、调试支持。
  • RT-Thread Studio(RT-Thread):提供RT-Thread项目创建、配置、包管理等功能(部分功能可能需要较新版本的RT-Thread BSP支持)。
  • Cortex-Debug:用于ARM Cortex-M芯片的调试支持。
  • Serial Monitor:用于查看串口日志。

如果VSCode无法启动(提示GLIBC版本过低等),说明系统库太老,无法支持新版的VSCode。这时可以考虑使用其他轻量级编辑器,如Vim(配合ctagscscope)或VSCodium(社区构建的开源版本,可能对旧系统兼容性更好),或者直接使用sublime text

6.2 串口调试工具:minicom

在嵌入式开发中,串口是查看系统日志、进行交互式调试的最重要通道。minicom是一个经典、稳定的终端程序。

安装minicom

sudo apt install -y minicom

配置minicom。建议以root权限进行初始配置,以便保存配置到系统默认位置:

sudo minicom -s

这会进入一个配置菜单:

  1. 选择“Serial port setup”
  2. A键设置串口设备,通常USB转串口设备在Linux下为/dev/ttyUSB0/dev/ttyACM0。请根据实际情况填写,如/dev/ttyUSB0
  3. E键设置波特率等参数,通常按E进入后,再按I选择波特率为115200 8N1(这是RT-Thread最常见的配置)。数据位、停止位、奇偶校验通常保持默认(8N1)即可。
  4. F键将硬件流控制(Hardware Flow Control)设置为No
  5. 设置完成后,按回车返回主菜单。
  6. 选择“Save setup as dfl”将当前配置保存为默认配置。
  7. 然后选择“Exit”

以后要使用串口,只需在终端输入minicom即可。退出minicom的快捷键是Ctrl+A,然后按X,选择Yes

实操技巧:为了避免每次插拔USB串口线后设备号变化(比如从ttyUSB0变成ttyUSB1),可以使用udev规则创建固定的符号链接。创建一个文件/etc/udev/rules.d/99-usb-serial.rules,加入如下内容(以常见的Silicon Labs CP210x芯片为例):

SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="rtthread_uart"

重启后,无论设备插在哪个USB口,都可以通过/dev/rtthread_uart来访问。使用lsusb命令可以查看你设备的idVendoridProduct

6.3 程序烧录工具:OpenOCD与ST-Link

对于STM32系列,ST-Link是常用的调试编程器。我们需要安装openocd(开源片上调试器)来与ST-Link交互。

Ubuntu 16.04源中的openocd版本较老。我们可以从源码编译一个较新的版本,或者使用PPA。这里使用一个较新的PPA:

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa sudo apt update sudo apt install -y openocd

安装后,连接你的STM32开发板和ST-Link到电脑。首先检查设备是否被识别:

lsusb | grep -i stm

应该能看到类似STMicroelectronics ST-LINK/V2的设备。

创建一个简单的OpenOCD配置文件,例如stlink.cfg

# stlink.cfg source [find interface/stlink-v2.cfg] source [find target/stm32f4x.cfg] transport select hla_swd reset_config srst_only

然后,你可以通过OpenOCD连接到芯片:

openocd -f stlink.cfg

如果连接成功,OpenOCD会启动一个telnet服务器(默认端口4444)和一个GDB服务器(默认端口3333)。在另一个终端,你可以使用telnet连接进行一些简单操作,或者使用GDB进行调试。

更常见的烧录方式是使用openocd直接编程.bin.hex文件。编写一个烧录脚本flash.cfg

# flash.cfg source [find interface/stlink-v2.cfg] source [find target/stm32f4x.cfg] transport select hla_swd reset_config srst_only init reset halt flash write_image erase /path/to/your/rtthread.bin 0x08000000 reset run shutdown

然后执行:

openocd -f flash.cfg

这将擦除芯片Flash,并将rtthread.bin文件烧录到起始地址0x08000000,然后复位并运行。

注意事项:OpenOCD的配置文件路径([find interface/stlink-v2.cfg])依赖于OpenOCD的安装位置。如果上述命令找不到文件,可以使用绝对路径,或者使用find /usr -name "stlink-v2.cfg"来定位文件。不同版本的ST-Link(V1, V2, V2-1)和不同系列的STM32芯片(F1, F4, H7等)需要选择对应的interface和target配置文件。

7. 环境验证与第一个程序运行

现在,让我们将之前编译的固件烧录到开发板,并验证整个环境是否工作正常。

7.1 烧录固件

假设你已经按照6.3节配置好了OpenOCD和ST-Link,并且开发板已正确连接。

  1. 进入你的BSP目录,确认rtthread.bin文件存在。
  2. 修改flash.cfg脚本中的固件路径为实际路径。
  3. 在终端中运行OpenOCD烧录命令:
    openocd -f flash.cfg
  4. 观察输出,应该看到“write complete”、“verified”等成功信息,最后是“shutdown”。

7.2 连接串口查看输出

  1. 打开一个新的终端窗口。
  2. 运行minicom
  3. 给开发板上电或按复位键。

你应该在minicom窗口中看到RT-Thread的启动Logo和系统初始化信息,类似于:

\ | / - RT - Thread Operating System / | \ 4.1.1 build May 10 2024 2006 - 2024 Copyright by RT-Thread team msh >

看到msh >提示符,恭喜你!RT-Thread已经在你的开发板上成功运行了。msh是RT-Thread的微型Shell,你可以在这里输入命令与系统交互,例如help查看命令列表,list_thread查看当前运行的线程等。

7.3 运行示例程序

msh中,你可以尝试运行BSP中自带的示例。例如,很多BSP都开启了finsh组件和led示例。你可以输入:

msh > led_blink

如果开发板上有LED,并且驱动正确,你应该能看到LED开始闪烁。输入ps可以查看当前所有线程,你应该能看到led_blink线程正在运行。

8. 常见问题排查与优化技巧

即便按照步骤操作,你也可能会遇到一些问题。这里汇总了一些常见问题及其解决方法。

8.1 编译相关问题

问题1:scons编译时出现大量undefined reference错误,尤其是_sbrk,_write等。

  • 原因:这通常是链接时找不到底层系统调用(syscall)的实现。在RT-Thread中,这些函数在libc组件中实现。
  • 解决:确保在menuconfig中已经启用了libc组件。路径通常为:RT-Thread Components -> POSIX layer and C standard library -> Enable libc APIs from toolchain。选择后,可能需要选择具体的实现,如newlibminilibc。保存配置后,重新编译。

问题2:编译成功,但生成的固件大小异常大(超过芯片Flash容量)。

  • 原因:默认的scons编译可能没有开启优化,并且包含了调试信息。
  • 解决:可以在scons命令后添加优化选项。例如,使用scons -c清理后,再执行:
    scons CFLAGS='-Os' LFLAGS='-Os'
    -Os是优化代码大小。你也可以使用-O2优化速度。更彻底的方法是,在menuconfigRT-Thread Kernel -> Kernel Device Object中,关闭调试选项,如Enable components debuggingEnable thread debugging information

问题3:在32位系统上,编译大型BSP(如STM32H7系列)时,scons因内存不足而崩溃。

  • 原因:32位进程地址空间有限,并行编译(-j)会消耗大量内存。
  • 解决
    1. 使用单线程编译:scons
    2. 增加系统交换空间(Swap)。创建一个2GB的交换文件:
      sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
      要永久生效,需将/swapfile none swap sw 0 0添加到/etc/fstab
    3. 如果必须并行编译,尝试减少线程数,如scons -j2

8.2 烧录与调试问题

问题1:OpenOCD无法连接,报错“Error: open failed”或“Cannot find ST-Link device”。

  • 检查
    1. lsusb是否能识别到ST-Link设备。
    2. 当前用户是否在plugdev组(需要重新登录生效)。
    3. 尝试使用sudo运行OpenOCD,如果可行,则是权限问题,需要检查udev规则。
  • 解决:创建udev规则。创建文件/etc/udev/rules.d/49-stlinkv2.rules,内容如下:
    # ST-LINK/V2 SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666", GROUP="plugdev" # ST-LINK/V2-1 SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="374b", MODE="0666", GROUP="plugdev"
    重新插拔设备,或运行sudo udevadm control --reload-rules && sudo udevadm trigger

问题2:烧录成功,但串口无任何输出。

  • 检查
    1. 串口线连接是否正确(TX接RX,RX接TX,GND接GND)。
    2. minicom的波特率、数据位、停止位、奇偶校验是否与BSP中rtconfig.hboard.h中定义的BAUD_RATE一致(通常是115200)。
    3. 开发板的启动模式(Boot0, Boot1引脚)是否设置为从主Flash启动。
    4. 芯片是否真的在运行。尝试按复位键,观察minicom是否有瞬间乱码(有时是波特率不匹配的表现)。
  • 解决:最稳妥的方法是使用调试器(ST-Link + OpenOCD + GDB)单步调试,查看程序是否卡在启动文件的某个地方(如时钟初始化)。

8.3 环境优化与使用技巧

技巧1:使用env工具进行图形化包管理和系统配置。RT-Thread提供了一个强大的env工具,它集成了sconsmenuconfigpkgs(软件包管理器)等功能,并提供了更友好的命令行界面。在旧系统上,可以从RT-Thread官网下载对应版本的env工具包(通常是Windows版,但其中的pkgs等Python脚本在Linux下也可用),或者直接使用scons --menuconfigpkgs --update命令组合。env工具能极大简化软件包的添加、删除和更新。

技巧2:为VSCode配置智能感知。在RT-Thread BSP根目录下,执行scons --target=vsc命令,可以生成VSCode的c_cpp_properties.json配置文件,其中包含了所有头文件路径和宏定义,能显著提升VSCode中代码补全和跳转的准确性。

技巧3:利用qemu进行无硬件模拟。如果你手头没有具体的开发板,或者想在特定架构(如ARM Cortex-A, RISC-V)上学习RT-Thread,可以使用QEMU进行模拟。RT-Thread的bsp目录下包含qemu-vexpress-a9(ARM Cortex-A9)等模拟器BSP。安装qemu-system-arm后,直接在该BSP目录下scons编译,然后运行qemu.sh脚本,即可在QEMU窗口中运行RT-Thread,这对于学习和调试内核非常方便。

搭建这个“复古”环境的过程,更像是一次对嵌入式开发基础工具的梳理。每一步的依赖、每一个配置选项、每一个错误提示,都在加深你对构建系统、工具链和硬件平台之间关系的理解。当串口终端上终于跳出RT-Thread的Logo时,那种解决问题的成就感,是直接使用现成集成IDE无法比拟的。这个环境一旦搭建稳定,就会成为一个可靠的基石,让你能更专注于RT-Thread本身的学习和产品开发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 2:13:07

深度解析SubtitleEdit中Whisper模型下载的异常处理机制

深度解析SubtitleEdit中Whisper模型下载的异常处理机制 【免费下载链接】subtitleedit the subtitle editor :) 项目地址: https://gitcode.com/gh_mirrors/su/subtitleedit 在视频字幕编辑领域&#xff0c;SubtitleEdit凭借其强大的语音转文字功能和Whisper AI模型集成…

作者头像 李华
网站建设 2026/5/20 2:13:05

Minecraft 1.21必备:5分钟搞定Masa模组全家桶中文汉化终极指南

Minecraft 1.21必备&#xff1a;5分钟搞定Masa模组全家桶中文汉化终极指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Masa模组的英文界面而烦恼吗&#xff1f;Masa Mods中文…

作者头像 李华
网站建设 2026/5/20 2:11:07

ARM ETE协议地址压缩技术详解

1. ARM ETE协议中的地址压缩技术解析在处理器追踪和调试领域&#xff0c;地址压缩技术扮演着至关重要的角色。ETE(Embedded Trace Extension)作为ARM架构中的关键追踪协议&#xff0c;其地址压缩机制直接影响着追踪数据的带宽效率和存储需求。我们先从最基础的32位地址压缩开始…

作者头像 李华
网站建设 2026/5/20 2:05:16

容器网络CNI实战:从零搭建网络插件

容器网络CNI实战&#xff1a;从零搭建网络插件 一、CNI概述 CNI&#xff08;Container Network Interface&#xff09;是容器网络的标准化接口&#xff0c;定义了容器网络配置和管理的规范。 1.1 CNI架构 ┌─────────────────────┐ │ Container …

作者头像 李华
网站建设 2026/5/20 2:04:28

图神经网络中的多项式卷积核:从谱图理论到PyTorch Geometric实践

1. 项目概述&#xff1a;从信号处理到几何卷积的跨越最近在整理一些关于几何深度学习&#xff08;Geometric Deep Learning&#xff09;的笔记&#xff0c;发现很多朋友对“Poly”这个概念感到既熟悉又陌生。熟悉&#xff0c;是因为它在信号处理、多项式拟合等领域是基础中的基…

作者头像 李华