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 selected4.编译内核(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!
 评论





