ART-PI Smart开发板介绍与开发环境的建立

描述

ART-PI Smart 开发板介绍

 

art-pi smart 是rt-thread公司推出的一款基于NXP公司imx6ull处理器的开发板,主要用来测试评估RT公司去年新发布的混合微内核操作系统RT-Smart。

NXP

 

RT-Thread Smart(简称 rt-smart)嵌入式实时操作系统是基于 RT-Thread 操作系统衍生的新分支,面向带 MMU,中高端应用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,带 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系统的基础上启用独立、完整的进程方式,同时以混合微内核模式执行。  

NXP

 

rt-smart 是一款高性能混合微内核操作系统,在传统嵌入式操作系统划分中,rt-smart 能够填补传统 RTOS 和大型操作系统 Linux 之间的空白,在实时性、成本、安全性、启动速度等方面可以取得最佳的平衡。  

开发环境的建立

下载RT-Smart SDK

RT官方针对ART-PI Smart开发板提供了完整的SDK开发包,该SDK有完整的bsp支持,并且有详细的readme文件作为离线参考,在进行开发之前,先从gittee上获取该sdk完整的文件(本人电脑离线使用居多,所以简单粗暴直接从gittee上下载zip本地解压即可)。这里需要注意一下,因为后续本人选择的是scons构建工具通过ENV命令行窗口来进行构建,所以SDK放置的目录一定不要有中文(任何开发设计工作,都不要出现中文路径,这是个好习惯)。1.ART-Pi-Smart SDK仓库

https://gitee.com/rtthread/ART-Pi-smart

 

2.ART-Pi-Smart 用户手册

https://art-pi.gitee.io/smart-website/docs/#/user_manual/user_manual?id=windows-%e4%b8%8b%ef%bc%8c%e5%bf%ab%e9%80%9f%e4%bd%93%e9%aa%8c-rt-smart

 

如下图所示,是ART-PI Smart的SDK目录结构:

NXP

如下图所示,是开发板控制台界面下smart系统目录结构,具体开发板上电链接流程请参考官方文档,此处不赘述。需要注意的是,电脑上要提前安装cp210x的驱动。

NXP

 

安装ENV和SCONS构建工具

Env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。

主要特性

menuconfig 图形化配置界面,交互性好,操作逻辑强;
  • 丰富的文字帮助说明,配置无需查阅文档;
  • 使用灵活,自动处理依赖,功能开关彻底;
  • 自动生成 rtconfig.h,无需手动修改;
  • 使用scons工具生成工程,提供编译环境,操作简单;
  • 提供多种软件包,模块化软件包耦合关联少,可维护性好;
  • 软件包可在线下载,软件包持续集成,包可靠性高;
 具体的ENV安装和使用,参考最权威的官方文档即可,这里不做过多赘述啦。
  • RT官方ENV用户手册

 

https://www.rt-thread.org/document/site/#/development-tools/env/env

 

 

  • RT官方SCONS用户手册

 

https://www.rt-thread.org/document/site/#/development-tools/scons/scons

 

安装对应系统下的编译工具链

ART-PT Smart可以在windows下开发,也可以在Linux环境下开发,本人选择了日常熟悉的windows环境开部署相关的编译工具链,也方便后续新上手的朋友们快速熟悉。在解压好的SDK根目录下,找到toos文件夹,进去之后,在tools文件夹下,打开ENV窗口,输入指令
1python get_toolchain.py
 在主机保证联网的前提下,该脚本会自动识别用户当前的开发环境,自动安装相匹配的编译工具链

安装完毕之后,在ENV命令行界面,输入如下指令,查看工具链是否安装正确:

1arm-linux-musleabi-gcc -v

 

出现如下内容代表工具链已经自动安装好:

 1Using built-in specs.
 2COLLECT_GCC=arm-linux-musleabi-gcc
 3COLLECT_LTO_WRAPPER=e:/test/rt-smart/tools/gnu_gcc/arm-linux-musleabi_for_i686-w64-mingw32/bin/../libexec/gcc/arm-linux-musleabi/7.3.0/lto-wrapper.exe
 4Target: arm-linux-musleabi
 5Configured with: ../src_gcc/configure --disable-werror --prefix= --target=arm-linux-musleabi --with-sysroot=/arm-linux-musleabi --with-build-sysroot=/builds/research/musl-toolchain/build/arm-linux-musleabi_for_i686-w64-mingw32/sysroot/ --enable-languages=c,c++ --disable-multilib --enable-tls --disable-libmudflap --disable-libsanitizer --disable-gnu-indirect-function --disable-libmpx --enable-libstdcxx-time --host=i686-w64-mingw32 --disable-bootstrap AR_FOR_TARGET=arm-linux-musleabi-ar AS_FOR_TARGET=arm-linux-musleabi-as LD_FOR_TARGET=arm-linux-musleabi-ld NM_FOR_TARGET=arm-linux-musleabi-nm OBJCOPY_FOR_TARGET=arm-linux-musleabi-objcopy OBJDUMP_FOR_TARGET=arm-linux-musleabi-objdump RANLIB_FOR_TARGET=arm-linux-musleabi-ranlib READELF_FOR_TARGET=arm-linux-musleabi-readelf STRIP_FOR_TARGET=arm-linux-musleabi-strip
 6Thread model: posix
 7gcc version 7.3.0 (GCC)
 8build date: Sep 30 2021 13:47:19
 9build sha: b998444eb32a74bdeb55fd70963187255ae6efe0
