[網樂通] 使用Cross Compiler編出網樂通核心&小米隨身WIFI驅動

長假來了,當然就要先拿網樂通出來玩~由於小米隨身WIFI的價格實在太便宜,不到100元新台幣就能到手,買了以後就想試試看能不能餵網樂通吃。Google了許多在Linux上實現小米隨身WIFI的方法,方法就是上 Mediatek 下載驅動的原始碼後編譯囉~!

 

不過,想要讓網樂通吃這張USB網卡可沒那麼容易,因為網樂通使用SuperH架構,而不是家裡平常的普通電腦,所以需要使用交叉編譯環境來讓網樂通可以順利執行編譯出來的檔案,架設交叉編譯環境可以先看這篇文章

有了編譯環境以後,還需要網樂通原始碼來作為編譯驅動的來源,因為各方的原始碼不盡相同,每個人編的核心也都不一樣,所以需要自己重編一次(LINUX的樂趣?)

 

準備網樂通的原始碼

Ubuntu 開機完畢後,下載網樂通的原始碼,解壓縮後放入 /usr/src/ :

root@ubuntu:~# wget https://github.com/suzuke/kernel-pdk7105/archive/master.zip
root@ubuntu:~# unzip master.zip
root@ubuntu:~# mv kernel-pdk7105-master/ /usr/src/

 

解壓縮完以後,原始碼的路徑是 /usr/src/kernel-pdk7105-master/ ,進入這個資料夾以後先使用make ARCH=sh CROSS_COMPILE=sh4-linux- mrproper指令確保原始碼的乾淨:

root@ubuntu:~# cd /usr/src/kernel-pdk7105-master/
root@ubuntu:/usr/src/kernel-pdk7105-master# make ARCH=sh CROSS_COMPILE=sh4-linux- mrproper

 

執行完畢後,原本需要使用make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig來設定Kernel,但是本人太懶了,直接去網樂通Debian系統裡面抓「.config」過來編譯核心:

root@ubuntu:~# cd /usr/src/kernel-pdk7105-master/
root@ubuntu:/usr/src/kernel-pdk7105-master# wget http://s1.becoder.org/nextvod/config.gz
root@ubuntu:/usr/src/kernel-pdk7105-master# gunzip config.gz
root@ubuntu:/usr/src/kernel-pdk7105-master# mv config .config
root@ubuntu:/usr/src/kernel-pdk7105-master# make ARCH=sh CROSS_COMPILE=sh4-linux- headers_install INSTALL_HDR_PATH= /usr/src/kernel-pdk7105-master/ #產生header檔,建議多下幾次指令避免缺檔

 

網樂通原始碼已經整理得差不多了,再來是編譯驅動模組的準備:

root@ubuntu:~# mkdir /lib/modules/kernel-pdk7105-master/
root@ubuntu:~# ln -s /usr/src/kernel-pdk7105-master/ /lib/modules/kernel-pdk7105-master/build
root@ubuntu:~# ln -s /usr/src/kernel-pdk7105-master/ /lib/modules/kernel-pdk7105-master/src

 

 

編譯核心

原始碼準備好可以先把kernel編譯起來放著:

root@ubuntu:/usr/src/kernel-pdk7105-master# make ARCH=sh CROSS_COMPILE=sh4-linux- vmlinux #編譯需要花一點時間
root@ubuntu:/usr/src/kernel-pdk7105-master# sh4-linux-objcopy -O binary vmlinux vmlinux.bin
root@ubuntu:/usr/src/kernel-pdk7105-master# gzip --best --force vmlinux.bin
root@ubuntu:/usr/src/kernel-pdk7105-master# mkimage -A sh -O linux -T kernel -C gzip -a 0x80800000 -e 0x80801000 \
-n "Linux 2.6" -d vmlinux.bin.gz vmlinux.ub [按Enter]

 

 

修改驅動

準備好了以後呢,就可以下載小米隨身WIFI的驅動[ 點我下載 ]回來修改了,抓好解壓以後必須修改 Makefile 來讓網樂通可以使用:

