记录一次编译Fedora 32内核的过程

   2023-02-10 学习力0
核心提示:背景安装了Fedora 32,但是对发行版自带的内核不太满意,因为我想将vfio-pci驱动编译到内核里面(builtin),而不是以module的方式加载(将config里面涉及到vfio的CONFIG项目都设置为y)。然后就从 https://mirrors.aliyun.com/fedora/releases/32/Everything/s

背景

安装了Fedora 32,但是对发行版自带的内核不太满意,因为我想将vfio-pci驱动编译到内核里面(builtin),而不是以module的方式加载(将config里面涉及到vfio的CONFIG项目都设置为y)。
然后就从 https://mirrors.aliyun.com/fedora/releases/32/Everything/source/tree/Packages/k/kernel-5.6.6-300.fc32.src.rpm 下载了source rpm包。
但是参考 https://fedoraproject.org/wiki/Building_a_custom_kernel/Source_RPM 这里的方法始终不能将想要的vfio-pci built-in 到kernel中。

在这里需要对kernel.spec文件做一点小改动,其他操作流程可以参考:https://fedoraproject.org/wiki/Building_a_custom_kernel/Source_RPM

解决办法

通过make defconfig或者直接在安装好的fedora32系统的/boot/config-xxxx拷贝一份config文件,到/root目录下
然后编辑SPECS/kernel.spec文件,修改为如下:

# and now to start the build process

    %{make} %{?_smp_mflags} mrproper
    cp /root/kernel-5.6.6-x86_64.config .config

原理很简单,不需要rpmbuild过程中自动生成的config文件,而是使用我们自定义的config文件就可以了。
同时还需要将:

%{make} ARCH=$Arch olddefconfig

改为

%{make} ARCH=$Arch oldconfig

即就是不使用默认的config。
最后就可以执行rpmbuild了。其他部分的操作是可以参考:https://fedoraproject.org/wiki/Building_a_custom_kernel/Source_RPM。

以下步骤是参考自:https://www.zhangfangzhou.cn/how-to-compile-linux-kernel-make-rpm.html,仅供参考:

  1. 下载内核src rpm
https://mirrors.aliyun.com/fedora/releases/32/Everything/source/tree/Packages/k/
  1. 步骤:
    建议在docker中建立编译环境:
    安装一些依赖:
dnf install fedpkg fedora-packager rpmdevtools ncurses-devel pesign grubby

下载kernel src rpm:

yum install wget -y && wget https://mirrors.aliyun.com/fedora/releases/32/Everything/source/tree/Packages/k/kernel-5.6.6-300.fc32.src.rpm
  1. 首先建立 RPM 的打包环境目录,运行下列命令:
rpmdev-setuptree

该命令会在用户的 HOME 目录下建立 rpmbuild/{SOURCES,SPECS,BUILD,RPMS,SRPMS} 这5个目录,以及一个 .rpmmacros 文件,该文件定义了一些 rpm 打包的环境变量。

安装编译内核所需要的包,运行下列命令:

su -c 'yum-builddep kernel-<version>.src.rpm'

安装 kernel source src.rpm 包,运行下列命令:

rpm -Uvh kernel-<version>.src.rpm

准备内核源代码树

  1. 运行下列命令来建立内核源代码树:
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=`uname -m` kernel.spec

现在内核源代码树位于 ~/rpmbuild/BUILD/kernel-/linux-. 目录。

  1. 如果还需要修改内核源代码的话(可选),可按如下步骤操作:
cp -a ~/rpmbuild/BUILD/kernel-2.6.$ver/linux-2.6.$ver.$arch ~/rpmbuild/BUILD/kernel-2.6.$ver.orig
cp -a ~/rpmbuild/BUILD/kernel-2.6.$ver.orig ~/rpmbuild/BUILD/kernel-2.6.$ver.new
在 ~/rpmbuild/BUILD/kernel-2.6.$ver.new 中对 source 作修改,然后作成 patch:
cd ~/rpmbuild/BUILD
diff -uNrp kernel-2.6.x.orig kernel-2.6.x.new > ../SOURCES/linux-2.6-my-new-patch.patch

配置内核选项(可选)
如果需要修改内核的编译选项的话,按如下操作:

  1. 进入内核源代码树
cd ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/
  1. 从 configs 目录中挑选一个基于其修改的 config 文件,把它复制成内核源代码树中的 .config 文件
cp configs/<desired-config-file> .config
  1. 配置内核编译选项
make oldconfig

可选:

make menuconfig 
  1. 在新生成的 .config 文件的第一行添加一行指定硬件平台的标识(uname -i 的输出),以 # 号开头,例如:
# x86_64
  1. .config 文件复制到~/rpmbuild/SOURCES/目录下,并命名成 config-<arch>,例如 config-i686
cp .config ~/rpmbuild/SOURCES/config-<arch>

准备 spec 文件
(需要修改spec文件,将config文件的路径修改下,否则重新rpmbuild会覆盖修改后的config文件。)
进入 ~/rpmbuild/SPECS 目录,编辑 kernel.spec 文件:

  1. 定义 buildid 为一个唯一的标识,以区别不同的 kernel rpm 包。把
#% define buildid .local

改成

%define buildid .<custom_text>

