免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2626 | 回复: 1
打印 上一主题 下一主题

自制含SCSI驱动程序的Debian安装盘 [复制链接]

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-18 16:06 |只看该作者 |倒序浏览
本文适用对象:拥有一定的硬件基础、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里面躺着

[ 本帖最后由 ecloud 于 2005-11-18 16:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-21 08:21 |只看该作者
原帖由 ecloud 于 2005-11-18 16:06 发表
本文适用对象:拥有一定的硬件基础、Linux基础、编译过内核、热爱钻研的linux爱好者
本文作者及版权:Copyleft under Free Documentation License (FDL) by elcoud e.cloud@163.com
本文适用版本 ...

真是高手啊,但这是在Linux下,而且在www.Adaptec.com下也只找到For Linux的aic7Yxx-2.0.15-6.3.11-linux-2.6.tgz,找不到关于FreeBSD下相关下载。
不知道有没有高手研究过,给小弟一个提示。不胜感激!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP