DD-WRT 之 3G 上網嘗鮮 (使用 lly driver)
文章目錄
這是給想要用 DD-WRT 3G 上網"嘗鮮"所用, 所有的設定在重開機後都會消失...
前言
DD-WRT 官方版本目前並沒有支援 3G, 不過已經有高手弄出來了. 這幾天照著 http://digiland.tw/viewtopic.php?id=914 的作法把 DD-WRT 的 3G 環境也弄起來了, 在這裡重新整理一下. 和原來的方法基本上是一樣的, 只是我在測試過程中全部都用放在 RAM 的 /tmp, 沒有動到 flash, 也沒有外接任何 storage. 當然, 意思就是說, 重開機就什麼都沒了. 至於為什麼要這樣呢? 其實只是因為不確定這條路通不通, 又不想把現在的 HDD 給動到, 所以就這樣子測試了. 如果您也只是想嘗鮮一下, 可以試試看我的方法.
參考文章
軟硬體
- Hub: Asus WL-500gP V1
- USB 網卡: Huawei E169
- Firmware: DD-WRT
前置準備
- DD-WRT firmware 已經刷好 (我是用這個)
- 在 Hub 開機前把 USB 網卡插入 (這地方還需要多測試, 目前開機後再插入常常會抓不到)
- 要打開DD-WRT的PPPoE (這裡不懂為何一定要開, 因為後面反正還是要 kill 掉. 或許是有某些設定檔案會產生?)
- 把 SIM 卡的 pin code 給 disable
步驟
-
建立暫時的ipkg/jffs環境, 執行下列指令
1$ mkdir /tmp/jffs 2$ mount -o bind /tmp/jffs /jffs
-
準備 kernel library (從 lly 取得)
因為我使用的 DD-WRT 是 2.4.37, 因此要抓一樣版本的 lly, 路徑如下:
http://wl500g.googlecode.com/files/modules-1.9.2.7-d-r240.tgz
- 準備 package (從 openwrt 取得)
需要以下這些軟體:
- chat: 使用 AT command 撥號
- usb-modeswitch: 切換 USB 網卡模式
- usbutils
- libusb
- zlib
因為 3G 網路沒通, 所以沒法直接用 ipkg 線上安裝, 因此我的作法是分兩段, 先用 PC 下載以下檔案, 再上傳到 500gp, 並用 ipkg install ******.ipk 安裝起來. 如果你的 500gp 已經有可以用的網路 (i.e. ADSL), 可以直接安裝, 不用這麼麻煩.
http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/chat_2.4....
http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/libusb_0....
http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/usb-modes...
http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/usbutils_...
http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/zlib_1.2....
- 載入 kernel driver
把前面下載的 modules-1.9.2.7-d-r240.tgz 解開, 然後切換目錄到解開之後的 lib/modules/2.4.37/kernel/drivers/usb/serial. 載入時要注意順序, 使用 insmod 的話, 要先載入usbserial, 再載入option.
首先載入 usbserial, 執行下列指令
1$ insmod usbserial.o
這時候用dmesg應該會看到下列訊息
1usb.c: registered new driver serial
2usbserial.c: USB Serial support registered for Generic
3usbserial.c: USB Serial Driver core v1.4
再來載入 option, 執行下列指令
1$ insmod option.o
這時候用dmesg應該會看到下列訊息
1usbserial.c: USB Serial support registered for Option GSM modem
2option.c: USB Driver for GSM modems: v0.7.2a
執行lsusb看driver是否有抓到usb裝置, 最後一行(12d1代表Huawei, 1001代表E169) 表示抓到了. (前面第一行的錯誤訊息應該可以忽略吧?)
1$ lsusb
2lsusb: cannot open "/usr/share/usb.ids", No such file or directory
3Bus 004 Device 001: ID 0000:0000
4Bus 003 Device 001: ID 0000:0000
5Bus 002 Device 001: ID 0000:0000
6Bus 001 Device 001: ID 0000:0000
7Bus 001 Device 002: ID 12d1:1001
最後確定/dev/usb/tts/0, /dev/usb/tts/1 有被建立起來
1$ ls -l /dev/usb/tts/
2crw------- 1 root root 188, 0 Jan 1 00:01 0
3crw------- 1 root root 188, 1 Jan 1 00:00 1
- 使用usb_modeswitch將網卡模式從 ZeroCD 切換到 modem
編寫 /tmp/usb-modeswitch.conf, 內容如下 (可參考 http://www.draisberghof.de/usb_modeswitch/usb_modeswitch.conf, 將 DefaultVendor 和 DefaultProduct 修改成合適的值)
1$ more /tmp/usb-modeswitch.conf
2\# Huawei E169
3DefaultVendor=0x12d1;
4DefaultProduct=0x1001
5;TargetClass=0xff
6
7\# choose one of these:
8;DetachStorageOnly=1
9HuaweiMode=1
執行下列指令, 使用usb_modeswitch將網卡切換到modem模式
1$ usb\_modeswitch -c /tmp/usb-modeswitch.conf
2
3Looking for default devices ...
4Found default devices (1)
5Accessing device 002 on bus 001 ...
6Using endpoints 0x02 (out) and 0x82 (in)
7Not a storage device, skipping SCSI inquiry
8
9USB description data (for identification)
10\-------------------------
11Manufacturer:
12Product: HUAWEI Mobile
13Serial No.:
14\-------------------------
15Sending Huawei control message ...
16OK, Huawei control message sent
17\-> Run lsusb to note any changes. Bye.
如果執行 usb_modeswitch之後的訊息和上面不同, 而是像下面這段一樣, 則代表沒有抓到裝置
1$ usb\_modeswitch -c /tmp/usb\_modeswitch.conf
2Looking for default devices ...
3No default device found. Is it connected? Bye.
到這個步驟如果沒有抓到 USB 網卡, 那後續的恐怕就不用測了...
- 使用pppd, chat撥號
編寫 /tmp/e169.chat. 這邊是中華電信, 所以用的是 internet 和 *99#
1$ more /tmp/e169.chat
2'' ''
3'' 'ATZ'
4'OK' 'ATI'
5'OK' 'AT+COPS?'
6'OK' 'AT+CGDCONT=1,"IP","internet"'
7'OK' 'ATD\*99#'
8'CONNECT' ''
編寫 /tmp/ppp/options.pppoe
1$more /tmp/ppp/options.pppoe
2/dev/usb/tts/0
3460800
4debug
5crtscts
6noipdefault
7ipcp-accept-local
8lcp-echo-interval 60
9lcp-echo-failure 5
10usepeerdns
11noauth
12nodetach
13user ""
14connect "/jffs/usr/sbin/chat -s -S -V -t 30 -f /tmp/e169.chat 2>/tmp/chat.log"
先停掉 redial, pppd. 這裡要注意的是, 我用 killall pppd 沒有作用, 得用 kill -9 *** 才行.
1$ killall redial
2$ killall pppd
使用pppd撥號
1$ pppd file /tmp/ppp/options.pppoe
檢查 /tmp/chat.log
1$ more /tmp/chat.log
2ATZ
3
4
5OK
6ATI
7Manufacturer: huawei
8Model: E169
9Revision: 11.314.13.00.00
10IMEI: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
11+GCAP: +CGSM,+DS,+ES
12
13OK
14AT+COPS?
15+COPS: 0,2,"46692",2
16
17OK
18AT+CGDCONT=1,"IP","internet"
19OK
20ATD\*99#CONNECT
看到最後面的 ATD 代表撥號, 後面出現 CONNECT 就代表成功了, YA!
故障排除
- dmesg 是最基本的
- 把 syslog 打開 (從 Web UI), 然後看 /tmp/message 也是個方法.
- minicom 我抓下來的版本似乎已經 hard code 要把設定檔放在 /etc, 但是 /etc 又是唯讀的, 所以搞不定.
Next Step
因為用的是 DD-WRT 的 mega 版本, 基本上已經沒有什麼空的 flash 了. 下一步是嘗試一下 size 比較小的 DD-WRT, 然後把這些 3G 相關程式放到 flash 裡面. 最終目的是把 DD-WRT 弄成一個開機即可上 3G 網路的環境, 而且不需要外接任何 storage.