CentOS下编译Linux内核_centos编译内核-程序员宅基地

技术标签: Linux内核  linux  

前言

编译内核是一项很简单的事情,但却是进入Linux内核世界的第一步,想要开发内核代码,想要了解内核的运行机制,第一步就是编译Linux内核,以下是在centos7.5环境下编译内核的具体流程。

1、下载内核

内核的源码的官方网站为The Linux Kernel Archives,在此网站下载最新内核源码。

2、解压内核源码

[root@rt7_node03 src]# tar xvf linux-5.16.14.tar.xz -C /usr/src/
[root@rt7_node03 src]# ln -sv linux-5.16.14 linux
'linux' -> 'linux-5.16.14'
[root@rt7_node03 tmp]# cd /usr/src/
[root@rt7_node03 src]# ls
debug  kernels  linux  linux-5.16.14

3、配置依赖的环境

[root@rt7_node03 linux]# yum groupinstall Development Tools
[root@rt7_node03 linux]# yum install ncurses-devel
[root@rt7_node03 linux]# yum install elfutils-libelf-devel-0.176-5.el7.x86_64
[root@rt7_node03 linux]# yum install openssl-devel
[root@rt7_node03 linux]# yum install bc-1.06.95-13.el7.x86_64

 在进行编译的时候提供依赖的文件,我当前的环境是系统版本为CentOS7.5,为最小化安装,实际情况根据编译的时候提示缺少了哪些文件,安装相应的软件包即可。

4、进入源码目录,使用make menuconfig开启菜单选项,手动选择内核功能

[root@rt7_node03 linux]# make menuconfig
  UPD     scripts/kconfig/mconf-cfg
  HOSTCC  scripts/kconfig/mconf.o
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
  HOSTCC  scripts/kconfig/lxdialog/inputbox.o
  HOSTCC  scripts/kconfig/lxdialog/menubox.o
  HOSTCC  scripts/kconfig/lxdialog/textbox.o
  HOSTCC  scripts/kconfig/lxdialog/util.o
  HOSTCC  scripts/kconfig/lxdialog/yesno.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/mconf

配置完成后会生成.config的隐藏文件,如果不知道该开启哪些功能也可以直接选用当前系统的配置文件,这里直接使用当前系统的配置文件。

[root@rt7_node03 linux]# cp /boot/config-3.10.0-514.el7.x86_64 ./.config

5、编译内核

[root@rt7_node03 linux]# make -j 8   # "-j 8" 代表使用8颗cpu同事编译,这里可根据实际情况而定
/usr/src/linux-5.16.14/Makefile:661: include/config/auto.conf: No such file or directory
/usr/src/linux-5.16.14/Makefile:709: include/config/auto.conf.cmd: No such file or directory
  SYNC    include/config/auto.conf.cmd
  HOSTCC  scripts/kconfig/conf.o
  HOSTLD  scripts/kconfig/conf
...

 此步骤会对.config文件中的每一个选项再次确认,全部确认即可(我这里是8颗cpu同时在编译大概需要二十多分钟,如果cpu少的话,时间会更久一些)

6、安装模块

[root@rt7_node03 linux]# make modules_install
...
  SIGN    /lib/modules/5.16.14/kernel/sound/usb/misc/snd-ua101.ko
  INSTALL /lib/modules/5.16.14/kernel/sound/usb/snd-usb-audio.ko
  SIGN    /lib/modules/5.16.14/kernel/sound/usb/snd-usb-audio.ko
  INSTALL /lib/modules/5.16.14/kernel/sound/usb/snd-usbmidi-lib.ko
  SIGN    /lib/modules/5.16.14/kernel/sound/usb/snd-usbmidi-lib.ko
  INSTALL /lib/modules/5.16.14/kernel/sound/usb/usx2y/snd-usb-us122l.ko
  SIGN    /lib/modules/5.16.14/kernel/sound/usb/usx2y/snd-usb-us122l.ko
  INSTALL /lib/modules/5.16.14/kernel/sound/usb/usx2y/snd-usb-usx2y.ko
  SIGN    /lib/modules/5.16.14/kernel/sound/usb/usx2y/snd-usb-usx2y.ko
  INSTALL /lib/modules/5.16.14/kernel/virt/lib/irqbypass.ko
  SIGN    /lib/modules/5.16.14/kernel/virt/lib/irqbypass.ko
  DEPMOD  /lib/modules/5.16.14

 安装完成后在/lib/modules/目录下会生成一个同内核版本号的目录,目录下便是新内核的模块。

7、安装内核

[root@rt7_node03 linux]# make install
sh ./arch/x86/boot/install.sh 5.16.14 \
	arch/x86/boot/bzImage System.map "/boot"
[root@rt7_node03 linux]# 

安装完后会在/boot目录下生成新的内核文件。

