描述:raspbian系统是针对raspberry pi 专门优化、基于Debian的系统;这款OS对浮点运算有更好的支持;但该系统是软实时系统,需要打上rt补丁,将系统修改成硬实时系统,以此保证实时任务在1ms内得到相应;
下面记录完整步骤:
a、编译树莓派内核所需的工具大部分已经集成在Raspbian发行版,唯一需要安装的是浮点运算工具bc:
$ sudo apt-get install bc
b、获取树莓派Linux内核源码:
$ git clone --depth=1 https://github.com/raspberrypi/linux
此行命令默认是找最新版本的内核版本,现在默认是获取4.4.14+版本,但后面的rt补丁网站上找不到相对应版本补丁;这样就会导致部署freempt_rt补丁错误;所以要想找到对应版本的Linux内核和rt补丁,就需要在 https://github.com/raspberrypi/linux上下载各种Linux内核版本,然后再rt补丁网站上找相对应的版本,进行测试验证;如果编译通过,证明二者相对应;
我下载的内核版本是:linux-rpi-4.4.y_irq;
$ cd linux
c、获取树莓派内核编译配置文件.config,该文件可从/proc/config.gz中获取,或者通过make生成:
此处利用红框内命令;
d、获取并部署PREEMPT_RT补丁:
$wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.4/older/patch-4.4-rt2.patch.xz
$xzcat patch-4.4-rt2.patch.xz | patch -p1
运行xzcat命令,中间不需要人工任何参与,否则只能代表你找的rt补丁版本和Linux内核版本不相对应;
e、安装ncurses软件包:
如果不安装此软件包,运行make menuconfig 命令会报如下错误:
离线下载ncurses软件包,安装命令如下:
pi@raspberrypi:~$ chmod -R 777 ncurses-5.9.tar.gz
pi@raspberrypi:~$ tar -zxvf ncurses-5.9.tar.gz
pi@raspberrypi:~$ cd ncurses-5.9/
pi@raspberrypi:~/ncurses-5.9$ sudo su
root@raspberrypi:/home/pi/ncurses-5.9# ./configure
root@raspberrypi:/home/pi/ncurses-5.9# make -j4
root@raspberrypi:/home/pi/ncurses-5.9# make install
安装ncureses之后,然后再运行 $make menuconfig 命令,即可进行内核配置了;
f、通过make menuconfig配置PREEMPT_RT编译开关:
$ make menuconfig
进入Kernel Features -> Preemption Model中,选择Fully Preemptible Kernel (RT):
g、开始编译,并将编译好的内核安装到/boot分区中:
$ make -j4 zImage modules dtbs
$ sudo make modules_install
$ sudo cp arch/arm/boot/dts/*.dtb /boot/
$ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
$ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
$ sudo chmod a+x scripts/mkknlimg
$ sudo scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img
其中’make -j4’是指采用4条线程同时进行编译,充分利用树莓派CPU中的四个核心,可以大大提高编译速度。
编译并安装完成后重启。
h、重启完成后,利用如下命令查看是否编译并安装成功,如果看到PREEMPT RT,则说明内核编译并安装成功:
$ uname -a
i、Cyclictest 安装与测试:
$ git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
$ cd rt-tests
$ make all
$ sudo cp ./cyclictest /usr/bin/
$ cyclictest --help
测试命令:
非实时性系统测试结果及系统内核版本:
实时性系统测试结果及系统内核版本:
树莓派在编译程序的情况下(make -j4),同时运行实时性测试命令:
$sudo cyclictest -l1000000 -m -n -a0 -t1 -p99 -i400 -h400 -q
从上图来看,raspbian rt 系统能够保证任务在1ms内相应。