文章目录
一、Ubuntu内核编译1.1为何自己编译内核
一个Linux发行版诸如ubuntu、centos,有自己对应的内核linux kernel版本,譬如Ubuntu20.04的内核,这种Linux发行版的内核则又是以Linux内核为基础进行订制开发的。
一般说的“内核编译”,可以是编译Linux内核,也可以是编译多样化的Linux内核,例如ubuntu22.04的内核。无果我们使用的是ubuntu,这么最好编译ubuntu内核代码(早已多样化的Linux内核代码),而不是编译Linux内核代码,以免出现潜在的冲突。
通常来说,Linux发行版都有自己默认的Linux内核或则说“定制化的Linux内核”,它们已然优化地挺好了。为何我们还要自己去变编译一遍呢?
的确,对于大多数普通用户来说,直接使用操作系统默认提供的内核以及通过包管理器进行更新一般是最稳当和便捷的选择。默认提供的内核由发行版的维护者经过仔细测试和配置,确保与操作系统的其他组件兼容,同时也包含了一些针对安全性和稳定性的补丁。
内核编译的主要优势彰显在一些特殊需求的场景,诸如:
对于绝大多数桌面和服务器使用,使用发行版默认的内核,并通过包管理器进行更新,是保持系统稳定性和安全性的最佳方法。内核编译更多地适用于这些对系统订制有深入需求的用户,对内核有深入了解的开发者,或则一些专业领域的使用场景。
也就是说:编译内核是对早已多样化的Linux内核进行进一步地多样化,致使其在当前的硬件上得到最大的优化。(例如ubuntu22.04这个系统,好多设备都可以安装,但他的内核配置并不一定能发挥你的硬件的最大性能)
一般,Linux内核的每位大版本就会进行维护和更新,例如5.4.0-xxx,这么Ubuntu(LTS版本)这种发行版的内核也会对应进行更新。我们常用的aptupgradelinux社区,就包括这一更新。注意这和编译内核的构建操作不同。ubuntu某一个版本,例如ubuntu22.04,只会对某一个Linux内核的大版本有最好的适配(见1.23节),你若果编译内核的时侯linux kernel版本,换了另一个大版本的内核源代码,则可能会有新的适配冲突。
内核编译,只是对当前操作系统的内核进行的多样化操作。如过要对内核进行多样化编译,还要默认安装一个开发环境,做一个操作系统镜像给他人安装,则还设计操作系统镜像制做的内容,见本文第二节。
1.2Ubuntu内核源码下载1.21内核的作用
操作系统内核是计算机系统中的核心,它负责管理系统的资源、提供各类服务,以及实现用户和硬件之间的通讯。以下是内核的一些主要作用:
资源管理:内核负责管理计算机系统的各类硬件资源,包括CPU、内存、硬盘、网络插口等。它通过调度算法来决定那个进程(或任务)在某个时刻执行,以及怎样分配和释放显存。进程管理:内核负责创建、终止和调度进程。它管理进程的状态转换,分配资源,以及协调不同进程之间的通讯和同步。文件系统管理:内核提供文件系统插口,致使应用程序可以通过文件系统进行文件的读取、写入和管理。它还负责处理文件和目录的访问权限、文件锁定等问题。设备驱动程序:内核包含设备驱动程序,用于与硬件设备进行通讯。这种驱动程序容许操作系统与硬件之间进行有效的交互,包括输入输出设备、网络插口、磁盘驱动器等。系统调用插口:内核提供了系统调用插口,容许应用程序通过一组标准化的插口与内核进行通讯。这种插口包括对文件、进程、网络等的访问。显存管理:内核负责管理系统的数学显存和虚拟显存。它通过分页机制、内存映射等方法来实现进程间的显存隔离和保护。中断处理:内核负责处理硬件和软件形成的中断。硬件中断可以来自于设备的状态变化,而软件中断一般是由系统调用或异常导致的。内核须要适时地响应这种中断以确保系统正常运行。安全性和权限控制:内核施行对系统资源的访问控制,确保只有经过授权的进程才才能执行敏感操作。这包括用户身分验证、访问权限检测等功能。
总体而言,内核是操作系统的核心,它为下层应用程序提供了一个具象的插口,促使开发者可以专注于应用程序的逻辑而不用直接处理底层硬件和资源管理的细节。内核的设计和性能直接影响整个操作系统的稳定性和效率。
1.22Linux内核与ubuntu内核
Linux内核是整个操作系统的核心,Ubuntu内核是为Ubuntu操作系统进行订制的Linux内核,而Ubuntu系统是包含了Linux内核和其他软件的完整操作系统。在使用Ubuntu操作系统时,你直接与Ubuntu系统进行交互,而Ubuntu系统的核心是Ubuntu内核,而Ubuntu内核的核心是Linux内核。
Linux内核官方的源代码库房:
Additional:查询你的Ubuntu版本信息uname-a
root@CQUPTLEI:~# uname -a
Linux CQUPTLEI 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
我服务器Linux内核版本是5.4.0-169,这是2023年12月23日的一个更新。
1.23Ubuntu内核源码库房
UbuntuKernelRepositories:
这是ubuntu内核的git库房列表。
近几年Ubuntu版本对应的Linux内核版本及名称(codename):蓝色是LTS版本(目前)
Ubuntu版本内核版本代号
16.04
4.4
XenialXerus
16.10
4.8
YakketyYak
17.04
4.10
ZestyZapus
17.10
4.13
ArtfulAardvark
18.04
4.15
BionicBeaver
18.10
4.18
CosmicCuttlefish
19.04
5.0
DiscoDingo
19.10
5.3
EoanErmine
20.04
5.4
FocalFossa
20.10
5.8
GroovyGorilla
21.04
5.11
HirsuteHippo
21.10
5.13
ImpishIndri
22.04
5.15
JammyJellyfish
22.10
5.19
KarmicKoala
23.04
6.2
LuminousLorikeet
23.10
6.5
MysticMongoose
Ubuntu的版本号命名规则是按照即将版发布的年月命名,其中X表示年份(乘以2000),YY表示发布的月份。诸如,Ubuntu16.04意味着2016年4月发布的Ubuntu,Ubuntu22.10意味着2022年10月发布的Ubuntu1。因而,Ubuntu的版本号一般以.xx.04或.xx.10结尾。
后面的ubuntu内核库房的source选项下有好多版本,对应不同的平台或特点:
Linux内核版本用途
linux-unstable
该内核版本是Linux内核的开发版本,用于测试新功能和修补错误。
linux
该内核版本是Linux内核的稳定版本,用于大多数Linux发行版。
linux-lowlatency
该内核版本是Linux内核的低延后版本,用于音频和其他实时应用。
linux-raspi
该内核版本是专门为猕猴桃派设计的Linux内核版本。
linux-aws
该内核版本是专门为AmazonWebServices(AWS)设计的Linux内核版本。
linux-azure
该内核版本是专门为MicrosoftAzure云服务设计的Linux内核版本。
linux-gcp
该内核版本是专门为GoogleCloudPlatform(GCP)设计的Linux内核版本。
linux-ibm
该内核版本是专门为IBMPowerSystems设计的Linux内核版本。
linux-oracle
该内核版本是专门为OracleLinux设计的Linux内核版本。
linux-riscv
该内核版本是专门为RISC-V构架设计的Linux内核版本。
linux-starfive
该内核版本是专门为StarFive处理器设计的Linux内核版本。
linux-laptop
该内核版本是专门为电脑笔记本设计的Linux内核版本。
linux-intel-opt
该内核版本是专门为英特尔处理器设计的Linux内核版本。
linux-nvidia
该内核版本是专门为NVIDIAGPU设计的Linux内核版本。
1.3编译ubuntu内核1.31瞧瞧系统的已有内核
编译内核后,生成的文件一般储存在相应的建立目录中。以下是一些常见的生成文件和目录:
具体的路径和文件名可能会按照你的内核配置、版本和使用的工具而有所不同。在编译过程中,你可以在终端上看见输出,其中包含有关生成文件的详尽信息。
当你安装新的内核时,生成的内核映像和相关文件将被复制到/boot目录,并通过GRUB或其他引导加载程序进行配置,便于在系统启动时选择新的内核。
以下是/boot目录下一些常见的文件和它们的作用:
文件/目录作用
vmlinuz-
内核映像文件,包含操作系统内核的可执行文件。
initrd.img-
初始显存文件系统(initramfs),用于在系统引导时加载必要的模块。
System.map-
包含内核符号和地址的映射关系。
config-
内核的配置文件,记录了编译时的配置选项。
abi-
用于定义二补码插口的文件。
grub/
储存GRUB引导加载程序的相关文件。
efi/
储存EFI引导加载程序的相关文件(假如系统使用UEFI)。
lost+found/
用于储存文件系统恢复过程中找到的受损的文件和目录。
这种文件和目录在/boot中储存了与引导和内核相关的信息。它们是系统引导过程中所需的关键组件linux培训班,包括操作系统内核、引导加载程序配置文件等。
我的服务器:
每位条目的涵义:
config-5.4.0-149-generic、config-5.4.0-152-generic、config-5.4.0-169-generic:initrd.img-5.4.0-149-generic、initrd.img-5.4.0-152-generic、initrd.img-5.4.0-169-generic:System.map-5.4.0-149-generic、System.map-5.4.0-152-generic、System.map-5.4.0-169-generic:vmlinuz-5.4.0-149-generic、vmlinuz-5.4.0-152-generic、vmlinuz-5.4.0-169-generic:grub:memtest86+.bin、memtest86+.elf、memtest86+_multiboot.bin:vmlinuz、vmlinuz.old:
据悉:
/lib/modules目录包含内核模块,这种模块是内核的一部份,但不是内核本身。这种模块一般由内核启动时手动加载,便于内核可以与硬件设备进行交互。一个内核版本对应一个文件夹,文件夹的个数小于等于/boot目录下的内核版本数(boot下是已安装且能启动的内核)。
如过要指定系统使用某个版本的内核(早已安装在/boot目录下的):
可以编辑/etc/default/grub文件,编辑这个文件会更新/boot目录下的grub/文件夹下的相关配置文件。这是为了易于编辑、维护和安全,和crontab是类似的。
我用vim编辑:vim/etc/default/grub
在文件中找到GRUB_DEFAULT行,并将其值修改为所需的内核版本的菜单条目的索引。GRUB菜单的第一个内核版本索引为0,第二个为1,以这种推。
查看已安装且能启动的内核:grep-oP"menuentry'K[^']+"/boot/grub/grub.cfg
GRUB菜单中的索引0对应着“Ubuntu”条目,这是一个默认的启动项,一般对应着默认的内核版本。因为没有指定具体的内核版本号,这可能是系统当前默认的启动选项,对应着GRUB菜单中的第一个条目。
我的/etc/default/grub文件中GRUB_DEFAULT=1,也即Ubuntu,withLinux5.4.0-169-generic。
使用:uname-r可以看见系统当前使用的内核,的确这么:
root@CQUPTLEI:/boot# uname -r
5.4.0-169-generic
1.32编译新的内核
(1)打算工作
安装build-essential和其他一些编译工具。在Ubuntu系统中,你可以运行以下来安装:
sudo apt-get update
sudo apt-get install build-essential kernel-package libncurses5-dev bison flex libssl-dev
(2)获取内核源代码
默认情况下,Ubuntu发行版一般不会包含完整的Linux内核源代码。Ubuntu使用预编译的内核二补码包来简化用户的安装和升级过程。假如你想要编译内核或则对内核进行更改,你须要自动下载内核源代码。
这儿下载Ubuntu20.04(查看Ubuntu版本:lsb_release-a)的最新内核代码,上面早已说了网址。选择focallinux那一行:
点repo都会听到类似:
Get this repository:
git clone //git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/focal
自己建一个目录,克隆源码就可以了。下载内容大约2GB。
(3)
二、镜像制做
本文原创地址://gulass.cn/unhbywhybydz.html编辑:刘遄,审核员:暂无