将在Ubuntu电脑上完成对树莓派rt补丁的编译,然后拷贝到树莓派中,完成。
mkdir ~/rpi-kernel
cd ~/rpi-kernel
mkdir rt-kernel
git clone https://github.com/raspberrypi/linux.git -b rpi-4.19.y-rt
git clone https://github.com/raspberrypi/tools.git
手动配置编译环境
编译工具下载后,在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 (其他树莓派可参考下述链接中的介绍)
后面用 **[指明]** 代替上面环境变量
[指明] make bcm2709_defconfig
注意:若执行上一步出错 根据各自情况 我是安装了bison、flex 后就可以了
ls -a 可看到.config
注意:我们可以直接用工程里的配置,但这样的话可能会丢失原来使用的树莓派的配置
[指明] 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
挂载树莓派sd卡
sd卡插进Ubuntu电脑中后,自动挂载两个分区:fat、ext4
fat主要是boot的相关内容;ext4是系统根目录。打开可明显分辨
df -h
可查看俩分区分别挂载的路径
以下用: [fat] 表示boot挂载路径、 [ext4]表示根目录的挂载路径
sudo [指明] make INSTALL_MOD_PATH=[ext4] modules_install
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/
uname -a
这里需要引入一个测试linux性能的工具cyclictest。
安装
基于管理包安装
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
#运行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
结果: 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)
四足机器人高算力、低成本主控第一步:给树莓派打上RT实时补丁
树莓派-内核开发-说明 下载代码 编译 替换内核
Cyclictest 简介 安装 测试