前言
走OTG網(wǎng)卡這一步嫡锌,也是迫不得已的行為,但事情總是不會一帆風順的梦裂。解決外接網(wǎng)卡的驅(qū)動問題宪潮,就是一個麻煩的事情溯警。
設備
- 小米note
- rt5370網(wǎng)卡
系統(tǒng)
- MIUI 6 Linux kernel 3.4
可行的解決方式
- 換合適的手機支持你的外接網(wǎng)卡
- 換合適的網(wǎng)卡支持你的手機
- 重新刷你手機的內(nèi)核,這個新的內(nèi)核編譯時包含了你外接網(wǎng)卡的驅(qū)動
- 自己編譯外接網(wǎng)卡的驅(qū)動模塊
討論
- 前兩種方式雖然可以解決狡相,但就解決問題而言梯轻,不是最佳的方式。其實是在逃避問題尽棕。
- 第三種是可行的喳挑,網(wǎng)上也看到了相關教程,但風險無疑也是很大的滔悉,因此我打算最后在嘗試蟀悦。當然如果你本身對這方面比較精通,希望能不吝賜教氧敢。
- 我這里只談一下,我的第四種嘗試询张。
編譯內(nèi)核模塊
- 在實踐之前孙乖,我首先搜索了大量相關的教程,總體而言和我當年學習過的嵌入式開發(fā),區(qū)別不大唯袄。網(wǎng)絡上部分文章是給PC進行驅(qū)動模塊的開發(fā)弯屈,也有給arm開發(fā)板進行的驅(qū)動模塊開發(fā),少部分是給android系統(tǒng)進行的驅(qū)動開發(fā)恋拷,我這里單獨列出arm和android主要是因為兩者還是有一定區(qū)別的资厉,比如最明顯的文件系統(tǒng)目錄(我比較粗糙的理解,畢竟沒有深入對比)蔬顾。arm板而言還是和PC很類似的目錄結(jié)構(gòu)宴偿。
- 按照我的理解,我不得不假設诀豁,android中的驅(qū)動模塊和arm開發(fā)板的驅(qū)動模塊開發(fā)流程是一致的(下面的內(nèi)容都以這文前提)窄刘。 說起來這個流程很簡單。
內(nèi)核頭文件目錄/內(nèi)核源碼目錄 + 驅(qū)動源碼 ->內(nèi)核模塊
- 不管是PC舷胜,還是arm開發(fā)板其實都是這個流程娩践,給PC來開發(fā)是最簡單的,arm 開發(fā)板一般則需要交叉編譯烹骨。
- 我目前的情況是翻伺,在掛載的kali中,下載了一份很舊的網(wǎng)卡驅(qū)動沮焕,而我這個kali也有g(shù)cc環(huán)境吨岭,因此考慮是否可以直接在手機的kali中編譯出需要的內(nèi)核模塊。理論上遇汞,這是完全可行的未妹,但其實有很多不行的地方。首先我們都知道編譯內(nèi)核模塊所需的內(nèi)核頭文件版本和你當前的內(nèi)核版本應該是一致的空入,這一點就很難滿足络它。我掛載的kali系統(tǒng)提示我它是linux kernel 3.4的,這是我手機的內(nèi)核信息(為何不是kali的3.18歪赢?)化戳。但kali 的軟件源中根本沒有對應的內(nèi)核頭文件版本。
- 就當是探索了埋凯,我安裝了一個3.18的內(nèi)核頭文件(甚至后來還裝了內(nèi)核源文件)点楼。又修改了驅(qū)動源碼中Makefile的一些內(nèi)容,但其實到一定的階段就編譯失敗了白对,原因很多掠廓,我覺得一個原因可能是內(nèi)核版本太高了,一些原先的數(shù)據(jù)結(jié)構(gòu)甩恼,不一致了等蟀瞧。反正很難順利的編譯下去沉颂。
- 在實踐的過程中,我其實是有疑惑的悦污,我在插上外接網(wǎng)卡后铸屉,dmesg其實打印了識別的信息,但不知為什么就是在ifconfig中無法看到切端,
35842.063914] C0 [ kworker/0:2, 8829] BMS: adjust_soc: s 72 i 259584 v 4048380 ocv 4076326 rbatt 132 uuc 89880 cc 6086 r 2187080 t 305 f 2996000
[35843.963958] C0 [ AudioOut_2, 779] msm_dai_q6_mi2s_hw_params: dai id 1 dai_data->channels = 2
[35843.963963] C0 [ AudioOut_2, 779] sample_rate = 48000 i2s_cfg_minor_version = 0x1
[35843.963968] C0 [ AudioOut_2, 779] bit_width = 16 channel_mode = 0x2 mono_stereo = 0x1
[35843.963973] C0 [ AudioOut_2, 779] ws_src = 0x1 sample_rate = 48000 data_format = 0x0
[35843.963977] C0 [ AudioOut_2, 779] reserved = 0
[35843.977474] C0 [ AudioOut_2, 779] msm8974_sec_mi2s_startup: dai name msm-dai-q6-mi2s.1 f5272a08
[35843.977496] C0 [ AudioOut_2, 779] msm8974_sec_mi2s_startup: acquire mi2s rx resources
[35843.978643] C0 [ AudioOut_2, 779] msm8974_sec_mi2s_startup: acquire mi2s tx resources
[35843.979191] C0 [ AudioOut_2, 779] msm_dai_q6_mi2s_hw_params: dai id 1 dai_data->channels = 2
[35843.979197] C0 [ AudioOut_2, 779] sample_rate = 48000 i2s_cfg_minor_version = 0x1
[35843.979201] C0 [ AudioOut_2, 779] bit_width = 16 channel_mode = 0x1 mono_stereo = 0x1
[35843.979206] C0 [ AudioOut_2, 779] ws_src = 0x1 sample_rate = 48000 data_format = 0x0
[35843.979210] C0 [ AudioOut_2, 779] reserved = 0
[35844.743592] C0 [ MC_Thread, 1229] wlan: [1229:E :HDP] hdd_tx_rx_pkt_cnt_stat_timer_handler: Disable split scan
[35848.144587] C0 [ AudioOut_2, 779] msm8974_sec_mi2s_shutdown: free mi2s rx resources
[35848.145280] C0 [ AudioOut_2, 779] msm8974_sec_mi2s_shutdown: free mi2s tx resources
[35862.064191] C0 [ kworker/0:2, 8829] BMS: adjust_soc: s 72 i 125339 v 4054830 ocv 4076326 rbatt 132 uuc 89880 cc 7188 r 2187080 t 305 f 2996000
[35870.552180] C0 [ kworker/0:2, 8829] msm-dwc3 msm_dwc3: DWC3 exited from low power mode
[35870.552761] C0 [ kworker/0:2, 8829] switch_usb_to_host_mode: switch to host mode
[35870.554960] C0 [ kworker/0:2, 8829] xhci-hcd xhci-hcd: xHCI Host Controller
[35870.554996] C0 [ kworker/0:2, 8829] xhci-hcd xhci-hcd: new USB bus registered, assigned bus number 1
[35870.557212] C0 [ kworker/0:2, 8829] xhci-hcd xhci-hcd: irq 163, io mem 0xf9200000
[35870.561656] C0 [ kworker/0:2, 8829] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[35870.561675] C0 [ kworker/0:2, 8829] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[35870.561691] C0 [ kworker/0:2, 8829] usb usb1: Product: xHCI Host Controller
[35870.561705] C0 [ kworker/0:2, 8829] usb usb1: Manufacturer: Linux 3.4.0-g8035498-01450-g5febb22 xhci-hcd
[35870.561719] C0 [ kworker/0:2, 8829] usb usb1: SerialNumber: xhci-hcd
[35870.562543] C0 [ kworker/0:2, 8829] xHCI xhci_add_endpoint called for root hub
[35870.562557] C0 [ kworker/0:2, 8829] xHCI xhci_check_bandwidth called for root hub
[35870.562988] C0 [ kworker/0:2, 8829] hub 1-0:1.0: USB hub found
[35870.563016] C0 [ kworker/0:2, 8829] hub 1-0:1.0: 1 port detected
[35870.563743] C0 [ kworker/0:2, 8829] xhci-hcd xhci-hcd: xHCI Host Controller
[35870.563769] C0 [ kworker/0:2, 8829] xhci-hcd xhci-hcd: new USB bus registered, assigned bus number 2
[35870.563869] C0 [ kworker/0:2, 8829] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[35870.563885] C0 [ kworker/0:2, 8829] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[35870.563900] C0 [ kworker/0:2, 8829] usb usb2: Product: xHCI Host Controller
[35870.563913] C0 [ kworker/0:2, 8829] usb usb2: Manufacturer: Linux 3.4.0-g8035498-01450-g5febb22 xhci-hcd
[35870.563926] C0 [ kworker/0:2, 8829] usb usb2: SerialNumber: xhci-hcd
[35870.564556] C0 [ kworker/0:2, 8829] xHCI xhci_add_endpoint called for root hub
[35870.564569] C0 [ kworker/0:2, 8829] xHCI xhci_check_bandwidth called for root hub
[35870.565031] C0 [ kworker/0:2, 8829] hub 2-0:1.0: USB hub found
[35870.565060] C0 [ kworker/0:2, 8829] hub 2-0:1.0: 1 port detected
[35870.572421] C0 [ healthd, 257] qpnp_chg_usb_usbin_valid_irq_handler: usbin-valid triggered: 1 host_mode: 1
[35870.873600] C0 [ khubd, 65] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[35870.913669] C0 [ khubd, 65] usb 1-1: New USB device found, idVendor=148f, idProduct=5370
[35870.913689] C0 [ khubd, 65] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[35870.913705] C0 [ khubd, 65] usb 1-1: Product: 802.11 n WLAN
[35870.913718] C0 [ khubd, 65] usb 1-1: Manufacturer: TPlink
[35870.913731] C0 [ khubd, 65] usb 1-1: SerialNumber: 1.0
[35870.914752] C0 [ khubd, 65] usb 1-1: ep 0x81 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.918267] C0 [ khubd, 65] usb 1-1: ep 0x1 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.918660] C0 [ khubd, 65] usb 1-1: ep 0x2 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.918687] C0 [ khubd, 65] usb 1-1: ep 0x3 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.919064] C0 [ khubd, 65] usb 1-1: ep 0x4 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.919458] C0 [ khubd, 65] usb 1-1: ep 0x5 - rounding interval to 32768 microframes, ep desc says 0 microframes
[35870.919483] C0 [ khubd, 65] usb 1-1: ep 0x6 - rounding interval to 32768 microframes, ep desc says 0 microframes
- 后來我也了解到彻坛,rt5370其實在kernel3.0后就有了支持。但不知道為何不能使用踏枣。希望大神賜教昌屉。
2015.8.10 20:19 續(xù)
- 逛論壇,發(fā)現(xiàn)在github上有內(nèi)核的源文件椰于,按照網(wǎng)上的說法怠益,rt5370驅(qū)動已經(jīng)在kernel 3.0時已加入了內(nèi)核,目前小米使用的內(nèi)核是3.4版本瘾婿,通過查找蜻牢,果然發(fā)現(xiàn)rt5370驅(qū)動在如下目錄中,下一步考慮重新編譯內(nèi)核偏陪,將其添加到內(nèi)核中抢呆。
/linux/tree/master/drivers/net/wireless/rt2x00