cnhnln 发表于 2006-4-11 21:09:09

SATA——转贴

最近几天在弄 Linux 下的 SATA 问题,现总结如下:



目前系统上有:CDROM(IDE-0-0)和 HD(SATA-0)



如果 BIOS 中 IDE 配置成兼容模式,则 IDE Controller(D31:f1)被屏蔽。

因此要想读写 HD 和 CDROM,必须打开内核的

generic/default IDE chipset support (CONFIG_IDE_GENERIC),

这样内核就可以通过 PIO 访问 IDE 设备(HD/CDROM)。



如果是增强模式,则IDE Controller(D31:f1)和 SATA Controller(D31:f2)

同时有效,此时访问 CDROM 只要打开内核 PCI bus-master DMA support 和 Intel PI
IXn chipsets support。



处于兼容模式的 PATA 设备,由于没了 IDE Controller,所以只能使用 PIO 模式。

而对于 SATA 设备,SATA Controller 也无法发挥作用,因为设备被“兼容”了过去。


因此整个系统的 PATA/SATA 设备就都只能使用 PIO 模式。



抱着上述思想,非得上增强模式不可。于是在RHEL4(linux-2.6.9)一通捣鼓未果。

最后发现内核太老认不出 BridgePort ICH? 上的 SATA Controller。



于是用2.6.13的内核,make & make modules_install 后,修改 initrd

先用 gunzip 解压,然后 “cpio -i <../initrd” 展开。

把必需的驱动放入 lib/ 目录下,然后修改 init 文件,依次把驱动 insmod

drivers/scsi/scsi_mod.ko

drivers/scsi/sd_mod.ko

drivers/scsi/libata.ko

drivers/scsi/ata_piix.ko

fs/jbd/jbd.ko

fs/ext3/ext3.ko

然后 “find . | cpio-c -o --quiet >../initrd”,“gzip -9” 压缩。

重起后,内核报了一大堆符号找不到的错误,可是我手工一个个 insmod 都可以成功。


静态编译进内核也可以成功运行。最后每个驱动之间加上 sleep 5 才算搞定。

估计是因为 insmod 是异步的,前一个驱动 insmod 后,符号表还没等链进内核,后边
的驱动就上了。



补充,关于 initrd 用 cpio 打包据说是为了没有 root 权限也可以修改。

initrd 里面的 init 脚本由 nash 解释执行,所支持的命令可以 man nash 看到。

不管你的 IDE 设备是什么类型的,不到万不得已,绝对不要用兼容模式。


--
一个人只拥有此生此世是不够的,他还应该拥有诗意的世界。

                                              ——王小波



cobranail 发表于 2006-4-14 22:22:08

为啥用PIO不用dma呢?

cnhnln 发表于 2006-4-14 22:59:20


处于兼容模式的 PATA 设备,由于没了 IDE Controller,所以只能使用 PIO 模式。


没仔细看吧
页: [1]
查看完整版本: SATA——转贴