Fedora系统编译Linux内核

简介: 编译内核时,内存至少需要,或者内存 交换内存(/)。本文以为例说明,操作如下:① (此步骤亦可省略)进入某一特定目录,以目录为例,创建交换文件()文件夹,操作如下:② 使用命令创建交换文件()。表示输出到某个文件; 表示是1兆,即块大小为1兆; 表示写入个;③ 初始化交换空间给予相应权限,操作如下:把文件转换为文件,在相应目录执行,操作如下:若在本目录下执行,亦可直接输入文件名,操作如下:启用交换空间,操作如下:若需要开机启动后自动挂载,可将其添加到文件中。开机自动挂载分区,编辑 ,末

Fedora系统编译Linux内核

前情提要

检查内存

编译内核时,内存至少需要4G,或者2G内存 +2G交换内存(Swap/Swapfile)。

增加交换内存(Swap)

本文以Swapfile为例说明,操作如下:

  • ① (此步骤亦可省略)进入某一特定目录,以var目录为例,创建交换文件(Swapfile)文件夹,操作如下:
cd /var
sudo mkdir swap
  • ② 使用dd命令创建交换文件(Swapfile)。
sudo dd if=/dev/zero of=/mountpoint/path/to/swapfile bs=1M count=2000

说明:

使用dd命令创建一个空文件;

if代表从某个文件读;

/dev/zerolinux下特有的一个0生成器;

of表示输出到某个文件;

/mountpoint 表示某个分区的挂载点;

/path/to/ 表示某个目录;

swapfile 表示要创建的文件的名称,可以随意;

of后亦可直接填写swapfile,即输出到当前文件夹的swapfile文件;

若根据本步骤,即表示在/var/swap目录下创建了一个可表示交换内存的swapfile文件;

bs=1M 表示block size是1兆,即块大小为1兆;

单位亦可以是BBytes)、KKB)、MMB);

若忽略,即默认512字节,若忽略单位,即默认单位为字节;

count=2000 表示写入8000block

即约为2GB的文件大小。

  • ③ 初始化swap交换空间
    给予Swapfile相应权限,操作如下:
sudo chmod 600 /mountpoint/path/to/swapfile
  • 把文件转换为swap文件,在相应目录执行,操作如下:
sudo mkswap /mountpoint/path/to/swapfile
  • 若在本目录下执行,亦可直接输入文件名,操作如下:
sudo mkswap swapfile
  • 启用交换空间,操作如下:
sudo swapon /mountpoint/path/to/swapfile
  • 若需要开机启动后自动挂载,可将其添加到/etc/fstab文件中。
    开机自动挂载SWAP分区,编辑 /etc/fstab,末行添加如下内容:
/path/to/swapfile    swap    swap    defaults    0    0
  • 添加如下内容亦可:
/path/to/swapfile    none    swap    sw      0    0

说明:

第一项:/path/to/swapfile,指定swap文件路径;

第二项:none,表示swap空间没有挂载点;

第三项:swap,表示一个交换空间类型;

第四项:sw,表示交换空间启用,还有一个不常用的选项noauto

第五、六项:00,表示不需要开机检查。

删除交换内存(Swap)

若删除swapfile,则必须先执行以下命令:

sudo swapoff swapfile

再执行删除文件的操作,命令如下:

sudo rm swapfile

注意

若未执行swapoff操作,而去执行执行删除文件的操作,系统则会报错,无法执行删除指令。

swapoff命令相当于是卸载了swap分区。

安装必要依赖

使用yumdnf安装编译内核所需软件,操作如下:

sudo yum install git fakeroot ncurses-devel xz zstd dracut openssl-devel bc flex bison elfutils-devel audit-libs-devel slang-devel binutils-devel zlib-static libbabeltrace-devel java-1.8.0-openjdk-devel dwarves
sudo yum groupinstall "Development Tools"

或者

sudo dnf install git fakeroot ncurses-devel xz zstd dracut openssl-devel bc flex bison elfutils-devel audit-libs-devel slang-devel binutils-devel zlib-static libbabeltrace-devel java-1.8.0-openjdk-devel dwarves## 添加用户组
sudo dnf groupinstall "Development Tools"

添加用户组并添加一个编译内核的用户,操作如下:

groupadd mockbuild
useradd -g mockbuild mockbuild

获取内核源码

  • ① 官网下载:

官网直接下载所需编译的指定版本linux内核源码压缩包,官网网址如下所示:

官网:The Linux Kernel Archives

解压缩刚刚下载好的内核压缩包,操作如下:

tar -zxf linux-<version>.tar.xz
  • git命令获取:

通过使用git命令获取linux内核源码,操作如下:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

配置内核

进入到linux内核源码文件夹,操作如下:

cd linux-<version>

正式编译内核之前,首先必须配置需要包含的模块,若对内核配置不了解,亦可复制当前内核的配置文件,操作如下:

sudo cp -v /boot/config-$(uname -r) /path/to/.config

若当前内核配置文件没有在/boot文件夹内或者/boot文件夹内未找到内核配置文件,可使用如下命令:

