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
相关文章
|
1月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
140 3
Linux系统禁用swap
|
1月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
187 3
|
2月前
|
安全 网络协议 Linux
深入理解Linux内核模块:加载机制、参数传递与实战开发
本文深入解析了Linux内核模块的加载机制、参数传递方式及实战开发技巧。内容涵盖模块基础概念、加载与卸载流程、生命周期管理、参数配置方法,并通过“Hello World”模块和字符设备驱动实例,带领读者逐步掌握模块开发技能。同时,介绍了调试手段、常见问题排查、开发规范及高级特性,如内核线程、模块间通信与性能优化策略。适合希望深入理解Linux内核机制、提升系统编程能力的技术人员阅读与实践。
257 1
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
162 0
Linux系统初始化脚本
|
2月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
155 18
|
1月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
152 1
|
1月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
621 1
|
2月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
999 10
|
2月前
|
安全 Linux 数据安全/隐私保护
为Linux系统的普通账户授予sudo访问权限的过程
完成上述步骤后,你提升的用户就能够使用 `sudo`命令来执行管理员级别的操作,而无需切换到root用户。这是一种更加安全和便捷的权限管理方式,因为它能够留下完整的权限使用记录,并以最小权限的方式工作。需要注意的是,随意授予sudo权限可能会使系统暴露在风险之中,尤其是在用户不了解其所执行命令可能带来的后果的情况下。所以在配置sudo权限时,必须谨慎行事。
399 0