一、获取内核源码
Linux内核官方网站为:http://www.kernel.org
或者使用git将源码clone下来(我这里使用的版本为2.6):
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
clone下来的源码目录结构如下:
其中比较重要的目录的官方描述如下:
对应的中文描述如下:
二、编译安装(环境为腾讯云的CentOS7.6,x86)
1、安装所需依赖
#安装开发工具包组
yum -y groupinstall "development tools"
#make menuconfig 文本界面窗口依赖包
yum install -y ncurses-devel
2、升级GCC版本
由于centos7.6初始gcc版本为4.8.5,而编译内核需要的最低版本为5.1.0,所以需要安装高于5.1.0版本的gcc。
yum install centos-release-scl
yum install devtoolset-7-gcc*
设置devtoolset-7 为默认的gcc编译器 :
scl enable devtoolset-7 bash
source /opt/rh/devtoolset-7/enable
再用gcc -v指令查看gcc版本可以看到已经升级到7.3.1了:
3、内核配置
查看当前内核版本:
配置内核:
#进入到解压或者clone下来的源码目录
cd linux-2.6
#使用文本菜单的方式配置内核
make menuconfig
执行后会出现如下窗口,可以根据自己的需要选择适当的配置项,如果没有特别的需求,按默认值配置即可,配置程序结束将在源码主目录生成一个.config文件,用来保存这些配置。 这里我们按照默认值来做,直接save -> exit:
出来后使用ls -al发现目录下生成了一个.config隐藏文件:
4、内核编译
执行make来编译内核,这一步会编译很久,大概三四小时左右。
#如果是多核的,可以用make -jn来加快编译速度,n为你系统的核数
make
执行完的结果如下图:
5、安装模块
安装编译好的内核模块:
make modules_install
执行完的结果如下图:
安装完毕后可以到/lib/modules目录下查看:
这里安装的内核变成了6.2.0+,这里我也不太清楚为啥,希望有大佬能解答一下。
6、安装内核
执行make install命令调用内核目录中的install.sh的shell脚本完成安装任务。
make install
执行完的结果如下图:
7、修改默认内核启动项
查看系统可用内核:
cat /boot/grub2/grub.cfg | grep menuentry
可以看到第一个就是我们编译安装好的内核:
修改开机默认使用的内核,其中下面代码中的新内核的值为menuentry后单引号的内容,即CentOS Linux (6.2.0+) 7 (Core):
grub2-set-default '新内核'
或者使用 grub2-set-default 0 设置默认使用的内核为第一个内核,因为新安装的内核默认排在第一位。
8、重启系统
reboot
使用uname -r指令查看当前内核版本,可以看到版本内核变成6.2.0+了:
三、内核开发的特点
1、内核编程时既不能访问C库也不能访问标准C头文件
内核不能链接使用标准C函数库,对于内核来说,完整的C库太大而且太低效了。但你先别急,大部分常用的C库函数都在内核中得到了实现,比如string的实现位于lib/string.c中,只需要包含<linux/string.h>内核头文件,就可以使用。
2、没有内存保护机制
内核编程时缺乏像用户空间那样的内存保护机制,如果一个用户程序试图进行一次非法的内存访问,内核就会发现这个错误,并结束整个进程。而当内核自己非法访问了内存,那么后果就很难控制了。此外,内核中的内存不分页,也就是说每用掉一个字节,物理内存就减少一个字节,所以往内核中加入新功能时需要仔细考虑。
3、不要轻易在内核中使用浮点数
在用户空间的进程进行浮点数操作时,内核会完成从整数操作到浮点操作的模式转换,内核会先捕获陷阱(catch a trap),然后着手与操作模式的转变。与用户空间不同,内核本身没那么容易陷入(cannot easily trap itself)。所以最好不要在内核中使用浮点操作。文章来源:https://www.toymoban.com/news/detail-723848.html
三、参考书籍
《Linux Kernel Development, 3rd Edition》文章来源地址https://www.toymoban.com/news/detail-723848.html
到了这里,关于Linux内核学习(包含Linux 2.6内核编译安装流程)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!