sudo zcat /proc/config.gz > /path/to/.config

说明:

其中的/path/to/为下载的内核源码所在的文件夹;

若已进入下载的内核源码所在的文件夹仅输入.config即可,即:

sudo cp /boot/config-$(uname -r) .config
sudo zcat /proc/config.gz > .config

使用makeconfig配置内核参数,操作如下:

sudo make menuconfig

说明:

上述命令是基于文本的菜单配置,适用性强,也可用于远程编译内核;

当然如果系统带有桌面,可以选择如下的图形界面菜单配置内核;

①如果系统是基于KDE桌面或者最新的QT,可以使用如下命令:

sudo make xconfig

②如果系统基于gtk的库,如Gnome或者xfce桌面,可以使用如下命令:

sudo make gconfig

亦可执行make allyesconfig或者make allnoconfig简单的将内核所有可配置的配置都启用或者禁用。

注意

  • 虚拟机下可能提示会因为屏幕太小而无法显示menuconfig而执行失败。
    因此,要确保虚拟机下显示面积足够。
  • 配置内核参数时可以选择启用或者禁用一些模块。
    若不了解如何选择,则默认退出即可。

若编译内核源码时由于出错或者其它原因需重新编译,则需清理之前编译结果,操作如下:

sudo make mrproper

注意

  • 如果使用LLVM/clang工具构建内核的话,可能会有如下报错:
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
   Failed to generate BTF for vmlinux
   Try to disable CONFIG_DEBUG_INFO_BTF
   make: *** [Makefile:1170: vmlinux] Error 1
  • 解决方案如下:
  • ① 安装包含pahole的软件包
  • ② 禁用掉CONFIG_DEBUG_INFO_BTF功能,可以在make menuconfig菜单中找到,按空格键取消:
Main menu
        -> Kernel hacking
                ->Compile-time checks and compiler options
                        -> Compile the kernel with debug info(DEBUG_INFO [=y])

退出menuconfig后,命令行中输入如下命令,即可开始编译:

sudo make -jX

若使用LLVM工具链编译,则需输入如下命令:

sudo make LLVM=1 -jX

若使用clang工具链编译,则需输入如下命令:

sudo make CC=clang LD=ld.bfd -jX

注:此时可以干的别的,这个过程比较慢,普通机器一般会在小时级别。

-jX即并发执行;

X即设置的CPU核数,根据CPU核数适量而定,切记不要大于CPU核数;

该命令可提高速度,且执行会耗费很长时间。

通常情况下,编译没报错,即可安装新内核。

但还需检查arch/x86/boot/bzImage文件是否已经生成,操作如下:

ls arch/x86/boot/bzImage -lh

若未生成,还需执行如下命令,以生成内核压缩镜像文件:

sudo make bzImage

注意

若此文件未生成,则make install会报错。

安装内核模块,操作如下:

sudo make modules_install

安装内核,操作如下:

sudo make install

生成initramfs文件系统

使用dracut生成initramfs文件系统,操作如下:

sudo dracut --force

更新grub配置

使用grub2命令更新grub配置,操作如下:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grubby --set-default /boot/vmlinuz-5.6.9

查看是否修改成功:

sudo grubby --default-kernel
sudo grubby --default-index
sudo grubby --info=ALL

重启系统生效

执行如下命令,重启系统,以生效所编译的内核:

sudo reboot

或者使用如下命令重启系统:

sudo init 6

重启系统时,若看到开机界面,则内核启动项里已可看到新编译的内核。

启动后,使用如下命令查看当前内核版本:

uname -a
相关文章
|
4天前
|
IDE Linux 开发工具
Linux 系统上安装
在Linux和Mac上安装Lua 5.3.0只需下载源码,解压,编译和安装。Windows用户可选择SciTE IDE或通过LuaForWindows在Github或Google Code下载安装。创建 HelloWorld.lua,使用`lua HelloWorld.lua`运行显示&quot;Hello World!&quot;。另可参考LuaDist官方推荐方式安装。
|
2天前
|
运维 Linux
CentOS系统openssh-9,你会的还只有初级Linux运维工程师的技术吗
CentOS系统openssh-9,你会的还只有初级Linux运维工程师的技术吗
|
3天前
|
监控 JavaScript Linux
Linux系统之部署Homepage个人导航页
【5月更文挑战第13天】Linux系统之部署Homepage个人导航页
21 1
|
4天前
|
监控 JavaScript 网络协议
Linux系统之安装uptime-kuma服务器监控面板
【5月更文挑战第12天】Linux系统之安装uptime-kuma服务器监控面板
14 0
|
4天前
|
NoSQL Ubuntu Linux
【操作系统】实验三 编译 Linux 内核
【操作系统】实验三 编译 Linux 内核
9 1
|
4天前
|
Linux Perl
Linux系统的文本处理
Linux系统的文本处理
|
4天前
|
Linux Windows 编译器
|
4天前
|
Linux API
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
|
4天前
|
编解码 Ubuntu Linux
|
4天前
|
Linux