当前位置: 首页 > 工具软件 > Cyclictest > 使用案例 >

树莓派打实时补丁(RT-PREEMPT)与实时性测试(cyclictest)

莫乐
2023-12-01

1> 打补丁

将在Ubuntu电脑上完成对树莓派rt补丁的编译,然后拷贝到树莓派中,完成。

  1. 建文件夹
mkdir ~/rpi-kernel
cd ~/rpi-kernel
mkdir rt-kernel
  1. 下载树莓派实时补丁与编译工具, 放在rt-kernel中
git clone https://github.com/raspberrypi/linux.git -b rpi-4.19.y-rt
git clone https://github.com/raspberrypi/tools.git
  1. 手动配置编译环境

    编译工具下载后,在64位ubuntu上编译我们需要的编译工具bin文件在:
    tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 目录下,将此目录添加到环境变量PATH中,
    添加方法:(根据自己的的路径添加环境变量)
    
PATH=$PATH:/home/sd/rpi-kernel/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
arm-linux-gnueabihf-gcc -v    //查看版本号
注意:之后的所有make命令都要指明一些环境变量 (自动的也有方法 )
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7   
对于Rasbperry Pi 2, 3B(+):  KERNEL=kernel7   (其他树莓派可参考下述链接中的介绍)

后面用 **[指明]**  代替上面环境变量
  1. 配置config(在此使用源码自带的config )
[指明] make bcm2709_defconfig 
注意:若执行上一步出错  根据各自情况 我是安装了bison、flex 后就可以了  
 ls -a  可看到.config
注意:我们可以直接用工程里的配置,但这样的话可能会丢失原来使用的树莓派的配置
  1. 开始编译
[指明] make -j4 zImage
[指明] make -j4 modules
[指明] make -j4 dtbs
[指明] make -j4 modules_install
[指明] make -j4 dtbs_install
注意:在编译zImage出现错误,安装libssl-dev  
在编译完成后最后一条命令会显示DEPMOD 4.19.71-rt24-v7,之后在内核源码文件夹中,执行
./scripts/mkknlimg ./arch/arm/boot/zImage ./KERNEL_new.img
这时在本目录下将会出现一个KERNEL_new.img
  1. 挂载树莓派sd卡

      sd卡插进Ubuntu电脑中后,自动挂载两个分区:fat、ext4
       fat主要是boot的相关内容;ext4是系统根目录。打开可明显分辨
    
df -h  
可查看俩分区分别挂载的路径

以下用: [fat] 表示boot挂载路径、 [ext4]表示根目录的挂载路径
  • 安装modules
sudo [指明] make INSTALL_MOD_PATH=[ext4]  modules_install
  • 更新kernel.img文件
cp kernel_new.img  [fat]/
 将前面生成的kernel_new.img 复制入boot分区中,并编辑[fat]/config.txt ,在最后加入 :kernel=kernel_new.img
  • 复制其他相关文件
cp arch/arm/boot/dts/*.dtb   [fat]/
cp arch/arm/boot/dts/overlays/*.dtb* [fat]/overlays/
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
  1. 最后完成,将SD卡放回树莓派,开机后无误执行下面命令 ,查看kernel信息是否是打补丁的内核信息 。
uname -a

2> cyclictest 测实时性

这里需要引入一个测试linux性能的工具cyclictest。

  1. 安装

    基于管理包安装
    
Debian/Ubuntu系统下可以直接使用apt-get install rt-tests来安装cyclictest。

sudo yum install numactl-devel   #CentOS安装
apt-get install libnuma-dev   #Ubuntu安装
       基于git源码安装
git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
git branch testing
git checkout testing
git checkout origin/stable/v1.0
git branch
make
make CROSS_COMPILE=arm-v4t-linux-gnueabi
  1. 运行
    在rt-tests目录下 执行 ./cyclictest --help 查看用法 (-n 微秒 -N 纳秒)
#运行5个线程,线程优先级80,无限循环
sudo ./cyclictest -t 5 -p 80 -n  
#clock_nanosleep 线程优先级80,间隔10000微秒,10000次循环,无负载
./cyclictest -t1 -p 80 -n -i 10000 -l 10000  
#POSIX间隔计时器 线程优先级80,间隔10000微秒,10000次循环,无负载
./cyclictest -t1 -p 80 -i 10000 -l 10000
  1. 结果分析
结果:      T: 0 (17769) P:80 I:10000 C:  10000 Min:  3 Act:  13 Avg: 14 Max: 36
T: 0 序号为0的线程
P: 0 线程优先级为0
C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
I: 1000 时间间隔为1000微秒(us)
Min: 最小延时(us)
Act: 最近一次的延时(us)
Avg:平均延时(us)
Max: 最大延时(us)

3>参考链接

四足机器人高算力、低成本主控第一步:给树莓派打上RT实时补丁
树莓派-内核开发-说明 下载代码 编译 替换内核
Cyclictest 简介 安装 测试

 类似资料: