【前言】在工业产品中使用操作系统,一般都需要使用实时性较强的操作系统,而众所周知,linux系统是基于时间片划分的非实时系统,其实时性难以满足工业化对时效性的要求,因此很多应用场景中无法使用linux操作系统。当然这一局限性已经有所改善,目前linux社区已经增加了众多版本的实时补丁,只要给linux内核打上实时补丁,其实时性会得到大幅度提升。“实时补丁”的主要工作就是针对Linux系统的优先级倒置、自旋锁等问题进行改进,以达到实时操作系统的要求。
1、环境说明
1.1、硬件平台:M3568-4GF16GLI-T(RK3568)
1.2、Linux内核版本:Linux4.19.193
2、下载RT Preempt补丁
Index of /pub/linux/kernel/projects/rt/https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/
根据实际的Linux内核版本下载对应的RT Preempt补丁。博主使用的Linux内核版本为4.19.193,故在这里我们下载的补丁文件为:patch-4.19.193-rt81.patch.gz。(当然也可以下载其它压缩格式的文件)
3、打补丁操作
3.1、解压补丁包
输入以下命令解压你刚下载的补丁包:
gunzip patch-4.19.193-rt81.patch.gz
3.2、将RT补丁打进内核文件
将解压出来的补丁文件patch-4.19.193-rt81.patch.gz复制到SDK包中的kernel目录中。
随后执行如下指令:
sudo patch -p1 < patch-4.19.193-rt81.patch
至此完成打补丁工作。
注意:直接从官网下载的补丁包,打入RK3568内核后,会出现很多错误,其原因是有些修改并未patch进内核源码中,详情请参见第6节。
4、配置并编译Linux内核
在kernel目录下,执行make ARCH=arm64 menuconfig 进入内核menuconfig菜单(执行前需保证内核根目录下的.config是arm64架构)。
进入 > General setup > Preemption Model
选择 (X) Fully Preemptible Kernel (RT)
保存配置文件。
执行make ARCH=arm64 savedefconfig,导出配置文件,其命名为defconfig,用defconfig文件复制至arch/arm64/configs/rockchip_linux_defconfig文件(此处要根据你的实际情况去替换,博主的内核配置文件为arch/arm64/configs/rockchip_linux_defconfig)。
使用 ./build.sh kernel指令去编译内核。(瑞芯微官方提供的内核编译脚本)
5、测试linux的实时性
前面我们已经生成了实时的linux内核镜像,接下来我们把实时内核烧写到开发板上,进行实时性性能测试。这里需要引入一个测试linux性能的工具cyclictest。