root@ubuntu:~# wget http://cdn-cw.mediatek.com/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
(http://s1.becoder.org/nextvod/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2)
root@ubuntu:~# tar jxvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
root@ubuntu:~# cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913
root@ubuntu:~# vi Makefile

 

編輯 Makefile 的時候,必須使用「/」來搜尋(PTT鄉民應該很清楚)字串「PC」,因為 Makefile 預設是PC(一般電腦),所以直接修改 PC 的內容就好。找到($(PLATFORM),PC),下方可以看到LINUX_SRCLINUX_SRC_MODULE,將檔案修改改成如下:

ifeq ($(PLATFORM),PC)
# Linux 2.6
LINUX_SRC = /lib/modules/kernel-pdk7105-master/build #修改後結果
# Linux 2.4 Change to your local setting
#LINUX_SRC = /usr/src/linux-2.4
LINUX_SRC_MODULE = /lib/modules/kernel-pdk7105-master/kernel/drivers/net/wireless/ #修改後結果
CROSS_COMPILE =
endif

 

存檔後,再編輯common/rtusb_dev_id.c以新增小米WIFI的ID,這樣系統才會知道這張網卡該使用這個驅動,找到並修改

#ifdef MT7601U
{USB_DEVICE(0x148f,0x6370)}, /* Ralink 6370 */
{USB_DEVICE(0x148f,0x7601)}, /* MT 6370 */
{USB_DEVICE(0x2717,0x4106)}, /* Xiaomi Wifi */ #新增這行
#endif /* MT7601U */

 

 

修改Vermagic字串

修改完成後回到DPO_MT7601U_LinuxSTA_3.0.0.4_20130913,就開始可以編譯驅動了,但是有個問題,這樣編出來 .ko 的Vermagic和編出來核心的字串會不同,這部份還要再請教其他先進,不過目前我使用的方法是直接繞過Vermagic,直接修改Kernel原始碼,讓編譯出來.ko的Vermagic和核心相同:

root@ubuntu:~# cd /usr/src/kernel-pdk7105-master/
root@ubuntu:/usr/src/kernel-pdk7105-master# cp include/linux/vermagic.h include/linux/vermagic.h.bak #備份檔案
root@ubuntu:/usr/src/kernel-pdk7105-master# vi include/linux/vermagic.h

 

進入後應該會看到像這樣的文字,找到「UTS_RELEASE」:

#define VERMAGIC_STRING
UTS_RELEASE " "
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS
MODULE_ARCH_VERMAGIC

修改為:

#define VERMAGIC_STRING
"2.6.32.59_stm24_0211-PDK7105-32BITS" " " #網樂通uname -r出現的版本
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS
MODULE_ARCH_VERMAGIC

存檔後,回到驅動資料夾就可以開始編譯了:

root@ubuntu:/usr/src/kernel-pdk7105-master# cd
root@ubuntu:~# cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/
root@ubuntu:~# make ARCH=sh CROSS_COMPILE=sh4-linux-

慢慢等吧~

 

編譯完成後,就可以在DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/裡面看到mt7601Usta.ko了~但是要讓網樂通使用的話,還需要再作一個動作:將DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/RT2870STA.dat搬到網樂通的/etc/Wireless/RT2870STA裡面:

root@debian-wheezy-sh4:~# mkdir /etc/Wireless/RT2870STA/
root@debian-wheezy-sh4:~# mv RT2870STA.dat /etc/Wireless/RT2870STA/

 

測試一下成果 [檔案下載]

 

成功囉

 

 

關於 富源

一名台東大學資訊工程學系的學生,這個網站用來紀錄一些不常用,但很重要、會忘記的事情。我的興趣是寫一些實用向的程式,例如 Python 爬蟲之類的東西... 歡迎各位交流!

6 Comments

  1. 請問您的教學將編譯好的小米隨身WIFI 與網樂通的結合使用,是不是將小米 WIFI 當成無線網路卡,讓網樂通無需接有線網路即可上網?

  2. 使用原廠驅動程式僅支援 STA 模式,要要等待核心升級後後使用 rt2800usb rt2800usb 模組才可開啟 AP 模式

  3. 您好,請問以上做法是否可以完整支援WI-FI網卡和分享器的兩種模式?家中有閒置的網樂通一直沒有下手改機,最近入手一支MiWiFi,想結合兩者當作無線網路訊號中繼延長用途(或是單純將有線網路轉成Wi-Fi訊號使用)… … 請問是否可能實現類似Wi-Fi router的功能?還是說只能做到讓網樂通接收Wi-Fi而已呢?感謝解惑。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *