1.编译内核的方法
1.1下载linux内核源码的地址
常用的网址:Index of /pub/linux/kernel/https://mirrors.edge.kernel.org/pub/linux/kernel/
国内镜像网址:
http://mirror.bjtu.edu.cn/kernel/linux/kernel/ http://mirror.bjtu.edu.cn/kernel/linux/kernel/
Index of /kernel/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /kernel/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。http://mirror.tuna.tsinghua.edu.cn/kernel/
1.2下载RT patch补丁的网址
Index of /pub/linux/kernel/projects/rt/https://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 setup→Preemption Model 选择 FULL RT
b.General setup→Timers subsystem 选中 High Resolution Timer Support
c.Processor Type and features→Multi-core scheduler support 取消选中
d.Power management and ACPI options 保留 APCI 和 Power Management Timer Support,其它都取消选中
e.General architecture-dependent options→Stack Protector buffer overflow detection 取消选中
f.Memory Management options→Allow for memory compaction 尽量取消掉
![](https://img-blog.csdnimg.cn/10ffe29ee56c4eccb2484fc88b591184.png)
g.Device Drivers→Character devices→HPET 必须选中
基本都是默认选中的
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)