RTThreadIoTOS · 2020年11月27日

RT-Thread Smart 上手指南

首发:RTThread物联网操作系统
作者:RT-Thread

RT-Thread Smart(简称rt-smart)是基于RT-Thread操作系统衍生的新分支,面向带MMU,中高端应用的芯片,例如ARM Cortex-A系列芯片,MIPS芯片,带MMU的RISC-V芯片等。rt-smart在RT-Thread操作系统的基础上启用独立、完整的进程方式,同时以混合微内核模式执行。
rt-smart.zip软件包是RT-Thread Smart的用户体验软件包,可在QEMU模拟的VExpress-A9机器中或树莓派4B开发板上执行。本文档是针对QEMU、树莓派4B开发板上快速上手rt-smart入门指南文档。
软件包说明

下载rt-smart软件包

可以在以下链接下载rt-smart的软件包,文件名称为rt-smart-20201125.zip:

https://realthread.cowtransfe...

把它解压,假设它解压后的目录名是rt-smart,以下都以rt-smart来代表这个目录名。相关的几个主要目录及说明如下图所示:

image.png

准备工具链

针对Linux和Windows环境需要下载对应的arm-linux-musleabi工具链,如果是rt-smart的软件包,则自带Linux环境下的工具链。
● Linux版本工具链:install\_arm-linux-musleabi\_for\_x86\_64-pc-linux-gnu.tar
● Windows版本工具链:install\_arm-linux-musleabi\_for\_i686-w64-mingw32

工具链下载链接:

https://realthread.cowtransfe...

请根据自己的开发环境选择对用的工具链下载使用。

