长枪不倒 发表于 2019-2-17 12:19:19

linux kernel modules

  # uname -r
  2.6.18-308.el5
  ==kernel相关概念==
  双树结构(测试版,稳定版)
  一、升级内核: linux-2.6.39.tar.gz
  ==升级内核的目的
  追求前瞻性
  开发测试使用
  增加新的功能
  使用新的硬件驱动
  给内核瘦身
  其它需求(嵌入式开发)
  ==实施步骤
  1. 安装编译所需的工具 gcc lib make(开发工具 开发库)
  2. 下载内核源码
  a. www.kernel.org(最新)
  b. ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server
  ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server
  3. 解压linux-2.6.39.tar.gz
  4. 配置内核编译的参数make menuconfig (类似./configure)
  5. 开始编译make (等价于这两个命令 make bzImagemake modules)
  6. 安装模块make modules_install   //安装到了 /lib/modules/$(uname -r)
  7. 安装内核make install             //安装到了 /boot
  8. 检查 ls /boot, /boot/grub/grub.conf, /lib/modules查看是否有了新的内核
  ==具体实施
  1. yum -y groupinstall "开发工具" "开发库"
  2. 下载
  3. # tar xvf linux-2.6.39.tar.gz -C /usr/src/
  # cd /usr/src/linux-2.6.39/
  4. # make prproper 清理代码树
  # cp /boot/config-2.6.18-308.el5PAE .config将系统中原有的config复制
  # make menuconfig   ******这个很重要,以后要学会根据需要配置
  RHEL5:
  General setup--->
  
[*] Enable deprecated sysfs features to support old userspace tool
  
[*]   Enable deprecated sysfs features by default
  ===================
  # head -5 Makefile 修改kernel版本名
  VERSION = 2
  PATCHLEVEL = 6
  SUBLEVEL = 39
  EXTRAVERSION = -yangsheng
  ===================
  5. # make
  6. # make modules_install
  7. # make install
  8. 检查 ls /boot, /boot/grub/grub.conf
  # ls /lib/modules/2.6.39-yangsheng/kernel/fs/ntfs/
  ntfs.ko
  二、给当前内核增加功能(模块)kernel-2.6.18-308.el5.src.rpm
  注:使用和当前内核版本完全匹配内核源码包
  1. 查看当前内核版本
  # uname -r
  2.6.18-308.el5
  2. 建议不要从www.kernel.org
  ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server
  kernel-2.6.18-308.el5.src.rpm
  3. 需要工具rpm-build,开发工具,开发库
  # rpm -q rpm-build
  rpm-build-4.4.2.3-27.el5
  # ls /usr/src/redhat/
  BUILDRPMSSOURCESSPECSSRPMS
  4. 释放src.rpm   //因为模块在这个内核源码包里,所以要先释放这个
  # rpm -ivh kernel-2.6.18-308.el5.src.rpm
  # rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel.spec   将源码解压
  # cd /usr/src/redhat/BUILD/
  # ls
  kernel-2.6.18
  # cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18-308.el5.i686/
  # ls
  arch   CREDITS      fs       Kbuild       MakefileREPORTING-BUGSsound
  block    crypto         includekernel       mm      samples         tools
  configsDocumentationinit   lib          net       scripts         usr
  COPYINGdrivers      ipc      MAINTAINERSREADME    security
  示例:安装xfs.ko jfs.ko
  以下的操作在内核的源码目录
  ==编译模块
  # make menuconfig
  │ JFS filesystem support                                           │ │
  │ │[ ]   JFS POSIX Access Control Lists (NEW)                           │ │
  │ │[ ]   JFS Security Labels (NEW)                                    │ │
  │ │[ ]   JFS debugging (NEW)                                          │ │
  │ │[ ]   JFS statistics (NEW)                                           │ │
  │ │ XFS filesystem support
  # mkdir .tmp_versions//建立这个目录是因为后面报错了没有它
  # ls
  arch   crypto         init    MAINTAINERS   net             security
  block    Documentationipc   Makefile      README          sound
  configsdrivers      Kbuildmm            REPORTING-BUGStools
  COPYINGfs             kernelModule.markerssamples         usr
  CREDITSinclude      lib   Module.symversscripts
  # make fs/xfs/xfs.ko      //安装模块
  # make fs/jfs/jfs.ko
  ==复制模块到当前内核模块目录/lib/modules
  # mkdir /lib/modules/2.6.18-308.el5/kernel/fs/{xfs,jfs}
  # pwd
  /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18-308.el5.i686
  # cp fs/jfs/jfs.ko /lib/modules/2.6.18-308.el5/kernel/fs/jfs/
  # cp fs/xfs/xfs.ko /lib/modules/2.6.18-308.el5/kernel/fs/xfs/
  ==重新生成模块的依赖关系
  # cd /lib/modules/2.6.18-308.el5/
  # ls
  build         modules.dep          modules.seriomap
  # depmod//更新依赖关系
  管理模块
  modinfo 查看模块的信息modinfo xfs    modinfo -n xfs
  lsmod查看已加载的模块
  modprobe jfs手动加载模块
  modprobe xfs
  modprobe -r xfs 移出模块
  示例:创建一个jfs的文件系统
  1. fdisk -u /dev/sda
  2. 安装创建jfs文件系统的软件
  tar xvfjfsutils-1.1.15.tar.gz      解压
  # cd jfsutils-1.1.15
  # ./configure && make && make install安装三部曲
  3. 创建文件系统
  # mkfs.jfs /dev/md0
  # mkdir /mnt/jfs
  # mount /dev/md0/mnt/jfs
  # lsmod |grep jfs
  jfs                   1492281
  =======安装网卡驱动========
  # modinfo -n e1000e
  /lib/modules/2.6.18-308.el5xen/kernel/drivers/net/e1000e/e1000e.ko
  # rm -rf /lib/modules/2.6.18-308.el5xen/kernel/drivers/net/e1000e
  # depmod
  # modinfo e1000e
  modinfo: could not find module e1000e
  下载相应的网卡驱动
  # tar xvf e1000e-2.0.0.1.tar.gz
  # cd e1000e-2.0.0.1
  # ls
  COPYINGe1000e.7e1000e.specpci.updatesREADMEsrcSUMS
  # vim README
  2. Untar/unzip archive:
  tar zxf e1000e-x.x.x.tar.gz
  3. Change to the driver src directory:
  cd e1000e-x.x.x/src/
  4. Compile the driver module:
  # make install
  # pwd
  /root/e1000e-2.0.0.1/src
  # make install
  # depmod
  # modinfo e1000e
  # modprobe e1000e
  # lsmod |grep e1000e
  e1000e                1876080
  8021q                  259292 e1000e,cxgb3
  kernel-headers-2.6.18-308.el5



页: [1]
查看完整版本: linux kernel modules