linux kernel modules
# uname -r2.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]