linux_preempt
linux实时内核Preempt编译安装
1.准备工作
系 统 : Ubuntu16.04.6
内核版本 : Linux-4.15.0-72
目标内核 : Linux-4.19.72-rt26
下载地址 : https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/ (下载内核)
https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/ (下载补丁)
国内镜像 : https://mirrors.aliyun.com/linux-kernel/ (内核下载速度快)
安装依赖 :sudo apt-get install -y build-essential kernel-package libncurses5-dev
2. 安装实时补丁
1 | makdir rt_linux_build ##创建个文件夹用来存放编译所需文件 |
3. 拷贝系统通用内核默认内核配置
1 | cp /boot/config-4.15.0-72-generic .config |
读取写入通用内核配置项目
1 | yes '' | make oldconfig |
编译裁减内核项
1 | make menuconfig |
配置项完整内容如下:
1 | # Enable CONFIG_PREEMPT_RT |
部分内核版本编译项目存在差异,实时内核运行需要确保核心配置生效才能正常使用,内核项目的配置会对实时性造成影响,后续若是实时性不满足要求,则需要对裁减项进行深度优化,这部分是需要深层次学习的。
确保:
- General setup —> Preemption Model —> Fully Preemptible Kernel (RT) selected
- Kernel hacking —> Memory Debugging —> Check for stack overflows not selected
4.编译内核(10-30min on a modern cpu)
1
make -j `nproc` deb-pkg
5.安装内核
1
2ls ../*deb ##编译完成后会产生4个.deb结尾的安装包
sudo dpkg -i ../*.deb ##可以全部安装,也可以只安装header ,image两个包6.更改内核启动项
执行上述命令,得到类似下面结果1
sudo update-grub ##更新内核配置项
修改/etc/default/grub 文件内容,选择“boot/vmlinuz-.419.72-rt26” 第五个内核项编号项为4,修改内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
正在生成 grub 配置文件 ...
找到 Linux 镜像:/boot/vmlinuz-5.13.0-52-generic
找到 initrd 镜像:/boot/initrd.img-5.13.0-52-generic
找到 Linux 镜像:/boot/vmlinuz-5.13.0-51-generic
找到 initrd 镜像:/boot/initrd.img-5.13.0-51-generic
找到 Linux 镜像:/boot/vmlinuz-.419.72-rt26
找到 initrd 镜像:/boot/initrd.img-4.19.72-rt26
找到 Windows Boot Manager 位于 /dev/sda1@/efi/Microsoft/Boot/bootmgfw.efi
找到 Ubuntu 18.04.2 LTS (18.04) 位于 /dev/sdb2
Adding boot menu entry for UEFI Firmware Settings
完成再次执行grub更新,使修失败改生效。1
GRUB_DEFAULT="1> 4"
1
sudo update-grub
7. 重启并验证
重启后在终端命令行输入 uname -r
1 | uname -r |
注:第六步grub引导文件修改错误会导致进入系统失败,内核编译有问题也会导致进入系统失败。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mr.chen Blog!
评论