长沙臻钬建站活动方案,网站推广链接怎么做,360网站 备案,佛山网站建设制作公司调试 RT-Thread
下载源码
github 搜索 RT-Thread 下载源码
安装 python scons 环境
你已经安装了 kconfiglib#xff0c;但 scons --menuconfig 仍然提示找不到它。这种情况通常是由于 Python 环境不一致 导致的#xff1a;你在一个 Python 环境中安装了 kconfiglib#xff…调试 RT-Thread
下载源码
github 搜索 RT-Thread 下载源码
安装 python scons 环境
你已经安装了 kconfiglib但 scons --menuconfig 仍然提示找不到它。这种情况通常是由于 Python 环境不一致 导致的你在一个 Python 环境中安装了 kconfiglib但 scons 运行时使用的是另一个 Python 解释器。
解决思路如下✅ 确认当前环境 Python 路径
在你已经激活的 rtenv 环境中运行
which python然后也运行
which scons这两个命令的输出路径应该都指向你的虚拟环境路径~/Code/RTOS/rt-thread/rtenv/ 下。✅ 确认 scons 使用的 Python
有些系统上的 scons 是全局安装的用的是系统的 Python而不是你的虚拟环境中的。
你可以通过下面命令检查 scons 实际使用的是哪个 Python
scons --version然后运行
head -n 1 $(which scons)查看 scons 的 shebang 行确认它使用的 Python 是你的虚拟环境中的比如应为
#!/home/link/Code/RTOS/rt-thread/rtenv/bin/python如果不是那你运行的 scons 用的是系统 Python自然找不到虚拟环境里的 kconfiglib。✅ 解决方案
方法 1在虚拟环境中安装 scons
确保你在虚拟环境里运行
pip install scons然后再运行
rtenv/bin/scons --menuconfig或者
python -m scons --menuconfig这样能确保 scons 用的是正确的 Python 环境。✅ 总结问题的核心是你安装的 kconfiglib 在虚拟环境中但运行 scons 的 Python 不是那个虚拟环境。只要确保 scons 是用虚拟环境里的 Python 运行的问题就能解决。
编译工程
进入 qemu-vexpress-a9 BSP 根目录然后输入命令 code . (注意code 后面有一个点)打开 VS Code表示使用 VS Code 打开当前目录。
点击 VS Code “查看 - 终端” 打开 VS Code 内部终端在终端里输入命令 scons 即可编译工程终端会打印出编译信息。
修改 VS Code下的 lauch.json
{version: 0.2.0,configurations: [{name: Debug Ubuntu with gdb-multiarch,type: cppdbg,request: launch,program: ${workspaceFolder}/rtthread.elf,args: [],stopAtEntry: true,cwd: ${workspaceFolder},environment: [],externalConsole: false,miDebuggerServerAddress: localhost:1234,serverLaunchTimeout: 2000,targetArchitecture: arm,MIMode: gdb,miDebuggerPath: /usr/bin/gdb-multiarch,customLaunchSetupCommands: [],launchCompleteCommand: exec-run}]
}调试工程
先执行 qemu-vexpress-a9 目录下的 qemu-dbg.sh文件在 VS Code 里点击调试菜单小虫子图标调试平台选择 刚修改的lauch.json然后按 F5 就可以开启 QEMU 调试模式断点停留在 main 函数。
在 VS Code 里可以使用 GDB 命令需要在最前面加上 -exec。 例如 -exec info registers 命令可以查看寄存器的内容
其他一些主要命令介绍如下所示
查看内存地址内容x/n/f/u addr各个参数说明如下所示
n 是一个正整数表示需要显示的内存单元的个数也就是说从当前地址向后显示几个内存单元的内容一个内存单元的大小由后面的 u 定义
f 表示显示的格式参见下面。如果地址所指的是字符串那么格式可以是 s。
其他格式如下表所示参数描述x按十六进制格式显示变量d按十进制格式显示变量u按十六进制格式显示无符号整型o按八进制格式显示变量t按二进制格式显示变量a按十六进制格式显示变量c按字符格式显示变量f按浮点数格式显示变量u 表示从当前地址往后请求的字节数如果不指定的话GDB 默认是 4 个 bytes。u 参数可以用下面的字符来代替b 表示单字节h 表示双字节w 表示四字 节g 表示八字节。当我们指定了字节长度后GDB 会从指内存定的内存地址开始读写指定字节并把其当作一个值取出来。
addr 表示一个内存地址。注严格区分 n 和 u 的关系n 表示单元个数u 表示每个单元的大小。示例: x/3uh 0x54320 表示从内存地址 0x54320 读取内容h 表示以双字节为一个单位3 表示输出三个单位u 表示按十六进制显示。
查看当前程序栈的内容: x/10x $sp– 打印 stack 的前 10 个元素
查看当前程序栈的信息: info frame----list general info about the frame
查看当前程序栈的参数: info args—lists arguments to the function
查看当前程序栈的局部变量: info locals—list variables stored in the frame
查看当前寄存器的值info registers(不包括浮点寄存器) info all-registers(包括浮点寄存器)
查看当前栈帧中的异常处理器info catch(exception handlers)
提示输入命令时可以只输入每个命令的第一个字母。例如info registers 可以只输入 i r。注如果在 VS Code 目录中额外添加了文件夹会导致调试不能够启动。 每次开始调试都需要使用 Env 工具在 BSP 根目录使用code .命令打开 VS Code 才能正常调试工程。这是个非常常见的问题简洁总结你在 Bash 脚本中使用 source 激活环境变量如 Python 虚拟环境或 env.sh这些变量只对当前脚本生效不会影响你在终端中的父 shell 环境。举个例子
假设你这样写一个脚本 env_setup.sh
#!/bin/bash
source rtenv/bin/activate
source ~/.env/env.sh你执行它
./env_setup.sh你会发现
脚本中的 source 是成功的但脚本一结束环境变量如 RTT_ROOT、PATH、alias、Python venv 等就“消失”了。
原因是脚本在子 shell 中运行环境变更不会传回你的交互式终端。✅ 正确方式用 source 调用脚本
想让环境变量影响当前终端你必须这样运行你的脚本
source ./env_setup.sh
# 或
. ./env_setup.sh这时 env_setup.sh 中的所有 export、alias、虚拟环境激活、RTT 工具加载等才会真正“留在”你的终端环境里。终极总结方式会影响当前终端环境吗./script.sh❌ 不会在子 shell 中执行bash script.sh❌ 不会source script.sh✅ 会. script.sh✅ 会等同于 source
✅ 推荐在终端初始化中配置
你也可以把这些写入 .bashrc / .zshrc 末尾
alias rtenvsource ~/Code/RTOS/rt-thread/rtenv/bin/activate source ~/.env/env.sh以后只需输入
rtenv即可一键进入开发环境。必须先完成配置和编译再运行 scons --dist否则 scons --dist 会失败或者打包内容不完整。✅ 正确的使用顺序如下
配置编译环境
export RTT_EXEC_PATH/usr/bin # 或你的 arm-none-eabi 工具链路径
scons --menuconfig # 生成 .config 和 rtconfig.py编译项目确保能正常构建
scons # 构建 rt-thread 项目生成 .elf 等产物打包项目
scons --dist # 在成功构建后打包整个工程为 .zip含配置、源码、工具scons --dist 的作用
该命令会自动打包
当前 BSP 所需文件包括 SConscript, board, applications, Kconfig, Makefile 等.config, rtconfig.py 等配置文件构建产物如 .elf, .bin, .map导出一个 project.zip 或类似压缩包便于部署、分发、发布或在 RT-Thread Studio 中导入如果你还没配置成功或无法构建成功建议
不要先 scons --dist否则打的包是不完整的使用CLion 开发
打包好的dist下的project 可以拷到别处独立运行注意RTT-ROOT环境变量变化
修改SCons 文件屏蔽掉前面几行即可因为project中已经包含rt-thread了
# if os.getenv(RTT_ROOT):
# RTT_ROOT os.getenv(RTT_ROOT)
# else:
# RTT_ROOT os.path.normpath(os.getcwd() /../../..)# set RTT_ROOT
if not os.getenv(RTT_ROOT): RTT_ROOTrt-thread再次执行 scons --targetcmake 生成cmake.txt即可使用CLION开发。