注意去掉 % 和 define 之间的空格

  1. 如果之前有生成 patch ,把 patch 加到 kernel.spec 文件中。一般放在所有已有的 patch 最后,并注明注释。例如:
# cputime accounting is broken, revert to 2.6.22 version
Patch2220: linux-2.6-cputime-fix-accounting.patch
Patch9999: linux-2.6-samfw-test.patch

另外在打 patch 那一段也要补上:

ApplyPatch linux-2.6-cputime-fix-accounting.patch
ApplyPatch linux-2.6-samfw-test.patch

编译新的内核
用 rpmbuild 命令来编译 kernel rpm 包,默认的命令为:

rpmbuild -bb --target=`uname -m` kernel.spec

这个命令可能会编译好几遍 kernel,生成不同类型的内核镜像,例如支持 xen、smp 等的 kernel。可以通过添加 --without

rpmbuild -bb --with baseonly --without debug --without debuginfo --target=`uname -m` kernel.spec

编译结束后,新的 rpm 包在 ~rpmbuild/RPMS 目录下。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • [转]Fedora 15 安装与配置一览
    Fedora 15 将于2011.5.24日发布,今日离正式版发布还有4天。笨兔兔这里提前给大家支招用好Fedora 15。下面是笨兔兔在安装、配置Fedora 15 过程中的小结,希望给大家配置自己的Fedora 15 带来方便。仅供参考,如有错误,敬请指出。『一』安装介绍Fedora 15 Bet
    03-08
  • 新换的 Fedora Core Linux 桌面,来秀一秀(多
    1、桌面、终端、文件浏览器,已经设置好字体、自动挂载硬盘,不是很麻烦2、即时通讯:QQ,Skype3、firefox4、D4X、BT、电驴5、开发工具:eclipse netbeans6、openoffice 大开 word 公式文档,输出 PDF7、小企鹅输入法,支持微软双拼8、星际译王,linux 下免费
    02-10
  • Fedora 14添加RPM Fusion源
    RPM Fusion 是 Fedora 和 Red Hat 企业版的软件仓库,是由Dribble, Freshrpms 和 RPM Fusion 合并而来的。各种各样的应用程序包含在这个软件仓库中,比如MP3、未加密的DVD 、Mplayer, VLX, Xine 等多媒体应用程序使用的解码库,以及闭源的 Nvidia 和 ATI 显卡
    02-10
  • Fedora中安装VMtools步骤 vmware虚拟机安装fedo
      第一次玩Fedora的系统,通过VMware工具安装的一个虚拟机,由于公司要求尽可能的留有足够空间,所以安装的时候就没选开发环境选项。安装成功后,又要准备安装VMware--tools工具,在此记录安装的过程,以及安装过程中遇到的一些问题。一、准备工作  确保
    02-10
  • Fedora 23 配置
    刻到u盘上下好iso后准备刻录到u盘...可是查了一下只能在用一个叫dd的东西刻= =于是学了下...然而就是一句话:dd if=/path/xxx.iso of=/dev/sdx其中前面是文件,后面是盘,注意是整个盘sdx而不是什么sdx1啥的,注意这样做会格式化整个盘...请不要乱实验...。(
    02-10
  • Fedora 9安装说明 Fedor
     Fedora 9 安装手册◆准备工作硬件       硬盘空间:5G以上;       内存容量:384 M以上(256M也可以,但在分区后会提示您启用swap分区);       光盘介质:Fedora 9 安装光盘(1张DVD);设置BIOS为从光盘引导;启动计算机,将安装盘的
    02-10
  • fedora linux源代码下载
    fedora linux源代码下载
    yumdownloader --source kernel如果是下载insight就是 yumdownloader --source insight下载到的是当前目录.然后在用rpm2cpio 生成 压缩文件rpm2cpio insight-7.4.50-8.20120403cvs.fc17.src.rpm|cpio -idrpm2cpio 的使用 在 http://www.rpm.org/max-rpm/s1-rp
    02-10
  • Fedora 7系统安装配置心得(转)(有图哦)
    Fedora 7系统安装配置心得(转)(有图哦)
    计算机基本配置如下: CPU:Intel Core 2 Duo E4300 显卡:NVidia GeForce 7600GS 主板:ABit IB9(P965+ICH8) 内存2G/硬盘160G 安装时选择用户定制,加上开发环境,以防止编译时找不到相关的模块. 系统内核为默认的2.6.21-1.3194.fc7. 以下配置基于Gnome环境. 来
    02-10
  • fedora27安装DB2 Express-C 11
    首先在官网下载对应的安装包和语言包两个文件。然后通过tar -zxvf命令将下载的两个文件解压。其中一个文件解压后是名为expc的文件,进入这个文件。里面有一个名为db2setup的文件。在命令行下首先通过命令su切换到超级用户,然后通过./db2setup进入图形化界面
    02-10
  • Red Hat Linux、rhel 和 Fedora Core 以及 Cent
    Red Hat Linux、rhel 和 Fedora Core 以及 Centos 区别与联系1. Red Hat LinuxLinux是GNU/Linux的缩写,通常指各种Linux发行版的通称,Red Hat Linux是redhat最早发行的个人版本的linux, 其1。0版本于1994年11月3日发行。虽然其历史不及其它linux发行
    02-10
点击排行