谷动谷力

 找回密码
 立即注册
查看: 2178|回复: 1
打印 上一主题 下一主题
收起左侧

RT-Thread Smart入门教程

[复制链接]
跳转到指定楼层
楼主
发表于 2020-11-26 22:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunsili 于 2021-9-1 18:32 编辑

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开发板上执行。


软件包说明


下载rt-smart软件包

可以在以下链接下载rt-smart的软件包,文件名称为rt-smart-20201125.zip:
https://realthread.cowtransfer.com/s/1c2b64ba968748

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

针对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.cowtransfer.com/s/1c2b64ba968748
请根据自己的开发环境选择对用的工具链下载使用。

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


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


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

安装编译环境

首先安装编译时需要用到的其他工具,软件包,可以通过如下的一些命令来安装:
  1. sudo apt-get update
  2. sudo apt-get install vim scons git bzip2 net-tools
  3. sudo apt-get install python-all python-all-dev
  4. sudo apt-get install qemu-system-arm qemu-system-common qemu-utils
复制代码

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

编译应用程序

1# 进入到rt-smart目录
  1. cd rt-smart
复制代码
2# 设置对应的环境变量,和原RT-Thread相比,多了RTT_CC_PREFIX环境变量
  1. source smart-env.sh
复制代码

3# 编译用户态程序
  1. cd userapps
  2. scons

  3. scons: Reading SConscript files ...
  4. scons: done reading SConscript files.
  5. ...
  6. LINK root/bin/webclient.elf
复制代码


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

  1. <div>cd userapps</div>python ../tools/mkromfs.py root ../kernel/bsp/qemu-vexpress-a9/applications/romfs.c
复制代码

编译rt-smart内核


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

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


模拟执行

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


  1. cd rt-smart/kernel/bsp/qemu-vexpress-a9
  2. /qemu-nographic.sh

  3. \ | /
  4. - RT -     Thread Smart Operating System
  5. / | \     5.0.0 build Nov 15 2020
  6.   2006 - 2020 Copyright by rt-thread team
  7. lwIP-2.0.2 initialized!
  8. try to allocate fb... | w - 640, h - 480 | done!
  9. fb => 0x61100000
  10. [I/sal.skt] Socket Abstraction Layer initialize success.
  11. [I/SDIO] SD card capacity 65536 KB.
  12. Dir /mnt mount failed!
  13. hello rt-thread
  14. msh />
  15. msh />/bin/hello.elf
  16. msh />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
  5. lwIP-2.0.2 initialized!
  6. try to allocate fb... | w - 640, h - 480 | done!
  7. fb => 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!
  11. Dir /mnt mount failed!
  12. hello rt-thread
  13. msh />mkfs sd0
  14. msh />

  15. # Ctrl + A, X退出
  16. QEMU: Terminated

  17. bernard@fuchsia-NUC8i7BEH:~/workspace/rt-smart/smart/kernel/bsp/qemu-vexpress-a9$ ./qemu-nographic.sh
  18. \ | /
  19. - RT -     Thread Smart Operating System
  20. / | \     5.0.0 build Nov 24 2020
  21. 2006 - 2020 Copyright by rt-thread team
  22. lwIP-2.0.2 initialized!
  23. try to allocate fb... | w - 640, h - 480 | done!
  24. fb => 0x61100000
  25. [I/sal.skt] Socket Abstraction Layer initialize success.
  26. [I/SDIO] SD card capacity 65536 KB.
  27. [I/SDIO] switching card to high speed failed!
  28. file system initialization done!
  29. hello rt-thread
  30. msh />
复制代码

+10
回复

使用道具 举报

沙发
 楼主| 发表于 2020-11-26 22:20:49 | 只看该作者
本帖最后由 sunsili 于 2021-9-1 18:35 编辑

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



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

准备编译环境

在Windows上编译rt-smart,可以借助RT-Thread的env工具,env工具下载及安装请参考:https://www.rt-thread.org/page/download.html请确保env可以正常使用。因为rt-smart.zip软件包并不携带Windows环境下的工具链,所以务必记得安装前面描述的 准备工具链 章节下载Windows工具链并在`rt-smart\tools\gnu_gcc`下解压展开。打开env的终端窗口,切换到这个rt-smart代码包根目录,运行smart-env.bat,它会设置一定的环境变量,然后整体的smart开发环境就可以使用了。1#进入rt-smart目录,设置环境变量
  1. <div>cd rt-smart</div><div>smart-env.bat</div>
复制代码

注:此处运行smart-env.bat设置环境,它包括编译器设置,同时它也会设置工具链的前缀,可以在env终端下输入以下命令查看返回结果是否生效:
  1. # 查看环境变量是否生效
  2. set RTT_CC_PREFIX
  3. RTT_CC_PREFIX=arm-linux-musleabi-
复制代码

编译应用程序

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


  1. <div>#进入userapps目录进行编译</div>cd rt-smart\userapps
  2. scons
复制代码

编译rt-smart内核


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

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


在树莓派上执行




准备硬件连接

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

准备SD卡上的软件

树莓派的加载需要将一些boot文件放到sd卡中。rpi4_rt-smart_boot.zip为树莓派的加载需要将一些boot文件,可以在如下的地址中进行下载:https://realthread.cowtransfer.com/s/1c2b64ba968748将下载后的文件解压后和kernel7.img一起放入空的SD卡根目录,如下图所示,其中bin文件夹中存放`userapps\root\bin`目录下已编译好的可执行elf文件。
打开串口调试助手,插上电源,可以看到程序已经正常的运行起来,进入bin目录下即可执行示例程序: 1heap: 0xc00c9a0a - 0xc40c9a0a
  1. \ | /
  2. - RT -     Thread Smart Operating System
  3.   / | \     5.0.0 build Nov 15 2020
  4.   2006 - 2020 Copyright by rt-thread team
  5. lwIP-2.0.2 initialized!
  6. version is B1
  7. bcmgenet: PHY startup ok!
  8. [I/sal.skt] Socket Abstraction Layer initialize success.
  9. [I/SDIO] SD card capacity 31465472 KB.
  10. found part[0], begin: 4194304, size: 256.0MB
  11. found part[1], begin: 272629760, size: 29.772GB
  12. file system initialization done!
  13. hello rt-thread!
  14. msh />/bin/hello.elf
  15. msh />hello world!
复制代码



+10
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-16 05:39 , Processed in 0.136752 second(s), 36 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表