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
相关文章
|
10天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
129 78
|
14天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
10天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
64 13
|
21天前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
21天前
|
存储 缓存 网络协议
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
|
22天前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
22天前
|
缓存 监控 网络协议
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####
|
25天前
|
负载均衡 算法 Linux
深入探索Linux内核调度机制:公平与效率的平衡####
本文旨在剖析Linux操作系统内核中的进程调度机制,特别是其如何通过CFS(完全公平调度器)算法实现多任务环境下资源分配的公平性与系统响应速度之间的微妙平衡。不同于传统摘要的概览性质,本文摘要将直接聚焦于CFS的核心原理、设计目标及面临的挑战,为读者揭开Linux高效调度的秘密。 ####
34 3
|
11天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
29 0
|
22天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。