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 給動到, 所以就這樣子測試了. 如果您也只是想嘗鮮一下, 可以試試看我的方法.

參考文章

  1. 數位天堂: DD-WRT 3G 測試
  2. 數位天堂: Lly 韌體 (Oleg 韌體分支)

軟硬體

  1. Hub: Asus WL-500gP V1
  2. USB 網卡: Huawei E169
  3. Firmware: DD-WRT

前置準備

  1. DD-WRT firmware 已經刷好 (我是用這個)
  2. 在 Hub 開機前把 USB 網卡插入 (這地方還需要多測試, 目前開機後再插入常常會抓不到)
  3. 要打開DD-WRT的PPPoE (這裡不懂為何一定要開, 因為後面反正還是要 kill 掉. 或許是有某些設定檔案會產生?)
  4. 把 SIM 卡的 pin code 給 disable

步驟

  1. 建立暫時的ipkg/jffs環境, 執行下列指令

    1$ mkdir /tmp/jffs  
    2$ mount -o bind /tmp/jffs /jffs
    
  2. 準備 kernel library (從 lly 取得)

因為我使用的 DD-WRT 是 2.4.37, 因此要抓一樣版本的 lly, 路徑如下:
http://wl500g.googlecode.com/files/modules-1.9.2.7-d-r240.tgz

  1. 準備 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....

  1. 載入 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
  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 網卡, 那後續的恐怕就不用測了...

  1. 使用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! 

故障排除

  1. dmesg 是最基本的
  2. 把 syslog 打開 (從 Web UI), 然後看 /tmp/message 也是個方法.
  3. minicom 我抓下來的版本似乎已經 hard code 要把設定檔放在 /etc, 但是 /etc 又是唯讀的, 所以搞不定.

Next Step

因為用的是 DD-WRT 的 mega 版本, 基本上已經沒有什麼空的 flash 了. 下一步是嘗試一下 size 比較小的 DD-WRT, 然後把這些 3G 相關程式放到 flash 裡面. 最終目的是把 DD-WRT 弄成一個開機即可上 3G 網路的環境, 而且不需要外接任何 storage.