10build job: 173019

 

接着,打开ENV工具,然后输入执行:

 

1smart-env.bat
 该操作是在进一步开发前先设置好环境变量(rt-smart 工具链、编译器等),输入如下指令,查看环境变量是否生效:
1set RTT

 

如果生效,则会显示如下信息,否则请检sdk相关查路径是否有中文,或者工具链没有安装等。

1RTT_CC=gcc
2RTT_CC_PREFIX=arm-linux-musleabi-
3RTT_EXEC_PATH=E:	est
t-smart	oolsgnu_gccarm-linux-musleabi_for_i686-w64-        mingw32
4in

(注意:后续每次打开ENV工具进行scons之类的操作,都必须线设置该环境变量,否则后续编译构建将会报错!)

构建和编译内核

内核裁剪与构建

进入到SDK根目录下,然后依次进入到ART-PI Smart BSP所在的目录下,例如:

1盘符:..ART-Pi-smart-masterkernelspimx6ull-artpi-smart

 

在该目录下,打开ENV命令行窗口,输入指令:

1menuconfig

 

则ENV窗口会自动弹出内核的图形配置界面,如下图所示:
NXP

在menuconfig配置界面下,有丰富的外设资源和各种系统相关的组件,以及内核相关的功能供开发者进行勾选、适配和裁剪。如果之前有过RT-Thread的开发经验,那么这个流程将会非常熟悉。配置完成后,依次推出并保存,回到命令行界面,然后输入如下指令对刚才配置好的内核进行编译:
1scons

 

该编译指令其实还可以配合其他参数一起使用,具体细节请参考前文提到的官方SCONS用户手册。

新内核的更新方式

在bsp目录下,scons成功之后,将会生成内核的可执行文件,分别是:

1rtthread.bin
2rtthread.elf
3rtthread.imx
4rtthread.img

 

运行新的内核,本文只用到了以上两种文件格式,分别是imx和bin格式的内核文件。

单次运行新内核

通过开发板网络接口,可以传输内核文件到开发板并且执行,检测内核当前运行情况。同时也可以利用开发板上第二个usb接口,通过上位机软件加载启动内核。这两种方式在官方手册里介绍的较为详细,本文不再赘述。请参考前文给出的官方链接。
在这里提及这种方式,主要是想引出一个自己遇到的问题,本人手中的板子,emmc文件系统上的内核文件版本较老,网络IP不能静态设置,只能DHCP动态分配,而我身边恰好没有路由器,更新之后内核用到官方的方式加载运行之后,可以正常设置静态IP,但是复位之后,系统内核又回到旧的版本,也就是说,上面提到的官方示例的加载运行方式是把内核文件加载到RAM种运行了,所以,如果跟我一样有需要把内核文件上传到emmc的文件系统中的朋友,可以用下面两种方式。

固化内核到EMMC文件系统

方法一:通过webserver传输目前Smart的内核中,带有webclien.elf程序,在电脑端可以建立一个webserver服务器,在板子上,执行webclient.elf,可以直接访问并下载对应路径下的内核bin文件,然后在控制台窗口,通过cp指令把新的内核bin文件拷贝覆盖到旧的内核所在的路径下即可。这种方式比较一劳永逸,但是,在本人实际测试过程中,webclient下载到的文件一直出错,文件大小也不对。不知道是否是webclient.elf源码有bug。该方法暂时记录在此处,有兴趣研究的朋友可以后续自行尝试。  下面贴出我在电脑端建立建议websever的python指令:
1python -m http.server 8080

 

方法二:通过sd传输除了web下载内核bin文件到emmc上的文件系统中,还可以更简单粗暴的通过sd卡把bin文件传输到文件系统中。该过程较为简单,在系统控制台界面,进入sd卡的bin文件所在路径,直接cp操作就ok。
这里需要记录一下本人在使用SD卡时出现的小问题。当前smart系统不支持sd卡的热插拔检测,所以,在系统运行时,拔掉sd卡,内核会报rt_device相关的错误。其二是,在系统初始化打印信息的时候,每次都提示SD卡初始化失败,但是进入系统后,sd卡目录又能正常访问,不知道是不是系统bug,后续感兴趣的朋友可以尝试解决一下。