[root@rt7_node03 linux]# ll /boot/
total 187028
lrwxrwxrwx  1 root root       24 Mar 23 16:32 System.map -> /boot/System.map-5.16.14
-rw-------. 1 root root  3113253 Nov 23  2016 System.map-3.10.0-514.el7.x86_64
-rw-r--r--  1 root root  4659281 Mar 23 16:32 System.map-5.16.14
-rw-r--r--  1 root root  4659281 Mar 23 16:25 System.map-5.16.14.old
-rw-r--r--. 1 root root   137696 Nov 23  2016 config-3.10.0-514.el7.x86_64
drwxr-xr-x. 2 root root       27 Nov  7  2018 grub
drwx------. 6 root root      111 Mar 23 16:34 grub2
-rw-------. 1 root root 48321021 Nov  7  2018 initramfs-0-rescue-33c42a62363749ea9b8fa6116acbeb3e.img
-rw-------. 1 root root 20732112 Nov  7  2018 initramfs-3.10.0-514.el7.x86_64.img
-rw-------. 1 root root 18546695 Nov  7  2018 initramfs-3.10.0-514.el7.x86_64kdump.img
-rw-------  1 root root 62203659 Mar 23 16:34 initramfs-5.16.14.img
-rw-r--r--. 1 root root   613751 Nov  7  2018 initrd-plymouth.img
-rw-r--r--. 1 root root   277953 Nov 23  2016 symvers-3.10.0-514.el7.x86_64.gz
lrwxrwxrwx  1 root root       21 Mar 23 16:32 vmlinuz -> /boot/vmlinuz-5.16.14
-rwxr-xr-x. 1 root root  5392080 Nov  7  2018 vmlinuz-0-rescue-33c42a62363749ea9b8fa6116acbeb3e
-rwxr-xr-x. 1 root root  5392080 Nov 23  2016 vmlinuz-3.10.0-514.el7.x86_64
-rw-r--r--  1 root root  8720224 Mar 23 16:32 vmlinuz-5.16.14
-rw-r--r--  1 root root  8720224 Mar 23 16:25 vmlinuz-5.16.14.old

新内核会自动写入到引导文件中,直接重启系统,在选择内核的界面选中新的内核即可。

[root@rt7_node03 linux]# cat /boot/grub2/grub.cfg 
...
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (5.16.14) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-bc95c848-a340-412c-92f1-09f6a8ed94ec' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod xfs
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  f0b3417a-c9b1-4d04-9c2a-77ea4a0abb96
	else
	  search --no-floppy --fs-uuid --set=root f0b3417a-c9b1-4d04-9c2a-77ea4a0abb96
	fi
	linux16 /vmlinuz-5.16.14 root=/dev/mapper/cl-root ro biosdevname=0 net.ifnames=0 console=ttyS0,115200n8 LANG=en_US.UTF-8
	initrd16 /initramfs-5.16.14.img
}

...

 

 7、验证新内核版本。

[root@rt7_node03 linux]# uname -a
Linux rt7_node03 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@rt7_node03 linux]# uname -a
Linux rt7_node03 5.16.14 #1 SMP PREEMPT Wed Mar 23 15:56:47 CST 2022 x86_64 x86_64 x86_64 GNU/Linux

内核已升到5.16.14

总结

这个实验只是体验了内核编译的过程,并未修改内核的源码,后续将对内核源码进行解读,并插入自己的内核代码,将自己的内核代码运行在操作系统中。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zyqash/article/details/123686991

智能推荐

Go语言进阶之路(二):字符串和指针_go string 和指针-程序员宅基地

文章浏览阅读3.6k次。上一篇文章《Go语言进阶之路(一):变量、类型、数组、切片、字典和结构体》我们学习了Go语言基础的一些变量和条件控制语句,结构体等。这一篇主要学习一下Go语言中的字符串和指针。_go string 和指针

javaFX初探(灯光)_javafx ambientlight-程序员宅基地

文章浏览阅读1.6k次。本章介绍javaFX 3D库的的Light API。Light也是场景图中的一个节点,如果场景中灯光的集合是空的话,那么就会提供一个默认的灯光。每个灯光都包含一个节点的集合,如果集合没有包含节点,那么场景中所有的节点都会被灯光影响,如果集合中包含一个父节点,那么所有的子节点都会产生影响。Light与3D图形和它的材料的几何图像相互作用就会产生渲染的结果,我们有两种类型的光源: Am_javafx ambientlight

汇编语言中乘法指令详解(IMUL:有符号乘指令,MUL:无符号乘指令)_imul指令-程序员宅基地

文章浏览阅读2.3w次,点赞21次,收藏64次。1、有符号乘指令(1)双操作数的有符号乘指令语句格式 :IMUL OPD ,OPS功 能 :(OPD)*(OPS)---->OPD其中OPD可为16/32的寄存器,OPS可为同类型的寄存器、存储器操作数或立即数。(2)3个操作数的有符号乘指令语句格式 :IMUL OPD ,OPS, N功 能 :(OPS*N)----->OPD..._imul指令

Oracle CLOB 类型字段 内容过长保存失败等问题解决方案_preparedstatement inset clob 类型 保存不上-程序员宅基地

