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

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

 

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

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

 

準備網樂通的原始碼

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

root@ubuntu:~# <span style="color: #ff0000;">wget https://github.com/suzuke/kernel-pdk7105/archive/master.zip</span><br /> root@ubuntu:~# <span style="color: #ff0000;">unzip master.zip</span><br /> root@ubuntu:~# <span style="color: #ff0000;">mv kernel-pdk7105-master/ /usr/src/</span>

 

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

root@ubuntu:~# <span style="color: #ff0000;">cd /usr/src/kernel-pdk7105-master/</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">make ARCH=sh CROSS_COMPILE=sh4-linux- mrproper</span>

 

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

root@ubuntu:~# <span style="color: #ff0000;">cd /usr/src/kernel-pdk7105-master/</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">wget http://s1.becoder.org/nextvod/config.gz</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">gunzip config.gz</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">mv config .config</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">make ARCH=sh CROSS_COMPILE=sh4-linux- headers_install INSTALL_HDR_PATH= /usr/src/kernel-pdk7105-master/<span style="color: #ff0000;"> <span style="color: #3366ff;"><a style="color: #3366ff;" href="http://next.fishome.tw/bbs/read.php?tid=248&fid=37&page=1#449" target="_blank">#產生header檔</a>,建議多下幾次指令避免缺檔</span></span></span><br />

 

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

root@ubuntu:~# <span style="color: #ff0000;">mkdir /lib/modules/kernel-pdk7105-master/</span><br /> root@ubuntu:~# <span style="color: #ff0000;">ln -s /usr/src/kernel-pdk7105-master/ /lib/modules/kernel-pdk7105-master/build</span><br /> root@ubuntu:~# <span style="color: #ff0000;">ln -s /usr/src/kernel-pdk7105-master/ /lib/modules/kernel-pdk7105-master/src</span>

 

 

編譯核心

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

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

 

 

修改驅動

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

root@ubuntu:~# <span style="color: #ff0000;">wget http://cdn-cw.mediatek.com/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2<br /> </span>(http://s1.becoder.org/nextvod/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2)<br /> root@ubuntu:~# <span style="color: #ff0000;">tar jxvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2</span><br /> root@ubuntu:~# <span style="color: #ff0000;">cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913</span><br /> root@ubuntu:~# <span style="color: #ff0000;">vi Makefile</span>

 

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

<span style="color: #ff00ff;">ifeq</span> ($(PLATFORM),PC)<br /> <span style="color: #0000ff;"># Linux 2.6</span><br /> <span style="color: #00ccff;">LINUX_SRC</span> = <span style="color: #ff0000;"><em><strong>/lib/modules/kernel-pdk7105-master/build</strong></em> #修改後結果</span><br /> <span style="color: #0000ff;"># Linux 2.4 Change to your local setting</span><br /> <span style="color: #0000ff;"> #LINUX_SRC = /usr/src/linux-2.4</span><br /> <span style="color: #00ccff;">LINUX_SRC_MODULE</span> = <span style="color: #ff0000;"><em><strong>/lib/modules/kernel-pdk7105-master/kernel/drivers/net/wireless/</strong></em> #修改後結果</span><br /> <span style="color: #00ccff;">CROSS_COMPILE</span> =<br /> <span style="color: #ff00ff;">endif</span>

 

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

<span style="color: #ff00ff;">#ifdef MT7601U</span><br /> {USB_DEVICE(<span style="color: #ff0000;">0x148f</span>,<span style="color: #ff0000;">0x6370</span>)}, <span style="color: #0000ff;">/* Ralink 6370 */</span><br /> {USB_DEVICE(<span style="color: #ff0000;">0x148f</span>,<span style="color: #ff0000;">0x7601</span>)}, <span style="color: #0000ff;">/* MT 6370 */</span><br /> <em><strong>{USB_DEVICE(<span style="color: #ff0000;">0x2717</span>,<span style="color: #ff0000;">0x4106</span>)}, <span style="color: #0000ff;">/* Xiaomi Wifi */ </span></strong></em><span style="color: #0000ff;"><span style="color: #000000;">#新增這行</span></span><br /> <span style="color: #ff00ff;">#endif</span> <span style="color: #0000ff;">/* MT7601U */</span>

 

 

修改Vermagic字串

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

root@ubuntu:~# <span style="color: #ff0000;">cd /usr/src/kernel-pdk7105-master/<br /> </span>root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">cp include/linux/vermagic.h include/linux/vermagic.h.bak #備份檔案</span><br /> root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">vi include/linux/vermagic.h</span>

 

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

<span style="color: #ff00ff;">#define VERMAGIC_STRING<br /> <span style="color: #ff0000;"><em><strong>UTS_RELEASE</strong></em> " "</span><br /> MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT<br /> MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS<br /> MODULE_ARCH_VERMAGIC</span>

修改為:

<span style="color: #ff00ff;">#define VERMAGIC_STRING<br /> <span style="color: #ff0000;"><strong><em>"2.6.32.59_stm24_0211-PDK7105-32BITS"</em></strong> " " #網樂通uname -r出現的版本</span><br /> MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT<br /> MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS<br /> MODULE_ARCH_VERMAGIC<br /> </span>

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

root@ubuntu:/usr/src/kernel-pdk7105-master# <span style="color: #ff0000;">cd</span><br /> root@ubuntu:~# <span style="color: #ff0000;">cd DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/</span><br /> root@ubuntu:~# <span style="color: #ff0000;">make ARCH=sh CROSS_COMPILE=sh4-linux-</span><br />

慢慢等吧~

 

編譯完成後,就可以在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/<br /> root@debian-wheezy-sh4:~# mv RT2870STA.dat /etc/Wireless/RT2870STA/

 

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

 

成功囉

 

 


See also

comments powered by Disqus