码迷,mamicode.com
首页 > 系统相关 > 详细

linux-编译内核和内核模块操作

时间:2015-08-18 10:15:15      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:

•     源码编译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,并分区挂载
    [root@localhost ~]# fdisk /dev/sdb
    mkfs.ext4 /dev/sdb1
    [root@localhost ~]# mount /dev/sdb1 /sdb1
2:下载内核,并安装好编译环境
    编译环境
        make、gcc、gcc-c++ 、ncurses-devel和库工具等等
3:解压内核压缩包
    [root@localhost 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解压缩)

    root@localhost sdb1]# du -sh tar -xf linux-3.10.75.tar.xz
   
    Linux内核现在已经很复杂了,到底有没有人在里面放后门,没有人知道

4:配置内核编译参数 ,生成内核参数配置文件:.config
    复制系统自带的内核配置到新内核中(系统自带的经过红帽的优化配置)
    [root@pagoda63 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

   [root@pagoda63 linux-3.10.75]# make menuconfig
    配置内核,FILE SYSTEM-->DOS/FAT/NTFS-->NTFS  内核启用ntfs
    选择“File system”  然后按回车
    选择NTFS file system support  回车,然后光标下移到:NTFS write support

    怎么看内核是否启用ntfs
        看配置文件中ntfs相关内容
[root@pagoda63 linux-3.10.75]# vim .config  #搜索 NTFS
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y
    
       
5:编译内核
[root@pagoda63 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、下面 生成新内核的驱动模块:
[root@pagoda63 linux-3.10.75]# make modules

漫长的等待啊,比编译内核还久

7、安装编译好的内核与模块
    (1)安装模块
        [root@pagoda63 linux-3.10.75]# make modules_install
    这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面
    此处省略无数字节
       
    ............
     INSTALL /lib/firmware/keyspan_pda/xircom_pgs.fw
      DEPMOD  3.10.75
        

    (2)安装新编译的系统内核
        [root@pagoda63 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菜单(为了确认你是不是真的把内核安装好了)
    [root@pagoda63 linux-3.10.75]# vim /boot/grub/grub.conf 
    title Red Hat Enterprise Linux Server (3.10.75)
     发现里面多了个
    可以修改default=0 就可以,等于1还是之前的内核

9、重新启动系统,测试新内核的工作情况
注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了。
    使用新内核启动系统后,查看内核版本:
     [root@pagoda63 ~]# uname -r
     3.10.75
至此编译安装内核就ok了

————————————————————————————————————————————————————————————————————————————————————————————————————————
内核-->操作系统-->软件

内核模块操作:
    模块的作用:把具体功能封装好的程序。
    存放内核模块的目路径:
        [root@pagoda63 ~]# ls /lib/modules/
        2.6.32-431.el6.x86_64  3.10.75
    [root@pagoda63 ~]# ls /lib/modules/2.6.32-431.el6.x86_64/kernel/fs/fat
    fat.ko  msdos.ko  vfat.ko

insmod:插入模块
    [root@pagoda63 fat]# insmod fat.ko

lsmod:列出当前系统模块,查看当前系统加载的模块
    [root@pagoda63 fat]# lsmod | grep fat
    fat                    58310  0

rmmod:删除模块
    [root@pagoda63 fat]# rmmod fat

depmod:分析可载入模块的相依性,加载删除模块让系统知道,相当于刷新
        解决载入和删除模块的依赖
        [root@pagoda63 fat]# depmod  # 处理依赖关系(插入删除模块后必须操作)
    注:depmod 更新的配置文件,就是这个
        [root@pagoda63 fat]# vim /lib/modules/3.10.75/modules.dep
        打开文件搜索相关模块可以看到他们之间的依赖关系及模块路径

modinfo:查看模块信息
    [root@pagoda63 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之间的依赖关系一样)
    [root@pagoda63 fat]# insmod vfat.ko  #no
    insmod: error inserting ‘vfat.ko‘: -1 Unknown symbol in module

    [root@pagoda63 fat]# modprobe vfat  #ok

    [root@pagoda63 fat]# modprobe vfat.ko #no
    FATAL: Module vfat.ko not found.
   
    -r :modprobe -r 和rmmod一样,删除模块不能自动解决依赖关系删除
        [root@pagoda63 fat]# modprobe -r vfat
        [root@pagoda63 fat]# modprobe -r fat

开机自动加载某个模块
    [root@pagoda63 fat]# vim /etc/rc.local
        添加内容:modprobe fat
        也可以实现开机自动挂载
        mount /dev/sdb1 /sdb1

____________________________________________________________________________

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

安装 fuse:
[root@pagoda63 fuse-2.8.3]# ./configure
[root@pagoda63 fuse-2.8.3]# make && make install



安装:ntfs-3g:
[root@pagoda63 ntfs-3g-2011.1.15]# ./configure
[root@pagoda63 ntfs-3g-2011.1.15]# make && make install

挂载:
插入一块ntfs的移动硬盘,把移动硬盘导入到虚拟机中
[root@pagoda63 hgfs]# mount /dev/sdc /mnt/media
开机自动挂载:
[root@pagoda63 media]# vim /etc/fstab
/dev/sdc    /mnt/media      ntfs-3g     defaults    0 0
   
    技术分享
技术分享
    

linux-编译内核和内核模块操作

标签:

原文地址:http://www.cnblogs.com/ylion/p/4738531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!