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 设备是什么类型的,不到万不得已,绝对不要用兼容模式。
--
一个人只拥有此生此世是不够的,他还应该拥有诗意的世界。
——王小波
[m 为啥用PIO不用dma呢?
处于兼容模式的 PATA 设备,由于没了 IDE Controller,所以只能使用 PIO 模式。
没仔细看吧
页:
[1]