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

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文