Fedora 19编译内核(打BFS+BFQ+UKSM补丁)简易指南

2023-11-11 14:50

本文主要是介绍Fedora 19编译内核(打BFS+BFQ+UKSM补丁)简易指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

自定义内核显然就是开源的好处之一,不过内核编译属于高级用户(Advanced Users)的范畴,newbies慎入。下面以Fedora 19为例(Fedora 14及更高版本都是通用的内核编译方法,以后如果有变动了我会更新)。

准备工作

终端运行,

1
su-c'yum install rpmdevtools yum-utils ncurses-devel'

我的系统装在SSD上,比较小,所以我把RPM的编译主目录放在移动硬盘(/media/c/rpmbuild)上。编辑~/.rpmmacros,修改第一行为:

1
%_topdir /media/c/rpmbuild

保存退出,然后终端下运行rpmdev-setuptree,这个时候/media/c/rpmbuild会自动生成,且下面会有RPM、BUILD、BUILDROOT等文件夹。下载Fedora所用的内核源代码(不要去下kernel.org上的源码,Fedora用的内核打了大量的补丁,下载原版内核编译可能会出现问题)。

1
2
3
yumdownloader --sourcekernel --enablerepo=updates-testing
su-c'yum-builddep kernel-<version>.src.rpm'
rpm -Uvh kernel-<version>.src.rpm

是下载的内核SRPM的版本号,请相应替换之。第三条指令rpm -Uvh可能会出现一堆警告,可以忽视。
现在可以准备内核源代码了,终端下继续执行:

1
2
cd/media/c/rpmbuild/SPECS
rpmbuild -bp --target=$(uname-m) kernel.spec

下载好想要打的补丁,比如CK补丁集(BFS)、BFQ IO调度器、UKSM内存整理补丁等,基本都用下面这条指令打上这些补丁。

1
2
cd/media/c/rpmbuild/BUILD/kernel-<version>/linux-<version>/
patch -p1 </PATH_TO_PATCHES/patch-3.10-ck1

编译内核

这个时候,继续留在内核源码目录(/media/c/rpmbuild/BUILD/kernel-/linux-/),打开Makefile文件进行编辑,把”EXTRAVERSION =”这一行改一下,以便和Fedora仓库里的官方内核进行区分,比如”EXTRAVERSION = -librehat”,然后执行下面的指令。

1
2
3
cpconfigs/kernel-<version>-x86_64.config .config
makeoldconfig
makemenuconfig

第一条指令是把默认的配置复制过来(x86_64是64位PC机的配置文件),第二条make oldconfig执行后会有少数几个选项,按照自己需要选好,然后make menuconfig后就开始对内核配置进行大刀阔斧的改动吧,这里要提醒一下,一定要关掉Kernel hacking–>Kernel debugging,不然modules文件夹会超级大(默认配置下编译高达1.7G!)。此外control groups(cgroups)一定要打开,不然Fedora所用的systemd会不能工作。剩下的就是精简内核模块、缩小内核体积!编辑完毕记得Save然后Exit.

和wiki上说的不一样,毕竟咱不是内核开发者不去fedora提交rpm的补丁,不要重新去改SPECS然后rpm -bb什么的了,直接终端下运行

1
makerpm

稍等(视机器水平,大概几分钟到几十分钟)完毕后,在/media/c/rpmbuild/RPMS/x86_64(假设你也是64位机器)下会有kernel和kernel-headers的rpm包生成。用rpm指令安装之:

1
rpm -ivh <new-kernel-rpm>

准备新内核启动

反正我安装后没有给我生成initramfs镜像,也没更新GRUB2的grub.cfg文件。所以我终端下执行下面这个指令来生成initramfs镜像:

1
2
cd/boot
su-c'dracut initramfs-3.10.10-librehat.img 3.10.10-librehat'

其中3.10.10-librehat是内核的名字(/boot/vmlinuz-3.10.10-librehat),然后更新grub.cfg文件:

1
su-c'grub2-mkconfig > /boot/grub2/grub.cfg'

确保输出中新内核的vmlinuz和initramfs都找到了。现在可以重启试试新编译的内核什么效果了!!!我精简后/lib/modules/3.10.10-librehat只有30+MB(最骨感的能到20+MB)。

一切顺利,而且你打算让yum不再插手内核的升级,今后内核的升级就包在自己手动优化地编译了!那么编辑/etc/yum.conf,在exclude里加上kernel*(如果没有exclude就手动加一行),如:

1
exclude=kernel*

如此,yum update或者yum upgrade就会跳过kernel相关的rpm包了!

转载于:https://my.oschina.net/coolfire368/blog/161010

这篇关于Fedora 19编译内核(打BFS+BFQ+UKSM补丁)简易指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/390830

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点