LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 789|回复: 0

自制含SCSI驱动程序的Debian安装盘

[复制链接]
发表于 2005-11-18 16:16:09 | 显示全部楼层 |阅读模式
本文适用对象:拥有一定的硬件基础、Linux基础、编译过内核、热爱钻研的linux爱好者
本文作者及版权:Copyleft under Free Documentation License (FDL) by elcoud e.cloud@163.com
本文适用版本:任何的Debian及其衍生版,同样的原理也适用于任何Linux发行版

Adaptec的79xx系列SCSI卡是市场上常见的东西,并且被Dell等很多服务器所使用。但是最新的320系列的Adaptec卡在Linux下的驱动总不是很顺畅。而同样的台湾建邦的320系列的SCSI卡,在几乎任何版本的Linux/BSD下面都很容易驱动,不过市场价格要比Adaptec的稍微贵一点了

一般我们服务器上使用的都是稳定版本的操作系统,因此我们都装Debian 3.1r0a版本的Sarge系统,这个版本的安装光盘用的是2.6.8的内核,但是这个内核对最新的Adaptec7902系列SCSI兼容性不是太好,要么找不到卡,要么找不到硬盘,甚至干脆kernel panic。为了能够在使用最新的AIC79xx系列SCSI卡的机器上装上稳定的Sarge版Debian系统,我们只能自己动手改造了

第一步:准备
首先你要有另外一台运行着Debian的机器,虚拟机也可以,在这台机器上要准备好2.6.8的内核源代码(一定要是从apt源上下载的deb包),并且安装有一个2.6.8的内核(实际上我们只要他的配置文件config-2.6.8-2-386)
从Adaptec官方网站上下载最新的驱动源代码,要求是for2.6内核的。我当时下载的包叫做:aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz
解开2.6.8内核源代码包
cd /usr/src
tar -jvxf kernel-source-2.6.8.tar.bz2
将驱动源代码包解压缩并复制到相应的目录,覆盖掉内核原有的驱动目录
cp aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz /usr/src/kernel-source-2.6.8/drivers/scsi/
cd /usr/src/kernel-source-2.6.8/drivers/scsi/
tar -zxvf aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz
Debian下将tar文件解包默认会覆盖同名目录:aic7xxx
这时在这个2.6.8的内核源代码目录树中,自带的aic7xxx目录被我们下载的Adaptec官方驱动所替代

第二步:编译模块
复制2.6.8的默认内核配置文件作为我们编译内核的配置文件(这点及其重要!)
cp /boot/config-2.6.8-2-386 /usr/src/kernel-source-2.6.8/.config
这个配置文件就是安装光盘的作者在制作光盘中2.6.8内核时所使用的配置文件。如果你不使用这个配置文件,你编译出的驱动模块将跟光盘的2.6.8内核不配套,最终将不能使用
由于使用了现成的配置文件,所以我们已经完成了config的步骤,可以直接进行内核编译了
由于我们只需要驱动程序而不是整个内核,因此我们只需要
make modules
大约等待20分钟-1个小时不等,模块编译完成,生成了许多的内核模块,但是我们只需要一个文件:
/usr/src/kernel-source-2.6.8/drivers/scsi/aic7xxx/aic79xx.ko
检查一下这个模块:
root@vip:~# modinfo /usr/src/kernel-source-2.6.8/drivers/scsi/aic7xxx/aic79xx.ko
filename:    /usr/src/kernel-source-2.6.8/drivers/scsi/aic7xxx/aic79xx.ko
description: "Adaptec Aic790X U320 SCSI Host Bus Adapter driver"
author:      "Maintainer: Luben Tuikov <luben_tuikov@adaptec.com>"
license:     "Dual BSD/GPL"
上面的信息说明这个模块是Adaptec官方发布的,表明编译成功了

第三步:加入到启动光盘
用你喜欢的工具软件打开安装光盘的ISO镜像,把/install/2.6/initrd.gz这个文件拿出来,放到Debian机器上
gzip -d initrd.gz
mount -o loop initrd /mnt/tmp
这样就把initrd镜像挂载好了
cp aic79xx.ko /mnt/tmp/lib/modules/2.6.8-2-386/kernel/drivers/scsi/aic7xxx/
umount /mnt/tmp
gzip initrd
好了,现在initrd里面的aic79xx.ko文件已经被我们更换成了刚刚编译好的
把这个initrd.gz放回到IOS镜像中,覆盖原有文件,重新生成新的IOS镜像文件

OK,现在你已经有了一张包含Adaptec官方最新2.0.15版本的aic79xx系列SCSI卡驱动程序的Debian 3.1r0a Sarge安装光盘了!

别的发行版?原理都是一样的,只不过是initrd镜像文件的目录组织方式和格式不同,比如RHEL4版本的initrd就是cpio格式的。另外,RHEL4 Update2版本安装光盘对我所使用的aic7902卡支持的很好,所以也就不用再自己搞驱动了,一般来说企业版本的发行版,支持的应该还都算是不错的。在硬件支持这方面,Debian还是有些欠缺的

后记:
最开始在制作安装光盘的时候,由于没有使用config-2.6.8-2-386这个内核配置文件,而是自己用make menuconfig来生成默认配置文件的,这样生成的module放入光盘镜像,在模块加载的时候会报错:Invalid module format。当时已经感觉到了问题的所在,但是一时找不到那个“安装光盘的内核使用的配置文件”,在debian-boot@list.debian.org的邮件列表中的老外的指点下,才找到了这个config-2.6.8-2-386。当时觉得真是踏破铁鞋无觅处,原来它就在我的/boot里面躺着
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表