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

相关文章

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