文章浏览阅读866次。出现可能的错误:1.java.sql.SQLException: ORA-006002.数据库连接关闭.....比如使用的是Mybatis-plus ,用常规的保存时会保存失败需要使用XML SQL插入数据即可<insert id="entityClobSave" parameterType="com.csdn.Entity"> declare c_clob CLOB := #{component}; b_clob CLOB ._preparedstatement inset clob 类型 保存不上

hive学习笔记之四:分区表-程序员宅基地

文章浏览阅读373次,点赞4次,收藏4次。笔者已经把面试题和答案整理成了面试专题文档《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!链图片转存中…(img-4xkqGpj1-1712104936689)][外链图片转存中…(img-6VtfOlP7-1712104936689)][外链图片转存中…(img-WoiUrEg2-1712104936690)][外链图片转存中…(img-W72fxn2J-1712104936690)]

数字图像处理使用计算机对,数字图像处理的应用现状及发展方向-程序员宅基地

文章浏览阅读5.6k次。随着计算机技术的不断发展,数字图像处理技术的应用也愈发广阔。图像是人们接受、表达、传递信息的快捷方式,通过计算机程序的运用,将图像用数字的形式表现出来,可以更加全面的控制图像处理,在全球各个尖端领域都有发展的前景。【关键词】数字 图像处理 计算机技术1 数字图像处理技术的优点数字图像处理是指利用数字硬件与计算机,将图像信息转换为电子信号,进行相应的数学运算,用以提高图像的实用性。数字图像处理精确度..._谈谈你对数字图像处理课程的理解,及其数字图像处理用途和使用场合的认识

随便推点

kettle-基本使用_kettle箭头-程序员宅基地

文章浏览阅读621次。Kettle 背景知识 – ETL 抽取(Extract):一般抽取过程需要连接到不同的数据源,以便为随后的步骤提供数据。这一部分看上去简单而琐碎,实际上它是 ETL 解决方案的成功实施的一个主要障碍。 转换(Transform):任何对数据的处理过程都是转换。这些处理过程通常包括(但不限于)下面一些操作:移动数据根据规则验证数据数据内容和数据结构的修改将多个数据源的数据集成 根据处理后的..._kettle箭头

python输入两个数值区间若能合并区间_【python-leetcode57-区间合并】插入区间-程序员宅基地

文章浏览阅读719次。问题描述:给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例2:输入: intervals = [[1,2],[3,5],[6,7],[8,10],[..._python输入两个数值区间后,若能合并区间

IDM免费安装注册使用,两步注册成功_idm注册-程序员宅基地

文章浏览阅读5.6w次,点赞170次,收藏556次。IDM是指Internet Download Manager,是一款功能强大的下载工具。它可以帮助用户加速下载速度,支持多种下载协议,如HTTP、HTTPS、FTP和MMS等,还可以在下载过程中恢复意外中断的任务。IDM拥有简洁明了的界面,易于使用。但是idm目前处于收费状态并且价格不太友好,希望本次免费注册教程能够为有需要的人带来帮助。_idm注册

SM4国密算法原理及python代码实现_根据sm4_s计算sm4_sbox_t-程序员宅基地

文章浏览阅读6.6k次,点赞13次,收藏54次。SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。_根据sm4_s计算sm4_sbox_t

DMA映射 dma_addr_t-程序员宅基地

文章浏览阅读617次。DMA映射一个DMA映射是要分配的DMA缓冲区与为该缓冲区生成的、设备可访问地址的组合。DMA映射建立了一个新的结构类型——dma_addr_t来表示总线地址。dma_addr_t类型的变量对驱动程序是不透明的, 唯一允许的操作是将它们传递给DMA支持例程以及设备本身。根据DMA缓冲区期望保留的时间长短,PCI代码有两种DMA映射: 1) 一致性映射; 2) 流式DMA映射(推荐)。..._dma_addr_t

XSS跨站脚本攻击漏洞_小明是公司的开发工程师,发现公司网站存在xss漏洞,通过修改javascript代码进-程序员宅基地

文章浏览阅读1k次。XSS(跨站脚本攻击)是一种常见的网络安全漏洞,它允许攻击者在网站中植入恶意的脚本代码,当其他用户访问该网站时,这些脚本代码会在用户的浏览器中执行。这可能会导致严重的安全后果,比如窃取用户的敏感信息,欺骗用户,或者在用户的浏览器中执行恶意操作。XSS漏洞通常出现在网站中输入数据未经过滤或者不当过滤的情况下,攻击者可以通过向网站发送带有恶意脚本的数据,使得脚本在用户的浏览器中执行。在反射型XSS中,攻击者向网站发送一个带有恶意脚本的URL,当其他用户点击该URL时,恶意脚本就会在用户的浏览器中执行。_小明是公司的开发工程师,发现公司网站存在xss漏洞,通过修改javascript代码进

推荐文章

热门文章

相关标签