本节所讲内容:

      源码编译Linux内核

      使用Linux内核模块

      实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能

 

注意事项:

安装前确保你的硬盘可用空间大于7G,否则编译时,会因为空间不够,提示你安装不成功。另外,安装时为加快速度,把虚拟机内存要调到2.5G以上(越大越好)。

 

RHEL7 编译内核linux-4.3.3.tar

 

查看系统当前的内核版本

[root@xuegod69 ~]#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,并分区:

[root@xuegod69 ~]#fdisk /dev/sdb                                   #把所有的空间都给sdb1   20G

[root@xuegod69 ~]#mkdir /sdb1                                #创建一个挂载点

[root@xuegod69 ~]#mkfs.xfs /dev/sdb1                            #对分区进行格式化

[root@xuegod69 ~]#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和库工具等等

确认的方式:

[root@xuegod69 ~]# rpm-qa | grep make

make-3.82-21.el7.x86_64

automake-1.13.4-3.el7.noarch

[root@xuegod69 ~]# 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

[root@xuegod69 ~]# rpm-qa | grep gcc-c++

gcc-c++-4.8.3-9.el7.x86_64

[root@xuegod69 ~]# rpm-qa | grep ncurses-devel

 

发现ncurses-devel没有安装

[root@xuegod69 ~]# yum-y install ncurses-devel

 

3、解压内核源码包

解压内核:

将下载好的内核源代码通过xshell上传/sdb1下

[root@xuegod69 ~]# cd/sdb1/

[root@xuegod163 sdb1]#xz -d linux-4.3.3.tar.xz

[root@xuegod69 sdb1]#tar -xf  linux-4.3.3.tar

[root@xuegod69 sdb1]#du -sh linux-4.3.3            #查看总的源代码为694M

694M      linux-4.3.3

 

Linux内核现在已经很复杂了,到底有没有人在里面放后门,没有人知道。

 

清一下缓存

[root@xuegod69 sdb1]#free -m

              total        used        free      shared buff/cache   available

Mem:           3939         569        1422           9        1947        3059

Swap:          2047           0        2047

[root@xuegod69 sdb1]#echo 3 > /proc/sys/vm/drop_caches

[root@xuegod69 sdb1]#free -m

              total        used        free      shared buff/cache   available

Mem:           3939         531        3235           9         172        3210

Swap:          2047           0        2047

 

#或者,reboot重启一样能清空缓存

 

4、配置内核编译参数 ,生成内核参数配置文件:.config

[root@xuegod69 sdb1]#cd linux-4.3.3/

[root@xuegod69linux-4.3.3]# make menuconfig   #通过一个图形界面,来配置内核的参数

NTFS的位置如下图

wKioL1Z0IM6B_8DhAAGl3-X6sDE534.png

 

选择“Filesystem”  然后按回车。

wKiom1Z0IKvwdfk8AAHPQYmw3hY860.png

 

选择NTFSfile system support  回车,然后光标下移到:NTFS write support .

wKioL1Z0IJDyhAjdAAE-dJxfdZo240.png

 

wKioL1Z0IHSD02aJAAK6FycxVwE470.png

 

判断配置结果是否支持NTFS的读写功能

[root@xuegod69 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

 

查看一下系统自带的内核能不能支持

[root@xuegod69linux-4.3.3]# vim /boot/config-3.10.0-229.el7.x86_64

wKioL1Z0IEvyFP9dAABcVhFRiDA676.png

 

扩展:

如是想查询,某个参数在哪里,可以这样,在这个界面下,输入: /

wKiom1Z0ICWSJ--CAAGnuKuKa4k880.png

输入要搜索的内容

wKiom1Z0IAuhnN94AABqM6SG_ok594.png

wKioL1Z0H_ihjV0BAAE07RdlZlM544.png

 

编译一个真正可用的内核

[root@xuegod69 linux-4.3.3]#cp /boot/config-3.10.0-229.el7.x86_64 /sdb1/linux-4.3.3/.config

下面我们在复制好的.config中只增加一个功能,就是增加对NTFS读写功能。复制完.config后,执行命令:

[root@xuegod69 linux-4.3.3]#pwd

/sdb1/linux-4.3.3

 

[root@xuegod69linux-4.3.3]# make menuconfig  

wKiom1Z0H9DA9IvfAAGj2oJ3fNg916.png

 

选择“Filesystem”  然后按回车。

wKioL1Z0H7uRnwfeAAHPdmjC1G0357.png

 

选择NTFSfile system support  回车,然后光标下移到:NTFS write support .

wKiom1Z0H5OSbhIhAAE9wf0Y6-w004.png

 

wKioL1Z0H4PxS64UAAFcv1co2b8293.png

保存内核配置信息

wKioL1Z0H2SQH-_mAAFbZmqrmh0006.png

保存完,退出

wKiom1Z0HznTeKPPAAFhf1kXfls895.png

5、编译内核

[root@xuegod69 linux-4.3.3]#make bzImage               #生成内核       ,此内核是经过压缩的内核

这里需要一段时间,取决于你的系统性能。

HOSTCC  scripts/kconfig/conf.o

  HOSTLD scripts/kconfig/conf

此处省略无数字……

 

如果安装的过程中报错openssl……

yum  -y install   openssl-devel

 

6、下面 生成新内核的驱动模块:

[root@xuegod69 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)安装模块

[root@xuegod69 linux-4.3.3]#make modules_install

这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面

此处省略无数字节

...

2)安装新编译的系统内核

[root@xuegod69 linux-4.3.3]#make install

 

8、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)

[root@localhost ~]# vim /boot/grub2/grub.cfg

设置系统启动时默认的等待时间

wKioL1Z0HxHTlwxpAAB3Rbx7axQ721.png

 

配置好的系统内核

wKiom1Z0Huqz-J-2AAGz5ykb2F0973.png

 

如何配置默认启动的内核

方法:只需要把内核相关的配置信息调换位置,默认启动的内核配置信息放到最上面

 

8、重新启动系统,测试新内核的工作情况

注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了ZZ。

 

使用新内核启动系统后,查看内核版本:

[root@localhost ~]# 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