用户态程序编译

内核的相关操作之后,就是用户APP程序的相关操作介绍了。这一部分较为简单,在ENV窗口下(确保已经执在根目录下行过set RTT指令,并且检查环境变量是正确的),进入到如下路径  
1盘符:...ART-Pi-smart-masteruserapps
 该路径下apps文件夹下,存放的是用户app的源文件,例如HELLO文件夹下,存放的就是输出“hello world”的历程源码,在root/bin路径下,存放的是用户app对应编译生成的系统elf格式的可执行文件。用户APP程序构建使用的是SCONS工具,该工具采用的python语言编写,类似于Liunx下常用的的Cmake之类的工具,我们以官方hello程序为例,默认scons构建脚本已经写好,具体scons的操作方法,请参考前文提到的官网文档,此处不赘述。此时在ENV界面下,输入如下指令即可完成编辑和生成elf文件:
1scons --app=hello

 

编译成功之后,会看到相应的信息和生成的elf文件名称,如果程序有语法错误,那么此处会有详细的报错。这里再本人测试使用中发现一个问题,当前编译检查较为严格,移植之前自己写的小例程,发现一些没有调用的变量和函数,统统会被视为错误,或者一些不是那么匹配的数据类型(如char到int之类的),也是直接全部报错,而不是警告,这一点是可以修改编译规则的,但是本人太熟悉对应的脚本文件,所以暂时没有处理,在次提出该问题,供后来朋友避坑。

用户态程序下载运行

在sd卡运行

用户程序生成的elf文件,在root/bin路径下,拷贝该elf文件到sd卡,并且挂载sd卡到系统上,进入到对应目录,即可运行用户的应用程序。这个方法对于需要反复调试的操作很不友好。所以更推荐下面这种做法。

tftp方式运行

在群友@Red 的推荐下,本人测试了一款开源的tftp客户端,名字叫做tftpx
tftpx github仓库链接

https://github.com/ideawu/tftpx/blob/master/client.c

 

它在开发板上运行之后,配合电脑端tftp服务器,即可下载对应路径下的elf文件到板子系统中去。电脑端推荐使用tftp64.exe这个软件,按照要求建立好TFTP服务器,设置好IP和文件所在路径,即可。然后通过SD卡,把tftpx.elf文件拷贝到板子系统root/bin路径下,并且执行,执行格式如下:
1tftpx.elf 192.168.1.100 8080
 

此时只要网络畅通,就会提示相应的操作说明,我们可以输入如下指令,来下载刚刚编译好的hello.elf

用户app。

1get hello.elf

 

下载完毕后退出,即可。本人把编译好的tftpx.elf文件放在附件中,供有需要的朋友下载使用。如果您有更方便更高效的elf传输加载方式,也可回帖分享介绍哦。(●'◡'●)

总结

rt-smart作为国产新一代操作系统。未来可期。在起步阶段,能做到当下的完成程度,实属不易,任何一个做软件开发的工程师,都能想象到这其中的艰辛和不易。在本次初步使用过程中,既体会到了RT系统高效精炼的特点,也发现了些许问题,在积极与群里各位大佬交流中,不仅解决了问题,还学到了很多其他方面的知识。我认为这才是一种良心循环。作为一个开源系统,衷心希望在@bernard 的带领下,大家都多多参与进来,贡献自己微薄的力量,让Smart在未来能以洪水之势迅猛发展。最后,再次感谢RT官方提供的这次试用机会,感谢熊大@bernard 在半夜还在给大家解决问题.感谢@RT-Thread小师弟 认真负责的态度,在疫情期间保证了板子的顺利发货以及本活动的顺利进行。本人预计后续会陆续把最近在使用过程中的一些心得、程序设计等方面的感悟分享出来。作为该分享的第一篇,我想以诗人北岛的诗《回答》中的几句话,作为第一篇文章的结束;致代码,致理想,致这个世界上每一个参与开源项目的芸芸码农。
“如果海洋注定要决堤,
就让所有的苦水都注入我心中,
如果陆地注定要上升,
就让人类重新选择生存的峰顶。
新的转机和闪闪星斗,
正在缀满没有遮拦的天空。
那是五千年的象形文字,
那是未来人们凝视的眼睛。”
---北岛《回答》节选

作者:RT-Thread社区成员RickFlying

 

原文标题:RickFlying

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分