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

•     源码编译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
   
    

时间: 2024-11-05 18:57:31

linux-编译内核和内核模块操作的相关文章

linux编译内核make menuconfig报错Unable to find the ncurses libraries解决办法

在 linux 编译内核时 make menuconfig 报了下面的错误. *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses libraries. *** Install ncurses (ncurses-devel) and try again. 这是因为系统中缺少 ncurses-devel,安装一下就可以

Linux 编译内核

编译内核步骤: 1.先查看自己OS使用的内核版本 [email protected]:~$ uname -r4.4.0-51-generic[email protected]:~$ 2.如果安装系统时,自动安装了源码.在 /usr/src 目录下有对应的使用的版本目录(ubuntu安装完一般没有源码需要自己下载).如下: 后缀generic表示通用版. [email protected]:/usr/src$ lslinux-headers-4.4.0-21  linux-headers-4.4.

Linux编译内核

查看内核: #uname [OPTION] [OPTION] -r 显示内核版本和release号. 用户空间访问.监控内核的方式: /proc /sys 伪文件系统: /proc/sys 目录中很多文件是可读写的. /sys 某些文件可写 设定内核参数值的方法: 临时生效,重启后失效: #echo VALUE > /proc/sys/FILE #sysctl -w DIR.FILE=VALUE 在/proc/sys目录下可以忽略/proc/sys,剩余路径用DIR.FILE表示. 例如: #e

嵌入式Linux编译内核步骤 / 重点解决机器码问题

嵌入式系统更新内核 1. 前言 手里有一块Friendly ARM的MINI2451的板子,这周试着编译内核,然后更新一下这个板子的Linux内核,想要更新Linux Kernel 4.1版本,但是种种原因实在是没有更新成功:于是使用Friendly ARM板子提供的3.6版本的内核,但是他们的内核全都配置好了,你只需要按照常规的方法进行编译就好了,貌似不能更深入的理解内核, 后来我从kernel.org官网上下载原版内核,然后一点点的把2451这个板子需要文件移植过去,可谓是问题百出啊,也学习

linux编译内核步骤与错误解决

1.查看内核版本 实验环境 [[email protected] src]# uname -r 2.6.32-358.el6.x86_64 2.安装图形依赖包 yum install -y ncurses ncurses-devel 3.下载内核 [[email protected] src]# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.2.tar.xz 解压 [[email protected] src]# tar

linux编译内核2.6.32.67

上传linux内核至主机,linux内核文件格式为tar.xz. [[email protected] home]# xz -d linux-2.6.32.67.tar.xz    [[email protected] home]# ls     linux-2.6.32.67.tar xz -d解压后,会删除tar.xz文件,仅留下tar包 [[email protected] home]# tar xvf linux-2.6.32.67.tar -C /usr/src 展开归档文件至/usr

linux 编译内核 /boot空间不足?

/boot空间一般分配100M的空间,本来是够用的,由于频繁的更新导致旧的不再使用的内核文件也保留在boot空间里,占着位置,所以把这些不用的内核文件下载掉boot空间就能释放出一部分, 具体做法为 1.使用dpkg --get-selections | grep linux查看内核的安装状况,凡是带image都是旧的内核 2.使用uname -a 查看当前的内核版本 3.一般当前版本之前的版本都可以删除,我自己习惯把当前版本的前一个版本保留下来 4.删除的指令是 sudo apt-get re

14、linux编译内核安装介绍

1.linux内核的组成部分: kernel文件: kernel object:内核模块 ramdisk:辅助性文件,用来驱动rootfs所在硬件设备. 2.linux启动流程: POST--->BOOT Sequence(bios中设定的启动顺序)--->从启动设备的mbr中引导grub第一阶段--->kernel(有时会借助于ramdisk文件)--->rootfs(根切换)--->/sbin/init(用户空间的第一个程序,它的配置文件存放于:/etc/inittab;

【原创】Linux编译内核

前面的添加必备库,编译软件什么请自行百度.. 拷贝至user/src sudo cp linux-4.0.6.tar.xz /usr/src 进入src目录: cd /usr/src 接下来解压 先解压 tar.xz文件 我们先输入 sudo xz –d linux-4.0.6.tar.xz 得到tar后缀文件 在键入sudo tar –xvf  linux-4.0.6.tar 解压完成. 进入目录: cd linux-4.0.6/ 做净化:make mrproper   然后是配置内核.我们保