• 源码编译Linux内核
• 使用Linux内核模块
• 实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能
升级内核两种方法:
1:rpm
yum
rpm -ivh 不能用Uvh U更新直接覆盖老内核
自动把新内核作为默认启动
2:src
注意事项:
安装前确保你的硬盘可用空间大于7G,否则编译时,会因为空间不够,提示你安装不成功
。另外,安装时为加快速度,把虚拟机内存要调到2.5G以上(越大越好)
执行步骤:
1、到www.kernel.org上下载相应的内核源码包
2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make ,gcc, gcc-c++ ,ncurses-devel和库工具等等 。 开发工具和库
3、解压内核源码包
4、配置内核编译参数
5、编译内核
6、安装编译好的内核与模块
7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
8、重新启动系统,测试新内核的工作情况
下面具体来看一下,在RHEL6上如何重新编译内核
1:添加一块新硬盘20G,并分区挂载
[[email protected] ~]# fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
[[email protected] ~]# mount /dev/sdb1 /sdb1
2:下载内核,并安装好编译环境
编译环境
make、gcc、gcc-c++ 、ncurses-devel和库工具等等
3:解压内核压缩包
[[email protected] sdb1]# tar xf tar -xf linux-3.10.75.tar.xz
xz -d tar -xf linux-3.10.75.tar.xz
#-d, --decompress force decompression (di:k?m?pres解压缩)
[email protected] sdb1]# du -sh tar -xf linux-3.10.75.tar.xz
Linux内核现在已经很复杂了,到底有没有人在里面放后门,没有人知道
4:配置内核编译参数 ,生成内核参数配置文件:.config
复制系统自带的内核配置到新内核中(系统自带的经过红帽的优化配置)
[[email protected] linux-3.10.75]# cp /boot/config-2.6.32-431.el6.x86_64 /sdb1/linux-3.10.75/.config
cp: overwrite `/sdb1/linux-3.16.2/.config‘? y
[[email protected] linux-3.10.75]# make menuconfig
配置内核,FILE SYSTEM-->DOS/FAT/NTFS-->NTFS 内核启用ntfs
选择“File system” 然后按回车
选择NTFS file system support 回车,然后光标下移到:NTFS write support
怎么看内核是否启用ntfs
看配置文件中ntfs相关内容
[[email protected] linux-3.10.75]# vim .config #搜索 NTFS
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
5:编译内核
[[email protected] linux-3.10.75]# make bzImage #生成内核 ,此内核是经过压缩的内核
Setup is 15516 bytes (padded to 15872 bytes).
System is 4392 kB
CRC 5be44720
Kernel: arch/x86/boot/bzImage is ready (#1)
成功
6、下面 生成新内核的驱动模块:
[[email protected] linux-3.10.75]# make modules
漫长的等待啊,比编译内核还久
7、安装编译好的内核与模块
(1)安装模块
[[email protected] linux-3.10.75]# make modules_install
这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面
此处省略无数字节
............
INSTALL /lib/firmware/keyspan_pda/xircom_pgs.fw
DEPMOD 3.10.75
(2)安装新编译的系统内核
[[email protected] linux-3.10.75]# make install
有些报错可以略过
ERROR: modinfo: could not find module vmhgfs
ERROR: modinfo: could not find module vsock
ERROR: modinfo: could not find module vmware_balloon
ERROR: modinfo: could not find module vmci
这些也有方法可以解决
你可以用 make menuconfig 进去内核编译菜单,选中 Device Drivers -> MISC devices -> VMware Balloon Driver 为 M 或者 *
其次,而这个模块在后面的版本中,已经更名为 vmw_balloon,所以 可以用下面的命令来解决:
cd /lib/modules/3.x.xx/kernel/drivers/misc #将版本号改成你自己的
ln -s vmw_balloon.ko vmware_balloon.ko #建立软连接
8、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)
[[email protected] linux-3.10.75]# vim /boot/grub/grub.conf
title Red Hat Enterprise Linux Server (3.10.75)
发现里面多了个
可以修改default=0 就可以,等于1还是之前的内核
9、重新启动系统,测试新内核的工作情况
注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了。
使用新内核启动系统后,查看内核版本:
[[email protected] ~]# uname -r
3.10.75
至此编译安装内核就ok了
————————————————————————————————————————————————————————————————————————————————————————————————————————
内核-->操作系统-->软件
内核模块操作:
模块的作用:把具体功能封装好的程序。
存放内核模块的目路径:
[[email protected] ~]# ls /lib/modules/
2.6.32-431.el6.x86_64 3.10.75
[[email protected] ~]# ls /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/fat
fat.ko msdos.ko vfat.ko
insmod:插入模块
[[email protected] fat]# insmod fat.ko
lsmod:列出当前系统模块,查看当前系统加载的模块
[[email protected] fat]# lsmod | grep fat
fat 58310 0
rmmod:删除模块
[[email protected] fat]# rmmod fat
depmod:分析可载入模块的相依性,加载删除模块让系统知道,相当于刷新
解决载入和删除模块的依赖
[[email protected] fat]# depmod # 处理依赖关系(插入删除模块后必须操作)
注:depmod 更新的配置文件,就是这个
[[email protected] fat]# vim /lib/modules/3.10.75/modules.dep
打开文件搜索相关模块可以看到他们之间的依赖关系及模块路径
modinfo:查看模块信息
[[email protected] fat]# modinfo fat
filename: /lib/modules/3.10.75/kernel/fs/fat/fat.ko
license: GPL
srcversion: 5E42099824E463D8AF16EED
depends:
intree: Y
vermagic: 3.10.75 SMP mod_unload modversions
modprobe:插入模块(可以自动解决模块之间的依赖关系,像yum可以自动解决rpm之间的依赖关系一样)
[[email protected] fat]# insmod vfat.ko #no
insmod: error inserting ‘vfat.ko‘: -1 Unknown symbol in module
[[email protected] fat]# modprobe vfat #ok
[[email protected] fat]# modprobe vfat.ko #no
FATAL: Module vfat.ko not found.
-r :modprobe -r 和rmmod一样,删除模块不能自动解决依赖关系删除
[[email protected] fat]# modprobe -r vfat
[[email protected] fat]# modprobe -r fat
开机自动加载某个模块
[[email protected] fat]# vim /etc/rc.local
添加内容:modprobe fat
也可以实现开机自动挂载
mount /dev/sdb1 /sdb1
____________________________________________________________________________
实战-编译一个NTFS内核模块,实现linux挂载NTFS文件系统
安装 fuse:
[[email protected] fuse-2.8.3]# ./configure
[[email protected] fuse-2.8.3]# make && make install
安装:ntfs-3g:
[[email protected] ntfs-3g-2011.1.15]# ./configure
[[email protected] ntfs-3g-2011.1.15]# make && make install
挂载:
插入一块ntfs的移动硬盘,把移动硬盘导入到虚拟机中
[[email protected] hgfs]# mount /dev/sdc /mnt/media
开机自动挂载:
[[email protected] media]# vim /etc/fstab
/dev/sdc /mnt/media ntfs-3g defaults 0 0