RHEL6.5内核编译
本章主要内容:
源码编译Linux内核
使用Linux内核模块
实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能
注意:
安装前确保你的硬盘可用空间大于7G,否则编译时,会因为空间不够,提示你安装不成功。另外,安装时为加快速度,把虚拟机内存要调到2.5G以上(越大越好)。
本文以RHEL6.5编译内核-kernel-3.19.8为例进行详细讲解
1、到www.kernel.org上下载相应的内核源码包
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make ,gcc, gcc-c++ ,ncurses-devel和库工具等等 。 开发工具和库
3、解压内核源码包
4、配置内核编译参数
5、编译内核
6、安装编译好的内核与模块
7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
8、重新启动系统,测试新内核的工作情况
1.编译前准备
首先查看当前系统的内核版本
[root@xuegod164 ~]# uname -r 2.6.32-431.el6.x86_64
添加一块硬盘并分区
[root@xuegod163 ~]# fdisk /dev/sdb 注:把所有的空间(20G)都给sdb1 [root@xuegod163 ~]# mkdir /sdb1/ [root@xuegod163 ~]# mkfs.ext4 /dev/sdb1 [root@xuegod163 ~]# mount /dev/sdb1/sdb1/
2.到www.kernel.org上下载相应的内核源码包
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.8.tar.xz
3. 确认你的系统中已经具备了编译软件的基本条件
也就是要安装make、gcc、gcc-c++ 、ncurses-devel和库工具等等
4. 解压内核源码包
解压内核:
将下载好的内核源代码通过xshell上传/sdb1下
[root@xuegod163 sdb1] ls /sdb1 linux-3.16.2.tar.xz [root@xuegod163 sdb1]# xz -dlinux-3.19.8.tar.xz 注:-d, --decompress forcedecompression (di:kmpres解压缩) [root@xuegod163 sdb1]# tar xflinux-3.19.8.tar [root@xuegod163 ~]# du -sh linux-3.19.8 642M linux-3.19.8
#清一下缓存
[root@xuegod63 sdb1]# reboot
5.通过图形界面配置内核编译参数,生成内核参数配置文件 .config
[root@xuegod163 sdb1]# cd/sdb1/linux-3.16.2 [root@xuegod163 linux-3.19.8]# make menuconfig #通过一个图形界面,来配置内核的参数NTFS的位置如下图
选择“File system” 然后按回车。
选择NTFS file system support 回车,然后光标下移到:NTFS write support .
[root@xuegod163 linux-3.19.8]# vim/sdb1/linux-3.19.8/.config CONFIG_NTFS_FS=m # CONFIG_NTFS_DEBUG is not set CONFIG_NTFS_RW=y [[email protected]]# vim /boot/con
fig-2.6.32-220.el6.x86_64 #搜索 NTFS,默认系统内核参数中这个一项是空着了
注:如是想查询,某个参数在哪里,可以这样,在这个界面下,输入: /
然后再输入: NTFS 就显示如下:
6. 通过修改config文件配置内核编译参数
[root@xuegod163 linux-3.19.8]# cp/boot/config-2.6.32-431.el6.x86_64 /sdb1/linux-3.19.8/.config
下面我们在复制好的.config中只增加一个功能,就是增加对NTFS读写功能。复制完.config后,执行命令:
[[email protected]]# make menuconfig
向下移动光标找到如下内容:
保存后,按下esc或选中Exit 进程退出
7.编译内核
[root@xuegod163 linux-3.19.8]# makebzImage
注:生成内核,此内核是经过压缩的内核,这里需要一段时间,取决于你的系统性能。
BUILD arch/x86/boot/bzImage
此处省略无数字节……
Kernel: arch/x86/boot/bzImage isready (#1)
8. 生成新内核的驱动模块
[root@xuegod163 linux-3.19.8]# make modules
这里也是需要一段时间
此处省略无数字节……
IHEX firmware/edgeport/down3.bin IHEX2FW firmware/whiteheat_loader.fw IHEX2FW firmware/whiteheat.fw IHEX2FWfirmware/keyspan_pda/keyspan_pda.fw IHEX2FWfirmware/keyspan_pda/xircom_pgs.fw
9. 安装编译好的内核与模块
(1)安装模块
[root@xuegod163 linux-3.19.8]# makemodules_install
这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面
此处省略无数字节
...
INSTALL /lib/firmware/whiteheat.fw INSTALL/lib/firmware/keyspan_pda/keyspan_pda.fw INSTALL/lib/firmware/keyspan_pda/xircom_pgs.fw DEPMOD 3.16.2ZZ
(2)安装新编译的系统内核
[root@xuegod163 linux-3.19.8]# makeinstall
10. 查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
[root@localhost linux-3.0.4]# vim /boot/grub/grub.conf
11. 重新启动系统,测试新内核的工作情况
注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了。
使用新内核启动系统后,查看内核版本:
[root@localhost ~]# uname �Cr
最后总结一下编译内核的步骤 :
1 . xz -d linux-3.16.2.tar.xz
2 . tar xflinux-3.16.2.tar #解压文件比较多就不加-v了
3 . make menuconfig
4 . makebzImage
5 . makemodules
6 . echo $? #为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了
7 . make modules_install
8 . make install
9 . 重启,测试
1. 内核,操作系统,软件关系图
2. 内核模块操作
内核(模块)管理命令:insmod、modinfo、modprobe……等。
模块的作用:把具体功能封装好的程序。 比如,冲电宝。可以给所有手机冲电。
3. 存放内核模块的路径
[root@xuegod163 ~]# ls /lib/modules/ 2.6.32-431.el6.x86_64 3.19.8 [root@xuegod163 ~]# cd/lib/modules/3.19.8/kernel/fs/ [root@xuegod163 fs]# cd fat/ [root@xuegod163 fat]# ls fat.ko msdos.ko vfat.ko #Linux可以直接支持FAT32文件系统
4. 模块管理命令使用
(1)插入模块 insmod
载入模块fat.ko
[root@xuegod163 fat]# pwd /lib/modules/3.19.8/kernel/fs/fat [root@xuegod163 fat]# insmod fat.ko
(2)查看当前系统中加载的模块 lsmod
[root@xuegod163 fat]# lsmod | grep fat fat 59587 0
(3)删除模块 rmmod
[root@xuegod163 fat]# rmmod fat [root@xuegod163 fat]# lsmod | grep fat
(4)更新内核对模块的配置文件depmod
[root@xuegod63 fs]# depmod
(5)查看模块之间依赖关系
[root@xuegod163 fat]# cd /lib/modules/3.19.8/ [root@xuegod163 3.19.8]# vim modules.dep
查看模块间依赖关系:如fat。从下图可以看出,vfat和msdos模块都依赖fat.ko模块
文件格式
模块的路径 : 依赖的模块
(6)查看模块信息
#modinfo 查看模块信息
[root@xuegod163 fat]# modinfo vfat filename: /lib/modules/3.19.8/kernel/fs/fat/vfat.ko author: Gordon Chaffee description: VFATfilesystem support license: GPL alias: fs-vfat srcversion: 3A2520B90FAB5DF5806E200 depends: fat intree: Y vermagic: 3.19.8 SMP mod_unload modversions
(7)插入模块 modprobe
modprobe 插入模块(可以自动解决模块之间的依赖关系,像yum可以自动解决rpm之间的依赖关系一样)
插入一个模块
[root@localhost fat]# rmmod vfat [root@localhost fat]# rmmod fat [root@localhost fat]# insmod vfat.ko insmod: error inserting 'vfat.ko': -1Unknown symbol in module [root@localhost fat]# modprobe vfat #可以成功安装 [root@localhost fat]# lsmod | grep vfat vfat 10776 0 fat 55184 1 vfat
[root@xuegod63 fs]# vim /etc/rc.local #!/bin/sh # # This script will be executed *after* allthe other init scripts. # You can put your own initialization stuffin here if you don't # want to do the full Sys V style initstuff. touch /var/lock/subsys/local modprobe fat
1安装fuse
[root@xuegod163 ~]#tar zxvffuse-2.8.3.tar.gz (1) [root@xuegod163 ~]#ls (2) [root@xuegod163 ~]#cd fuse-2.8.3 (3) [root@xuegod163 fuse-2.8.3]#./configure (4) [root@xuegod163 fuse-2.8.3]#echo $? (5) [root@xuegod163 fuse-2.8.3]#make (6 [root@xuegod163 fuse-2.8.3]#echo $? (7) [root@xuegod163 fuse-2.8.3]#makeinstall
2安装ntfs-3g
(方法同上)
3挂载
插一个NTFS格式分的U盘。然后把U盘导入到虚拟机中
[root@localhost ~]# mount -t ntfs-3g/dev/sdb1 /opt/
4实现开机自动挂载
[root@localhost ~]# vim /etc/fstab /dev/sdb1 /opt ntfs-3g defaults 0 0 [root@localhost ~]#mount �Ca #进行检查
本文到此就已经结束了,大家是否觉得内核编译其实也没有想象的复杂,和源码安装一个软件很类似,大家编译时细心一些就可以了,以上有什么不对的地方希望各位大神们多多指正。
学神-IT-教育51cto技术交流群:468845589 快来上我们公开课吧!
本文由 学神-IT-教育 1508班VIP学员 学神-IT-逍遥 同学 整理提供
本文出自 “学神IT教育-讲师MK” 博客,谢绝转载!