Kernel 2.6.18 無法打開DMA , 因為VIA CX700在Kernel 2.6.18的支援有問題.
這個問題搞了我很久...
我的錯誤決策導致浪費相當多的時間.
一開始我就決定用最省力的方式 , 直接Update Kernel到2.6.27 (Ubuntu8.10的Kernel version) , 想當然爾 , DMA在更新核心後就可以開啟了 . 但是小日本並不想更新核心 . 由於他們是使用CentOS5.3 , 所以並不想冒險去使用較新的核心.
這邊出現了一點小問題...我第一次Update Kernel到2.6.18.8時 , DMA也是可以被開啟的...但是第二次之後 , 卻一直都是失敗...我也還沒搞清楚問題在哪裡.
後來一直圍繞在第一次成功的基準 , 不斷的去更改核心選項 , 認為應該問題是在於我少勾或者是多勾了甚麼功能...所以造成非常多的時間被浪費在編譯核心.
最後更改方向 , 去VIA的論壇去看看這個晶片在2.6.18上是有甚麼問題的. 果然找到了一個可能的解決方案 . 在driver/ide/pci/via82cxxx.c內多加幾行code即可
#define PCI_DEVICE_ID_VIA_CX700 0x8324
#define PCI_DEVICE_ID_VIA_CX700-IDE 0x5324
#define PCI_DEVICE_ID_VIA_8237S 0x3372
{ “cx700”, PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }
{ “vt8237s”, PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }
{ “6410”, PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }
static struct pci_device_id via_pci_tbl[] = {
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C576_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_CX700-IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0,0},
{ PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_6410, PCI_ANY_ID, PCI_ANY_ID, 0, 1, },
修改完後 , 把他編譯進核心 , 不能使用模組的方式 , 因為不知道是哪個模組會去先使用到ide的位置 , 導致這個模組用外掛的方式會失敗
重新開機後即可!!