2010年3月5日
改變USB HUB掃描各個PORT的順序
By 柯允行 2010-03-05
1前言
這是一篇介紹如何在 改變USB HUB掃描各個PORT的順序
2案由
假設硬體工程式設計的USB架構如下:
其中PORT4 為開機碟
PORT1 為給使用者任意插入的USB STORAGE
在此架構中,原本linux kernel usb driver 掃描方式為
port1-->port2-->port3-->port4..........
我們不難發現會有二種情形
Case 1: 有插external disk開機 ----> internal disk 註冊為 sdb b 8 16
Case 2: 沒有插external disk開機 ----> internal disk 註冊為 sda a 8 0
這對我們在linux kernel command line上造成困擾,無法鎖定開機碟在/dev/sda?
如: root=/dev/sda? ro quiet
3解決方法
(1)新的 Linux Distributions 開始在 fstab 和 grub 之中使用 LABEL 和 UUID 取代裝置名稱
(2)Hacking kernel 找出kernel scan port的地方,調整一下順序即可,這個想法對於其它區塊裝置的設備也是適用的(如mmc driver).
diff -Naur linux-2.6.22.6.bak/drivers/usb/core/hub.c linux-2.6.22.6/drivers/usb/core/hub.c
--- linux-2.6.22.6.bak/drivers/usb/core/hub.c 2009-11-20 01:44:37.000000000 -0500
+++ linux-2.6.22.6/drivers/usb/core/hub.c 2009-11-20 01:50:15.000000000 -0500
@@ -2685,7 +2685,8 @@
}
/* deal with port status changes */
- for (i = 1; i <= hub->descriptor->bNbrPorts; i++) {
+ for (i = hub->descriptor->bNbrPorts; i > 0 ; i--) {
if (test_bit(i, hub->busy_bits))
continue;
connect_change = test_bit(i, hub->change_bits);
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言