Dec
24
Linux下常见的一个问题:编译和安装硬件的驱动。目前,几乎所有的服务器厂商都会考虑到linux这个平台环境,所以,当系统光盘自带的驱动缺少时,可上这些服务器厂商的网站获取技术支持。除部分网卡驱动可直接编译外,很多系统驱动都需要引用核心源码编译。
我这里不详细说明如何编译驱动了,实际上,只要看README文件都能完成。只是恰好,这几天看到一个比较规范的驱动编译脚本,觉得以后可以用到,所以特引用一下。
一、驱动版本
我这里引用的驱动是:
可以从这里下载:点击
文件比较大,同时包括了RHEL4各版本和SUSE 9版本的启动用驱动文件,以及驱动源码。
二、编译源码
这是我想引用的重点内容。
1、解压文件
2、编译驱动
编译该驱动需要使用核心的源码包。执行下面的命令前,请确认是否已经安装kernel-source或者kernel-develop包,然后再运行:
编译后会生成.ko的核心模块文件:
把他们拷贝到驱动目录:
更新、加载驱动:
更新启动镜像:
这里仅是以更新系统中的驱动来举例,请以实际情况为准执行。
3、编译脚本
简单来说,只要已经安装好kernel-develop包,然后运行compile脚本即可完成编译。过程很简单,值得参考。
compile脚本:
Makefile_builds内容:
真正使用到的就是这两个文件,他们引用核心的config配置菜单,修改后,单独编译mptlinux模块。其他大部分的驱动都可参考此步骤编译,而不需编译整个核心。
当然,还有一些有用的脚本:
下载:
我这里不详细说明如何编译驱动了,实际上,只要看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
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
# ./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
-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
# cp *.ko /lib/modules/`uname -r`/kernel/drivers/update
更新、加载驱动:
# depmod -a
# modprobe mptsas
# modprobe mptsas
更新启动镜像:
# cd /boot
# cp initrd-`uname -r`.img initrd-`uname -r`.img.old
# mkinitrd -f initrd-`uname -r`.img
# 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;
#
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
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 打扫目录,清除已经编译的核心文件
makempt 使用Makefile.for_testing的配置编译模块(测试用)
load 加载模块
load_uload 加载模块后,再卸载(测试)
uload 卸载模块
update 把模块拷贝到驱动目录,更新驱动
pound 使用sg_dd命令测试驱动
clean 打扫目录,清除已经编译的核心文件
下载:
下载文件
内文分页: [1] [2]