本节所讲内容:
源码编译Linux内核
使用Linux内核模块
实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能
注意事项:
安装前确保你的硬盘可用空间大于7G,否则编译时,会因为空间不够,提示你安装不成功。另外,安装时为加快速度,把虚拟机内存要调到2.5G以上(越大越好)。
RHEL7 编译内核linux-4.3.3.tar
查看系统当前的内核版本
[[email protected] ~]#uname -r
3.10.0-229.el7.x86_64
执行步骤:
1、到www.kernel.org上下载相应的内核源码包
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make ,gcc, gcc-c++ ,ncurses-devel和库工具等等 。 开发工具和库
3、解压内核源码包
4、配置内核编译参数
5、编译内核
6、安装编译好的内核与模块
7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
8、重新启动系统,测试新内核的工作情况
下面具体来看一下,在RHEL7上如何重新编译内核,并升级到linux-4.3.3.tar的详细步骤:
添加一块硬盘20G,并分区:
[[email protected] ~]#fdisk /dev/sdb #把所有的空间都给sdb1 20G
[[email protected] ~]#mkdir /sdb1 #创建一个挂载点
[[email protected] ~]#mkfs.xfs /dev/sdb1 #对分区进行格式化
[[email protected] ~]#mount /dev/sdb1 /sdb1/ #挂载
1、 到www.kernel.org上下载相应的内核源码包
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.3.3.tar.xz
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make、gcc、gcc-c++ 、ncurses-devel和库工具等等
确认的方式:
[[email protected] ~]# rpm-qa | grep make
make-3.82-21.el7.x86_64
automake-1.13.4-3.el7.noarch
[[email protected] ~]# rpm -qa| grep gcc
gcc-gfortran-4.8.3-9.el7.x86_64
libgcc-4.8.3-9.el7.x86_64
gcc-c++-4.8.3-9.el7.x86_64
gcc-4.8.3-9.el7.x86_64
[[email protected] ~]# rpm-qa | grep gcc-c++
gcc-c++-4.8.3-9.el7.x86_64
[[email protected] ~]# rpm-qa | grep ncurses-devel
发现ncurses-devel没有安装
[[email protected] ~]# yum-y install ncurses-devel
3、解压内核源码包
解压内核:
将下载好的内核源代码通过xshell上传/sdb1下
[[email protected] ~]# cd/sdb1/
[[email protected] sdb1]#xz -d linux-4.3.3.tar.xz
[[email protected] sdb1]#tar -xf linux-4.3.3.tar
[[email protected] sdb1]#du -sh linux-4.3.3 #查看总的源代码为694M
694M linux-4.3.3
Linux内核现在已经很复杂了,到底有没有人在里面放后门,没有人知道。
清一下缓存
[[email protected] sdb1]#free -m
total used free shared buff/cache available
Mem: 3939 569 1422 9 1947 3059
Swap: 2047 0 2047
[[email protected] sdb1]#echo 3 > /proc/sys/vm/drop_caches
[[email protected] sdb1]#free -m
total used free shared buff/cache available
Mem: 3939 531 3235 9 172 3210
Swap: 2047 0 2047
#或者,reboot重启一样能清空缓存
4、配置内核编译参数 ,生成内核参数配置文件:.config
[[email protected] sdb1]#cd linux-4.3.3/
[[email protected]]# make menuconfig #通过一个图形界面,来配置内核的参数
NTFS的位置如下图
选择“Filesystem” 然后按回车。
选择NTFSfile system support 回车,然后光标下移到:NTFS write support .
判断配置结果是否支持NTFS的读写功能
[[email protected] linux-4.3.3]# vim/sdb1/linux-4.3.3/.config
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
查看一下系统自带的内核能不能支持
[[email protected]]# vim /boot/config-3.10.0-229.el7.x86_64
扩展:
如是想查询,某个参数在哪里,可以这样,在这个界面下,输入: /
输入要搜索的内容
编译一个真正可用的内核
[[email protected] linux-4.3.3]#cp /boot/config-3.10.0-229.el7.x86_64 /sdb1/linux-4.3.3/.config
下面我们在复制好的.config中只增加一个功能,就是增加对NTFS读写功能。复制完.config后,执行命令:
[[email protected] linux-4.3.3]#pwd
/sdb1/linux-4.3.3
[[email protected]]# make menuconfig
选择“Filesystem” 然后按回车。
选择NTFSfile system support 回车,然后光标下移到:NTFS write support .
保存内核配置信息
保存完,退出
5、编译内核
[[email protected] linux-4.3.3]#make bzImage #生成内核 ,此内核是经过压缩的内核
这里需要一段时间,取决于你的系统性能。
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
此处省略无数字……
如果安装的过程中报错openssl……
yum -y install openssl-devel
6、下面 生成新内核的驱动模块:
[[email protected] linux-4.3.3]# make modules
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CHK include/generated/bounds.h
这里也是需要一段时间
此处省略无数字节……
7、安装编译好的内核与模块
1)安装模块
[[email protected] linux-4.3.3]#make modules_install
这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面
此处省略无数字节
...
2)安装新编译的系统内核
[[email protected] linux-4.3.3]#make install
8、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
[[email protected] ~]# vim /boot/grub2/grub.cfg
设置系统启动时默认的等待时间
配置好的系统内核
如何配置默认启动的内核
方法:只需要把内核相关的配置信息调换位置,默认启动的内核配置信息放到最上面
8、重新启动系统,测试新内核的工作情况
注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了ZZ。
使用新内核启动系统后,查看内核版本:
[[email protected] ~]# uname –r
最后总结一下编译内核的步骤:
xz -d linux-4.3.3.tar.xz
tar xf linux-4.3.3.tar #解压文件比较多就不加-v了
make menuconfig
make bzImage
make modules
echo $?
为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了
make modules_install
make install
重启,测试
学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589