DongshanPI开发板交流区
直播中

jyaxz

11年用户 429经验值
擅长:嵌入式技术
私信 关注
[经验]

【百问网DongshanPI-D1S开发板体验】+ 在D1s上运行RT-Smart

在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 之间的空白,在实时性、成本、安全性、启动速度等方面可以取得最佳的平衡。

image.png

rt-smart 操作系统架构框图,如下图所示。rt-smart 操作系统主要包含内核模块和用户态运行时环境。内核模块包括虚拟地址空间管理、进程管理、线程管理、进程间通信、虚拟文件系统框架、网络接口层框架、设备驱动框架、msh 控制台、日志系统、异常中断管理和系统调用接口,设备驱动框架包含串口驱动框架和看门狗驱动框架。用户态运行时环境包括用户态 C 库。
image.png

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://github.com/RT-Thread/userapps.git)

进入userapps目录中,继续执行rt-thread代码拉取。

cd  ~/dongshanpi/userapps

git clone [https://github.com/RT-Thread/rt-thread.git](https://github.com/RT-Thread/rt-thread.git)

系统基本环境

下载编译器,我们使用RISCV64位,需要执行编译工具链下载和部署。

python3 get_toolchain.py riscv64

安装编译环境scons

sudo apt install scons

如果系统没有安装env工具,可以通过执行scons –menuconfig,会自动安装env工具到~/.env中。如果下载失败可以多试几次。

编译

进入建立的目录:cd ~/dongshanpi

建立d1s编译环境,执行:

source smart-env.sh riscv64

image.png
进入目录d1s的bsp目录,
userapps/rt-thread/bsp/allwinner/d1s:
image.png

可以通过执行scons –menuconfig 来配置当前工程:
image.png

调整结束后,保存退出。

执行 pkgs –update 完成包的更新。

执行编译:scons

image.png

编译结束后可以看到编译成功的提示。

编译结束后,会在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格式的。
image.png

这张图引自

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风格的。

image.png

image.png

图中前半部分都是乱码,是因为boot的过程中,串口波特率初始化为500000bps,而我的串口终端设置为115200bps,所以我把rt-smart中默认串口波特率修改为115200bps。

image.png

可以看到,我挂在了tf上的两个分区,第一个分区挂载为“/”根目录,第二个分区挂载为“/data”目录下。

更多回帖

发帖
×
20
完善资料,
赚取积分