在D1s上运行RT-Smart
简介
RT-Thread Smart(简称 rt-smart)嵌入式实时操作系统是基于
RT-Thread 操作系统衍生的新分支,面向带 MMU,中高端应用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,带 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系统的基础上启用独立、完整的进程方式,同时以混合微内核模式执行。
rt-smart 是一款高性能混合微内核操作系统,在传统嵌入式操作系统划分中,rt-smart能够填补传统 RTOS 和大型操作系统 Linux 之间的空白,在实时性、成本、安全性、启动速度等方面可以取得最佳的平衡。
rt-smart 操作系统架构框图,如下图所示。rt-smart 操作系统主要包含内核模块和用户态运行时环境。内核模块包括虚拟地址空间管理、进程管理、线程管理、进程间通信、虚拟文件系统框架、网络接口层框架、设备驱动框架、msh 控制台、日志系统、异常中断管理和系统调用接口,设备驱动框架包含串口驱动框架和看门狗驱动框架。用户态运行时环境包括用户态 C 库。
rt-smart 功能特点:
相比 Linux 十几秒以上的启动时间,rt-smart 启动速度最快可达300ms 以内,特别适合安防、汽车仪表盘、工业控制、AIOT 等领域
1)抢占式调试内核,任务响应性能与 Linux
相比更加优秀。
2)微秒级中断响应能力,能够第一时间对事件作出处理。
1)通过简单有效的系统设计与实现,为构建高可信环境提供坚实基础。
2)无缝对接 Linux 开发生态。
3)全面兼容支持 POSIX API 规范,极大程度降低
Linux 应用的移植成本,
能更快速获得全球开源社区资源。
1)继承 RT-Thread 十几年的软件生态积累,更易获得丰富的 RT-Thread软件包支持。
2)提供专业的人机交互图形组件
Persimmon UI,
支持 JavaScript 等高级语言开发。
1)OS 占用极少的内存空间和
Flash 空间,可最大化降低物料成本开发调试便利。
2)应用与内核分离,使用 VScode、RT-Thread
Studio 开发调试应用,大幅度降低应用开发门槛。
环境搭建
采用ubunt 18.04 desktop AMD64位系统。
代码获取
mkdir ~/dongshanpi/
cd ~/dongshanpi
拉取RT-Smart用户态代码。
git clone [https://github.com/RT-Thread/userapps.git](https:
进入userapps目录中,继续执行rt-thread代码拉取。
cd ~/dongshanpi/userapps
git clone [https://github.com/RT-Thread/rt-thread.git](https:
系统基本环境
下载编译器,我们使用RISCV64位,需要执行编译工具链下载和部署。
python3 get_toolchain.py riscv64
安装编译环境scons
sudo apt install scons
如果系统没有安装env工具,可以通过执行scons –menuconfig,会自动安装env工具到~/.env中。如果下载失败可以多试几次。
编译
进入建立的目录:cd ~/dongshanpi
建立d1s编译环境,执行:
source smart-env.sh riscv64
进入目录d1s的bsp目录,
userapps/rt-thread/bsp/allwinner/d1s:
可以通过执行scons –menuconfig 来配置当前工程:
调整结束后,保存退出。
执行 pkgs –update 完成包的更新。
执行编译:scons
编译结束后可以看到编译成功的提示。
编译结束后,会在d1s目录下面生成sd.bin文件,通过查找相关文件,发现该文件中包含了uboot.dtb,opensbi和rtthread.bin文件。
SD制作
首先需要准备一张sd卡,我这里用的是4G的卡,资料上说,小于128G的卡都可以。
通过读卡器在ubuntu环境下使用fdisk命令来分区处理。
执行 sudo fdisk /dev/sdb
进入后,使用p命令查看sd卡上是否有其它分区,如果有的话,全部删除。
然后,我们需要空出来卡开始的8M空间,用来存储引导文件和刚才生成的sd.bin文件。
从16384扇区开始,建立我们的第一个分区,我间分区划分为2个,1个1GB,1个2.9GB。
分区完成,保存后退出,使用mkfs命令格式化刚才创建的两个分区,都格式化为fat32格式的。
这张图引自
https://blog.csdn.net/weixin_43094346/article/details/129274956
csdn上的一篇文章,大佬绘制的分区,我看着感觉非常清晰,这里借鉴过来。
烧录
在ubuntu下,我们需要烧录两个文件,一个是在d1s/tools/boot0_sdcard_sun20iw1p1_d1s.bin文件,另一个就是我们刚刚编译出来的sd.bin。
烧录启动文件:
sudo dd if=boot0_sdcard_sun20iw1p1_d1s.bin of=/dev/sdb bs=1024 seek=8
完成后,退到d1s目录,烧录sd.bin,执行:
sudo dd if=sd.bin of=/dev/sdb bs=1024 seek=56
烧录完成,在执行同步命令:
sudo sync
然后可以退出sd卡.
运行测试
映像文件刷写完成,将tf卡插到dongshanpi-d1s的tf卡插槽中,这里特别提醒一下,拨码开关SW1必须拨到off的状态,保证可以从tf卡启动。连接TTL串口工具到PE2和PE3引脚。打开串口终端,按复位键,在终端中可以看到系统启动的信息。
系统采用RT-Thread作为核心,所以shell是finsh风格的。
图中前半部分都是乱码,是因为boot的过程中,串口波特率初始化为500000bps,而我的串口终端设置为115200bps,所以我把rt-smart中默认串口波特率修改为115200bps。
可以看到,我挂在了tf上的两个分区,第一个分区挂载为“/”根目录,第二个分区挂载为“/data”目录下。