背景
RT-Thread Smart 是基于 RT-Thread 操作系统上的混合操作系统,它把应用从内核中独立出来,形成独立的用户态应用程序,并具备独立的地址空间。
自 V5.0.0 起,rt-smart 分支已合并至 master 分支上,下载 rt-thread 源码后,无需再切换至 rt-smart 分支,但需要为 BSP 配置 Smart 内核。
架构
RT-Thread Smart 在硬件平台的基础上通过 MMU、系统调用的方式把整个系统分成了内核态及用户态。用户态通过系统调用 System Call
访问内核代码。
RT-Thread Smart 的核心实现是 lwP,进程管理模块( rt-thread/components/lwp )。它包括了如下的几个部分:
- 面向用户态的系统调用
- 用户态进程管理
- elf 可执行应用程序加载器
- 基于 MMU 的虚拟内存管理,地址空间管理
入门体验
准备
- 环境准备: ubuntu 20.04 (如果只有 windows 系统,建议使用 WSL 方式创建一个 linux 系统)
- RT-Thread 源码下载
git clone https://github.com/RT-Thread/rt-thread.git
- Smart 的
userapps
下载
git clone https://github.com/RT-Thread/userapps.git
- 安装编译工具
// 安装 xmake
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake
// 安装 scons
sudo apt-get install scons
编译
进入 userapps, 配置环境变量
cd userapps
source env.sh
编译应用程序
cd apps
/ / 导出工具链
xmake f -a aarch64
// 编译用户态应用
xmake -j12
制作镜像
xmake smart-rootfs
xmake smart-image -o ../prebuilt/qemu-virt64-aarch64/ext4.img
编译内核
为了方便起见,我们采用 qemu-virt64-aarch64
为例构建内核镜像, 在编译内核之前,我们需要先安装 qemu
模拟器
sudo apt-get install -y libglib2.0-dev libpixman-1-dev
sudo dpkg -i ./qemu_7.1.0-2022111713_amd64.deb
进入 qemu-virt64-aarch64
, 打开 menuconfig
cd ./rt-thread/bsp/qemu-virt64-aarch64/
scons --menuconfig
// 如果遇到 Kconfig 文件有不识别的字符时, 可通过以下命令解决:
dos2unix `find -name Kconfig`
打开 menuconfig 后,使能 RT-Thread Smart
开始编译内核
scons -j12
最后江编译生成的 rtthread.bin 复制到 userapps\prebuilt\qemu-virt64-aarch64
目录即可
此时, 该目录下的文件及作用如下:
ext4.img // 文件系统镜像文件, 之前制作镜像时,已将 userapps 下的应用程序 copy 到了文件系统的 `/bin` 目录下
rtthread.bin // 内核镜像
run.sh // 运行 QEMU 模拟器
run_debug.sh // 调试 QEMU 模拟器
运行
运行 rt-smart 系统
./run.sh
在系统中运行应用程序
msh />/bin/hello
msh />hello world!