Dec 24

[原]编译mptlinux驱动文件 晴

linuxing , 10:23 , 基础知识 » 硬件处理 , 评论(0) , 引用(0) , 阅读(38954) , Via 本站原创 | |
   Linux下常见的一个问题:编译和安装硬件的驱动。目前,几乎所有的服务器厂商都会考虑到linux这个平台环境,所以,当系统光盘自带的驱动缺少时,可上这些服务器厂商的网站获取技术支持。除部分网卡驱动可直接编译外,很多系统驱动都需要引用核心源码编译。
   我这里不详细说明如何编译驱动了,实际上,只要看README文件都能完成。只是恰好,这几天看到一个比较规范的驱动编译脚本,觉得以后可以用到,所以特引用一下。

一、驱动版本
我这里引用的驱动是:
引用
Dell SAS 5 Controller Device Driver for RHEL 4 (x86 & x86_64)
Driver Version : 3.02.83.12
mptlinux_3.02.83.12_7_R166901.tgz

可以从这里下载:点击
文件比较大,同时包括了RHEL4各版本和SUSE 9版本的启动用驱动文件,以及驱动源码。

二、编译源码
这是我想引用的重点内容。
1、解压文件

# tar xzvf mptlinux-3.02.83.12-src.tar.gz

2、编译驱动
编译该驱动需要使用核心的源码包。执行下面的命令前,请确认是否已经安装kernel-source或者kernel-develop包,然后再运行:

# cd message/fusion/
# ./compile

编译后会生成.ko的核心模块文件:
引用
# ll *.ko
-rw-r--r--  1 root root 384491 Dec 25 11:40 mptbase.ko
-rw-r--r--  1 root root 530373 Dec 25 11:40 mptctl.ko
-rw-r--r--  1 root root 144201 Dec 25 11:40 mptfc.ko
-rw-r--r--  1 root root 194140 Dec 25 11:40 mptlan.ko
-rw-r--r--  1 root root 216621 Dec 25 11:40 mptsas.ko
-rw-r--r--  1 root root 262922 Dec 25 11:40 mptscsih.ko
-rw-r--r--  1 root root 145750 Dec 25 11:40 mptspi.ko

把他们拷贝到驱动目录:

# mkdir /lib/modules/`uname -r`/kernel/drivers/update
# cp *.ko /lib/modules/`uname -r`/kernel/drivers/update

更新、加载驱动:

# depmod -a
# modprobe mptsas

更新启动镜像:

# cd /boot
# cp initrd-`uname -r`.img initrd-`uname -r`.img.old
# mkinitrd -f initrd-`uname -r`.img

这里仅是以更新系统中的驱动来举例,请以实际情况为准执行。

3、编译脚本
简单来说,只要已经安装好kernel-develop包,然后运行compile脚本即可完成编译。过程很简单,值得参考。
compile脚本:
引用
#!/bin/bash
#
source_path="/lib/modules/`uname -r`/build"
#./clean
cp ${source_path}/.config ${source_path}/config.orig;
cp ${source_path}/.config .
sed -e '/CONFIG_FUSION=m/ c\CONFIG_FUSION=y' .config > config.new;
mv config.new .config
sed -e '/CONFIG_FUSION_MAX_SGE=40/ c\CONFIG_FUSION_MAX_SGE=128' .config > config.new;
mv config.new .config
if [ `grep -c CONFIG_FUSION_SPI .config` -eq 0 ]; then
   sed -e '/CONFIG_FUSION=/ a\CONFIG_FUSION_SPI=m' .config > config.new;
   mv -f config.new .config
fi;
if [ `grep -c CONFIG_FUSION_FC .config` -eq 0 ]; then
   sed -e '/CONFIG_FUSION=/ a\CONFIG_FUSION_FC=m' .config > config.new;
   mv -f config.new .config
fi;
if [ `grep -c CONFIG_FUSION_SAS .config` -eq 0 ]; then
   sed -e '/CONFIG_FUSION=/ a\CONFIG_FUSION_SAS=m' .config > config.new;
   mv -f config.new .config
fi;
sed -e '/CONFIG_FUSION_ISENSE/d' .config > config.new;
mv -f config.new ${source_path}/.config
rm -f .config
cp Makefile_builds Makefile
make -j3 CONFIG_DEBUG_INFO=1 V=1 -C /lib/modules/`uname -r`/build M=`pwd`
mv -f ${source_path}/config.orig ${source_path}/.config;

Makefile_builds内容:
引用
EXTRA_CFLAGS += -DCPQ_CIM
obj-$(CONFIG_FUSION_SPI)        += mptbase.o mptscsih.o mptspi.o
obj-$(CONFIG_FUSION_FC)         += mptbase.o mptscsih.o mptfc.o
obj-$(CONFIG_FUSION_SAS)        += mptbase.o mptscsih.o mptsas.o
obj-$(CONFIG_FUSION_LAN)        += mptlan.o
obj-$(CONFIG_FUSION_CTL)        += mptctl.o

真正使用到的就是这两个文件,他们引用核心的config配置菜单,修改后,单独编译mptlinux模块。其他大部分的驱动都可参考此步骤编译,而不需编译整个核心。
当然,还有一些有用的脚本:
引用
Makefile.for_testing 打开DEBUG_EVENTS模式来编译
makempt 使用Makefile.for_testing的配置编译模块(测试用)
load 加载模块
load_uload 加载模块后,再卸载(测试)
uload 卸载模块
update 把模块拷贝到驱动目录,更新驱动
pound 使用sg_dd命令测试驱动
clean 打扫目录,清除已经编译的核心文件

下载:
内文分页: [1] [2]
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]