dd-wrt 設定手記
弄了整整兩天,終於將家裏的 router 設定好了。
為方便日後可能要重設,我把步驟記下來了。

首先是需要找到乎合自己 rom:

這裏的清單列出了不同版本的功能,我跟據自己的需要選了 v24-sp2 big。

安裝好之後發現了一個問題,就是無法做 port forwarding 了!
這弄了網上找了一整天發現了這則解答,至於原理是什麼我自己也看得一頭霧水。嘛總之問題解決了就好了。

以下是需要複製的代碼:
insmod ipt_mark 
insmod xt_mark 
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE
usb 設定:
因為 E4200 的內存只有 64MB,刷掉系統的 16MB 就只剩 48M 了,ipkg update 亦會因內存不足而直接報錯。

亦由於 E4200 的usb接口共有一個,usb 外存跟打印機至少需要兩個,於是我試將 usb 擴充器插到 router 上:
Aug 13 20:11:23 192.168.1.1 kernel: hub 2-1:1.0: USB hub found
Aug 13 20:11:23 192.168.1.1 kernel: hub 2-1:1.0: 4 ports detected
這樣我就多了三個接口用了!

首先我將 usb 外存格式化為 ext3。接上之後,syslog 會出現以下輸出:
Aug 13 20:07:24 192.168.1.1 kernel: usb 1-1: new high speed USB device using ehci_hcd and address 2
Aug 13 20:07:24 192.168.1.1 kernel: usb 1-1: configuration #1 chosen from 1 choice
這樣 usb 就成功連接上了。

另一個問題是執行 mount 之後,usb 並沒有實際 mount 都指定位置。
又找了一會發現 ext3 需要手動 insmod
但 mount -t ext3 還是不行,檢查 syslog 卻得出如下輸出:
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_force_commit
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_dirty_data
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_force_commit_nested
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol mb_cache_create
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_init_dev
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_dirty_metadata
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_forget
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_wipe
Aug 13 21:21:42 192.168.1.1 kernel: ext3: Unknown symbol journal_blocks_per_page
...
然後又找到了這則文章,結果 ext3 好像需要這 3 個 mod:
insmod mbcache 
insmod jbd 
insmod ext3
mount 成功就會有如下輸出:
Aug 13 21:38:36 192.168.1.1 kernel: kjournald starting. Commit interval 5 seconds
Aug 13 21:38:37 192.168.1.1 kernel: EXT3 FS on sda1, internal journal
Aug 13 21:38:37 192.168.1.1 kernel: EXT3-fs: mounted filesystem with ordered data mode.
這是 startup-script,跟隨說明下面的方法進行修改:
#!/bin/sh

# 1. install necessary mod for mounting ext3

  insmod mbcache
  insmod jbd
  insmod ext3


# 2. Mount partition 1 as /mnt folder - then wait for the drive to mount

  mount -t ext3 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt
  sleep 5
  mount /mnt/jffs /jffs

# 3. Printer driver

  # Laser
  /jffs/usr/sbin/p910nd -b -f /dev/usb/lp0 0

# 4. set path so optware binaries are automatically found as new commands

  echo "export PATH=$PATH:/opt/bin:/opt/sbin" > /tmp/root/.profile
  echo "export IPKG_CONF_DIR=/jffs/etc" >> /tmp/root/.profile
  export PATH=$PATH:/opt/bin:/opt/sbin
#1. 這些是 ext3 需要的模組。
#2. mount usb to /mnt, then map relative directory /mnt/jffs to /jffs
#3. 啟動列印服務,需要先執行 ipkg install 取得 p910nd 的 package.
#4. 設定基本環境變數。關於 "IPKG_CONF_DIR=/jffs/etc" (這是重新定向 ipkg 的設定檔),ipkg install 之前得先執行 ipkg update,但 ipkg update 的地址已經失效了,得手動修正。不能直接在 /etc/ 的目錄下更改。

由於整個系統的檔案都是唯讀 ( ROM ) 的,而router的容量就只在64MB(扣除系統之後就所剩無幾了)。啟用 jffs 之後,得做一個 startup-script,立即將 jffs 重新定向至 usb,然後系統就會自動載入 /jffs/etc/init.d/ 目錄下的所有 package。

列印機設定:

接上 usb 之後,先確保 syslog 裏面有以下幾句:
Aug 28 08:58:55 192.168.1.1 kernel: usb 1-1.2: new full speed USB device using ehci_hcd and address 5
Aug 28 08:58:55 192.168.1.1 kernel: usb 1-1.2: configuration #1 chosen from 1 choice
Aug 28 08:58:55 192.168.1.1 kernel: usblp0: USB Bidirectional printer dev 5 if 0 alt 0 proto 2 vid 0x04E8 pid 0x3301
這是說 router 已經偵測到這個裝置,並知道這是一部打印機了。
之後就是安裝 p910nd:
ipkg install p910nd
跟隨說明裏的設定,服務成功架起來了,但就是無法打印。

最後發現打印機沒碳粉,鬱悶了。
Tag(s): bash linux
Profile picture
斟酌 鵬兄
Wed Aug 28 2013 02:07:52 GMT+0000 (Coordinated Universal Time)
Last modified: Wed Nov 09 2016 02:34:14 GMT+0000 (Coordinated Universal Time)
Comments
No comments here.
Do you even comment?
website: 
Not a valid website
Invalid email format
Please enter your email
*Name: 
Please enter a name
Submit
抱歉,Google Recaptcha 服務被牆掉了,所以不能回覆了