Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
rt-smart
新手学习
新人入手smart记录贴,大佬勿入
发布于 2023-08-04 15:24:22 浏览:2092
订阅该版
[tocm] 本文是本小白入门RT-thread Smart的记录贴 ### 一、编译RT-Thread Smart 首先在`qemu-virt64-aarch64`开启`smart`选项 ![image-20230804141908698.png](https://oss-club.rt-thread.org/uploads/20230804/68b3c8f556c678df3a81f8eda960efbd.png.webp) 使用`scons`编译。这里新手要注意一下,编译器不要直接自己下载`rtconfig.py`中默认的`aarch64-none-elf-gcc`。否则会出现头文件错误(这是因为项目的头文件和链接库属于`musllibc`)。建议新手先看下smart的官方文档,https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-smart/quick-start/qemu-linux/quickstart 。这里使用`~/.xmake/packages/a/aarch64-smart-musleabi`目录下的`aarch64-linux-musleabi-gcc`。需要在`shell`环境变量中设置`RTT_EXEC_PATH`及`RTT_CC_PREFIX`。 ``` # 注意这里需要将全部工具链都要复制到/opt目录下,因为工具链包含编译各阶段的可执行文件及链接库,如果有遗漏会报错 sudo cp -R .xmake/packages/a/aarch64-smart-musleabi/184869/8efdf2fc834f481fa7e599eebf7f480b/ /opt/aarch64-smart-musleabi export RTT_CC="gcc" export RTT_EXEC_PATH="/opt/aarch64-smart-musleabi/bin/" export RTT_CC_PREFIX="aarch64-smart-musleabi-" export PATH="$RTT_EXEC_PATH:$PATH" ``` 如果想了解编译时头文件寻找位置,具体为输入`scons --verbose`后的`-I`选项后目录与`aarch64-linux-musleabi-gcc -E -x c - -v < /dev/null`所输出内容的集合。 之后,运行`./qemu.sh`后就可以运行RT thread Smart,由下图标识可以看出是在Smart操作系统内 ![image-20230804142521501.png](https://oss-club.rt-thread.org/uploads/20230804/6e712d89fa02a70672f534dd177703b9.png) ### 二、编译userapp项目 在`userapp`目录中按照`readme.md`文件流程编译。这里稍作分析下这些`xmake`命令具体干了什么,我将所有`xmake`相关命令添加`--verbose`选项。以下分析各命令: `xmake --verbose`运行如下(由于每行命令类似,均为编译`apps`文件,故有部分省略): ![xmake.png](https://oss-club.rt-thread.org/uploads/20230804/c357f85474fa1f7da2eebd047ff22c83.png) 可见`xmake`命令是将所有`apps`下的文件编译成`aarch64`架构可执行文件。 这里有个疑问,我在`zsh`中运行`xmake`会报如下错误,之后若解决再更新下: ``` error: unknown rule(rt.sdk) in target(webclient)! ``` (我已在`env.sh`中已经将`#!/bin/bash`改为`#!/bin/zsh`) `xmake smart-rootfs --verbose`运行如下(同部分省略): ![rootfs.png](https://oss-club.rt-thread.org/uploads/20230804/0540d2a96eacd7433fb263fc7e91eff6.png) 可知该命令是将`xmake`的一些库和软件包移动到`rootfs`中。 `xmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img --verbose`运行如下: ![image.png](https://oss-club.rt-thread.org/uploads/20230804/200e49cc1951241a1fc88133460308a2.png) 可见该命令是将`rootfs`目录转换为一个`ext4`文件系统的镜像,作为之后RT-Thread Smart的磁盘镜像。 接下来通过`./run.sh`运行下内核。此时所运行的操作系统是`prebuilt`中预先构建好的`rt_thread.bin`,而我们需要在自己编译的RT-Thread Smart中运行`userapp`应用,于是我将目录下的`.run.sh`进行了如下修改 ![屏幕截图 2023-08-04 143531.png](https://oss-club.rt-thread.org/uploads/20230804/819383f7eb8b1988bb350536a001be26.png) 但是运行出现了如下结果: ![image-20230804144042873.png](https://oss-club.rt-thread.org/uploads/20230804/8e3aeece27621741b634f398188bb57c.png) 这里发现`ls`后没有任何内容,这是因为`prebuilt`中自带的`rtthread.bin`可以解析`ext4.img`文件系统镜像,而我们刚刚编译的内核不支持`ext4`文件系统,我们需要进行一些配置。在`menuconfig`中将`lwext4`选中。 ![image-20230804144539713.png](https://oss-club.rt-thread.org/uploads/20230804/54ac67381fd8115bac28713f3fc95e64.png) 第一次编译时bsp目录内没有该安装包,需要运行如下命令来下载安装包: ``` bash ~/.env/tools/scripts/pkgs --update ``` 该命令需要在当前bsp目录下执行,它会读取`menuconfig`输出的`.config`文件,根据里面`online packages`下选项来下载包到该bsp的`packages`文件夹。 此时我们编译出的内核就可以加载`userapps`中的程序了! ![image-20230804145214422.png](https://oss-club.rt-thread.org/uploads/20230804/0ce3c84c39a1f023c77835ad7e433920.png) ### 三、魔改`smart_fetch` `smart_fetch`所打印的信息是通过库函数获取的,如`uname`获取系统信息,`statfs`获取文件系统信息等。与`linux`等系统的用户态编程很类似。我这里也尝试使用库函数来进行获取一些系统信息。下面以打印所有`/bin`下程序为例子。 添加代码如下(在`smart_fetch.c`中): ![屏幕截图 2023-08-04 160619.png](https://oss-club.rt-thread.org/uploads/20230804/9f6beddb4d8a389c5a6a41e49c838679.png.webp) 目的是获取系统`/bin`下的文件。执行效果如下 ![屏幕截图 2023-08-04 160846.png](https://oss-club.rt-thread.org/uploads/20230804/0bdf89776e7ad28327e24fcc689e5774.png) ### 四、尝试自行编译工具链 在musl官网下载musl最新版,解压后运行如下命令 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20230816/e3d1648b16ba9941291d9a49bb2a310c.png) 编译gcc前需要下载如下包 ``` sudo apt install libgmp-dev libmpfr-dev libmpc-dev -y ``` 编译gcc命令 ``` ./configure --target=aarch64-linux-musleabi --prefix=/opt/test-gcc --with-sysroot=/opt/test --enable-languages=c,c++ ```
6
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
zms123456
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
1
大神们,rt-thread启用WDT了,但是还是没启动,怎么办?
2
求一个师傅带带队,有偿交学费 肯吃苦
3
自己按照官方手册 在drv_gpio.c里面找不到PIN脚信息
4
rtt studio f4默认生成的代码无法使用
5
官方例程中的 USB设置配置不成功
6
STM32F4的虚拟串口 的USB时钟如何配置
7
AT24CXX 软件包函数 at24cxx的问题
8
rtthread studio和bsp文件之间生成的区别和联系?
9
pwm根据手册修改为对应的引脚后无效
10
文件系统挂实验 ls命令异常
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部