Linux中实时内核模块的编译和测试以及打补丁

1.编译内核的方法

1.1下载linux内核源码的地址

常用的网址:Index of /pub/linux/kernel/icon-default.png?t=N7T8https://mirrors.edge.kernel.org/pub/linux/kernel/

国内镜像网址:

http://mirror.bjtu.edu.cn/kernel/linux/kernel/ icon-default.png?t=N7T8http://mirror.bjtu.edu.cn/kernel/linux/kernel/
Index of /kernel/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /kernel/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。icon-default.png?t=N7T8http://mirror.tuna.tsinghua.edu.cn/kernel/

1.2下载RT patch补丁的网址
 

Index of /pub/linux/kernel/projects/rt/icon-default.png?t=N7T8https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/

1.3编译内核的步骤

1、解压

把下载好的内核源码和补丁在ubuntu里面进行解压,并把它们解压到你自己新建的文件夹中,解压出来的patch放入到解压出来的内核源码文件夹中。如果没有挂载共享文件的话可以去看看我挂载文件的那一篇,又或者你可以在ubuntu里面进行下载,以及U盘拷贝都可

还可以终端直接解压命令

tar xzvf linux-5.15.137.tar.gz

进入内核目录,执行打补丁命令

cd ddc/linux-5.15.137/
sudo patch -p1 < patch-5.15.137-rt71.patch

2、更新系统软件和软件源

sudo apt-get update

sudo apt-get upgrade

3、安装编译工具

sudo apt-get install build-essential openssl 
sudo apt-get install build-essential

4、安装编译内核需要的库和工具

sudo apt-get install libssl-dev libncurses-dev libelf-dev flex bison

5、配置内核

清除上次编译产生的中间文件,最好每次编译前执行一下

sudo make clean

清除编译过程产生中间文件,就是将内核代码还原为解压代码

sudo make mrproper

进入内核目录,首先需要内核的配置文件,如果没有,可以先使用本机的内核配置

sudo make oldconfig

这样就会生成.config 文件,之后执行

如果有那就直接

sudo make menuconfig

内核配置建议

a.General setupPreemption Model 选择 FULL RT

b.General setupTimers subsystem 选中 High Resolution Timer Support

c.Processor Type and featuresMulti-core scheduler support 取消选中

d.Power management and ACPI options 保留 APCI Power Management Timer Support,其它都取消选中

此外 CPU Frequency scaling CPU Idle 下的选项全部取消。 APCI Support 下的选项可尽量将全部选项也取消掉。
e.General architecture-dependent optionsStack Protector buffer overflow detection 取消选中

f.Memory Management optionsAllow for memory compaction 尽量取消掉
g.Device DriversCharacter devicesHPET 必须选中

基本都是默认选中的

h.Kernel Hacking 根据需要保留必要选项即可。
基本默认

修改内核配置,确认完毕之后保存

6、编译内核

本地直接编译安装内核步骤,必须等待每一步完成:

a) 编译内核

sudo make -j
或者
sudo make -j 4

(如果内核大于1,那么加上数字编译更快如make -j 4 四核编译)
b) 编译内核模块

sudo make modules -j
或者
sudo make modules -j 4


如果编译内核报错BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
一般是系统缺少dwarves软件包导致。建议先安装,因为基本都会报错。

sudo apt-get install dwarves


如果出现错误

vim .config

进入后用

/(文件名)查找
如
/CONFIG_SYSTEM_TRUSTED_KEYS


CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
改为
CONFIG_SYSTEM_TRUSTED_KEYS=""

CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
改为
CONFIG_SYSTEM_REVOCATION_KEYS=""

c) 安装内核模块

sudo make modules_install


d) 安装内核

sudo make install


(其中可能会用到 sudo make bzlmage编译新的内核)
一般编译完sudo make modules_install可能会再次出现错误说你没有编译内核 make -j,(其实是编了的,电脑多少有点猫病)这时候要重新编译


重新编译的时候可能还会遇到错误这个时候需要用到

sudo apt install zstd

如果报了一个127的错误需要

build-essential


e)更新grub配置

sudo update-initramfs -c -k (内核名称的编号如5.15.137) 
sudo update-initramfs -c -k 5.15.137

sudo update-grub


f) 重启系统生效

sudo reboot

在编译过程中如果出现问题,去百度查找相关出错的问题的解决方法,基本都是未安装相应的依赖,安装成功后错误解决(百度和这里搜问题都能解决的)
基本安装命令

sudo apt-get install 

7、GRUB配置

重启系统后如果ubuntu没有出现界面的话,需要我们手动更新一下

sudo update-grub2
或者
sudo gedit /boot/grub/grub.cfg

查看版本

uname -a 

列出当前已经安装的内核,也已用下面的命令卸载

dpkg --get-selections|grep linux
sudo apt-get remove linux-image-2.6.24-11-generic 
#其中 linux-image-2.6.24-11-generic 为版本号,输全。

2.Linux性能优化

检查cpuidle和cpufreq是否使能

ls /sys/devices/system/cpu/

如果cpuidle使能,那么先

sudo gedit /boot/grub/grub.cfg


然后在相应的rt文件中的linux中加上 cpuidle.off=1

如果cpufreq使能亦是如此,在相应的rt文件中的linux中加上 cpufreq.off=1

通过Kernel命令行grub隔离四核处理器的4号CPU内核:
在相应的rt文件中的linux中加上 isolcpus=3

如果这两个通过指令无法关掉的话那就得去

sudo make menuconfig

中把内核配置给修改了

通过设置CPU亲和性,在隔离的CPU核上运行EcMasterDemo:

 ./EcMasterDemo -a 3

3.cysclictest实时性测试

sudo apt-get install rt-tests

安装这个工具,运行cyclictes程序进行实时性测试:

sudo cyclictest -t

通过

sudo cyclictest -t (线程数目,例如5)-p 99(抢占优先级80-99)
sudo cyclictest -t 5 -p 99
注释:运行五个线程,线程优先级为99,无线循环


cyclictest运行结果详解


T: 0     序号为0的线程
P: 0     线程优先级为0
C: 9397  计数器。线程的时间间隔每达到一次,计数器加1
I: 1000  时间间隔为1000微秒(us)
Min:     最小延时(us)
Act:     最近一次的延时(us)
Avg:    平均延时(us)
Max:    最大延时(us) 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值