下载下来后分别解压展开到\`rt-smart/tools/gnu\_gcc\`目录下,rt-smart目录下的smart-env.bat/sh设置的环境变量,其中工具链路径都指向到这个目录下。

Linux下编译并在QEMU模拟环境上执行

在Linux系统下,需要安装一些基本的环境,然后才能编译rt-smart。本文档是基于Ubuntu16.04系统环境操作,其它Linux版本类似。

安装编译环境

首先安装编译时需要用到的其他工具,软件包,可以通过如下的一些命令来安装:

1sudo apt-get update2sudo apt-get install vim scons git bzip2 net-tools3sudo apt-get install python-all python-all-dev4sudo apt-get install qemu-system-arm qemu-system-common qemu-utils

以上命令会安装一些系统基础工具、python环境、scons、qemu工具等。

编译应用程序

 1# 进入到rt-smart目录 2cd rt-smart 3 4# 设置对应的环境变量,和原RT-Thread相比,多了RTT_CC_PREFIX环境变量 5source smart-env.sh 6 7# 编译用户态程序 8cd userapps 9scons1011scons: Reading SConscript files ...12scons: done reading SConscript files.13scons: Building targets ...14CC build/hello/main.o15CC build/ping/main.o16CC build/pong/main.o17CC build/vi/optparse-v1.0.0/optparse.o18CC build/vi/vi.o19CC build/vi/vi_utils.o20CC build/webclient/main.o21LINK root/bin/hello.elf22LINK root/bin/ping.elf23LINK root/bin/pong.elf24LINK root/bin/vi.elf25LINK root/bin/webclient.elf26scons: done building targets.

编译成功后,\`userapps/apps\`下的应用程序会编译成一个个的elf可执行文件,并放置于\`userapps/root/bin\`目录下,可以把它转换成romfs、C语言数组的方式给rt-smart内核使用,这样可以不依赖于其他文件系统就可以直接执行,生成romfs、C语言数组可以用如下的命令行:

1cd userapps2python ../tools/mkromfs.py root ../kernel/bsp/qemu-vexpress-a9/applications/romfs.c

编译rt-smart内核

 1cd rt-smart/kernel/bsp/qemu-vexpress-a9 2scons 3... ... 4CC build/kernel/src/thread.o 5CC build/kernel/src/timer.o 6LINK rtthread.elf 7arm-linux-musleabi-objcopy -O binary rtthread.elf rtthread.bin 8arm-linux-musleabi-size rtthread.elf 9   text    data     bss     dec     hex filename101219480   40652  122444 1382576  1518b0 rtthread.elf11scons: done building targets.

如果编译无误,会生成rtthread.elf内核文件。

模拟执行

通过qemu模拟的vexpress-a9开发板来直接运行:

 1cd rt-smart/kernel/bsp/qemu-vexpress-a9 2./qemu-nographic.sh 3 4 \ | / 5- RT -     Thread Smart Operating System 6 / | \     5.0.0 build Nov 15 2020 7 2006 - 2020 Copyright by rt-thread team 8lwIP-2.0.2 initialized! 9try to allocate fb... | w - 640, h - 480 | done!10fb => 0x6110000011[I/sal.skt] Socket Abstraction Layer initialize success.12[I/SDIO] SD card capacity 65536 KB.13Dir /mnt mount failed!14hello rt-thread15msh />16msh />/bin/hello.elf17msh />hello world!

退出qemu的方法: "Ctrl+A, X"。上面我们也运行了这次编译的应用程序\`/bin/hello.elf\`,并看到它输出\`hello world!\`。

在第一次执行时,会输出\`Dir /mnt mount failed!\`,这个是因为最开始执行时,qemu的脚本会生成一个空的sd.bin文件做为一个sd卡给到vexpress-a9使用。所以在第一次执行时,需要对sd0进行格式化

 1 \ | / 2- RT -     Thread Smart Operating System 3 / | \     5.0.0 build Nov 24 2020 4 2006 - 2020 Copyright by rt-thread team 5lwIP-2.0.2 initialized! 6try to allocate fb... | w - 640, h - 480 | done! 7fb => 0x61100000 8[I/sal.skt] Socket Abstraction Layer initialize success. 9[I/SDIO] SD card capacity 65536 KB.10[I/SDIO] switching card to high speed failed!11Dir /mnt mount failed!12hello rt-thread13msh />mkfs sd014msh />1516# Ctrl + A, X退出17QEMU: Terminated1819bernard@fuchsia-NUC8i7BEH:~/workspace/rt-smart/smart/kernel/bsp/qemu-vexpress-a9$ ./qemu-nographic.sh20 \ | /21- RT -     Thread Smart Operating System22 / | \     5.0.0 build Nov 24 202023 2006 - 2020 Copyright by rt-thread team24lwIP-2.0.2 initialized!25try to allocate fb... | w - 640, h - 480 | done!26fb => 0x6110000027[I/sal.skt] Socket Abstraction Layer initialize success.28[I/SDIO] SD card capacity 65536 KB.29[I/SDIO] switching card to high speed failed!30file system initialization done!31hello rt-thread32msh />

Windows下编译并在树莓派4B上执行

在Windows上同样也可以进行编译,在qemu或树莓派4B开发板上执行起来,这里主要提及如何在树莓派4B上执行的方式。

image.png

准备编译环境

在Windows上编译rt-smart,可以借助RT-Thread的env工具,env工具下载及安装请参考:https://www.rt-thread.org/pag...

请确保env可以正常使用。因为rt-smart.zip软件包并不携带Windows环境下的工具链,所以务必记得安装前面描述的 准备工具链 章节下载Windows工具链并在\`rt-smart\tools\gnu\_gcc\`下解压展开。打开env的终端窗口,切换到这个rt-smart代码包根目录,运行smart-env.bat,它会设置一定的环境变量,然后整体的smart开发环境就可以使用了。

1#进入rt-smart目录,设置环境变量2cd rt-smart3> smart-env.bat

注:此处运行smart-env.bat设置环境,它包括编译器设置,同时它也会设置工具链的前缀,可以在env终端下输入以下命令查看返回结果是否生效:

1# 查看环境变量是否生效2> set RTT_CC_PREFIX3RTT_CC_PREFIX=arm-linux-musleabi-

编译应用程序

当要编译应用程序时,使用方式和Linux的类似:

1#进入userapps目录进行编译2cd rt-smart\userapps3scons

编译rt-smart内核

 1#进入raspberry-pi\raspi4-32目录进行编译 2cd rt-smart\kernel\bsp\raspberry-pi\raspi4-32 3scons 4... ... 5CC build/kernel/src/signal.o 6CC build/kernel/src/thread.o 7CC build/kernel/src/timer.o 8LINK rtthread.elf 9arm-linux-musleabi-objcopy -O binary rtthread.elf kernel7.img10arm-linux-musleabi-size rtthread.elf11   text    data     bss     dec     hex filename12 710780   40448   64730  815958   c7356 rtthread.elf13scons: done building targets.

编译无误后,会在当前目录下生成kernel7.img文件,这个是树莓派上32位的版本。目前rt-smart还只支持32位系统,所以在树莓派4B上是以32位模式来执行。

在树莓派上执行

准备硬件连接

为了在树莓派4B上执行,需要准备如下硬件清单,并连接串口线到开发板,连接图示如下:
1.树莓派4B
2.SD卡(32GB或32GB以下)
3.USB转TTL串口线
4.网线
5.TYPE-C(用于供电)
6.读卡器(用于把编译好的文件写入到SD卡中)

image.png

准备SD卡上的软件

树莓派的加载需要将一些boot文件放到sd卡中。rpi4\_rt-smart\_boot.zip为树莓派的加载需要将一些boot文件,可以在如下的地址中进行下载:

https://realthread.cowtransfe...

将下载后的文件解压后和kernel7.img一起放入空的SD卡根目录,如下图所示,其中bin文件夹中存放\`userapps\root\bin\`目录下已编译好的可执行elf文件。

image.png

打开串口调试助手,插上电源,可以看到程序已经正常的运行起来,进入bin目录下即可执行示例程序:

 1heap: 0xc00c9a0a - 0xc40c9a0a 2\ | / 3- RT -     Thread Smart Operating System 4 / | \     5.0.0 build Nov 15 2020 5 2006 - 2020 Copyright by rt-thread team 6lwIP-2.0.2 initialized! 7version is B1 8bcmgenet: PHY startup ok! 9[I/sal.skt] Socket Abstraction Layer initialize success.10[I/SDIO] SD card capacity 31465472 KB.11found part[0], begin: 4194304, size: 256.0MB12found part[1], begin: 272629760, size: 29.772GB13file system initialization done!14hello rt-thread!15msh />/bin/hello.elf16msh />hello world!

image.png

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

RT-Thread

让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

推荐阅读
RT-Thread通过PSA安全认证
【Nano 应用作品】开源图片采集存储终端
【RT-Thread开发之路】使用at_device软件包通过ESP8266连接到网络

原文链接:https://mp.weixin.qq.com/s/B6uBx0tlmVTrvBnoGxWGCw
转载已获授权,禁止二转
推荐阅读
关注数
8059
内容数
181
小而美的物联网操作系统,经过14年的累积发展,RT-Thread 已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业,累积装机量超过4亿台,成为国人自主开发、国内最成熟稳定和装机量最大的开源 RTOS。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息