描述:raspbian系统是针对raspberry pi 专门优化、基于Debian的系统;这款OS对浮点运算有更好的支持;但该系统是软实时系统,需要打上rt补丁,将系统修改成硬实时系统,以此保证实时任务在1ms内得到相应;

 

 

下面记录完整步骤:

a、编译树莓派内核所需的工具大部分已经集成在Raspbian发行版,唯一需要安装的是浮点运算工具bc:

      $ sudo apt-get install bc

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_RT PREEMPT补丁使用方法


b、获取树莓派Linux内核源码:

      $  git clone --depth=1 https:///raspberrypi/linux

   此行命令默认是找最新版本的内核版本,现在默认是获取4.4.14+版本,但后面的rt补丁网站上找不到相对应版本补丁;这样就会导致部署freempt_rt补丁错误;所以要想找到对应版本的Linux内核和rt补丁,就需要在 https:///raspberrypi/linux上下载各种Linux内核版本,然后再rt补丁网站上找相对应的版本,进行测试验证;如果编译通过,证明二者相对应;

   我下载的内核版本是:linux-rpi-4.4.y_irq;

       $  cd linux

  

RT PREEMPT补丁使用方法 rtp补丁有什么用_rtlinux_02

c、获取树莓派内核编译配置文件.config,该文件可从/proc/config.gz中获取,或者通过make生成:

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_debian_03

此处利用红框内命令;

 

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

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_rtlinux_04

运行xzcat命令,中间不需要人工任何参与,否则只能代表你找的rt补丁版本和Linux内核版本不相对应;

 

e、安装ncurses软件包:

如果不安装此软件包,运行make menuconfig 命令会报如下错误:

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_raspberry pi_05

离线下载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):

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_RT PREEMPT补丁使用方法_06

 

 

 

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
$ sudo
$ sudo

其中’make -j4’是指采用4条线程同时进行编译,充分利用树莓派CPU中的四个核心,可以大大提高编译速度。

编译并安装完成后重启。

h、重启完成后,利用如下命令查看是否编译并安装成功,如果看到PREEMPT RT,则说明内核编译并安装成功:

$ uname -a

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_debian_07

 

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

 

测试命令:

RT PREEMPT补丁使用方法 rtp补丁有什么用_RT PREEMPT补丁使用方法_08

 

非实时性系统测试结果及系统内核版本:

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_RT PREEMPT补丁使用方法_09

RT PREEMPT补丁使用方法 rtp补丁有什么用_RT PREEMPT补丁使用方法_10

 

 

实时性系统测试结果及系统内核版本:

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_raspberry pi_11

 

树莓派在编译程序的情况下(make -j4),同时运行实时性测试命令:

$sudo cyclictest -l1000000 -m -n -a0 -t1 -p99 -i400 -h400 -q

 

RT PREEMPT补丁使用方法 rtp补丁有什么用_raspberry pi_12

从上图来看,raspbian rt 系统能够保证任务在1ms内相应。