源起
客廳需要一個小功率的電腦做一些居家環境控制的事,有些條件希望可以滿足。
- 不超過五千
- 比省電燈泡的 13w 還省
- 有很多人使用的經驗
- 豐富與即時的更改版韌體可供使用
- 支援 USB
- 支援網路下載功能
最後買了 Asus WL-500g Premium 小白來用,下面是一些使用紀錄。這台小白機器的外觀與內在都被拍下來,可以參考 這裡 ,看過才知道這類產品美國 FCC 都會有資料上網公開。
第一次測試
一開始總要先插電測看看是否正常,這台機器底部有寫預設 IP 為 192.168.1.1 與密碼防止忘記,一開始的動作就市找台電腦,調到同一個網段 192.168.1.xx 來操作,連上去後先
確認 firmware 與功能正常。
因為這機器是暫時內部用來測試,所以先不管 WLAN 的那個部份。網頁秀出的韌體版本是 1.9.6.7 ,目前 asus 新版本是 1.9.7.0,不過馬上要換成客製版韌體,所以也不用更新。
另外這機器的 MAC 地址後面是 3b:a5,雖然拔掉天線,Thinkpad T41 內建網卡隔個房間可抓到約 30 % 強度,既然暫時不會動 WLAN,也沒有進一步測試。
改韌體 firmware image
要在 Linux 環境上加些應用軟體,需要改用其他韌體來支援,才能提供 telnet/ssh 等擴充功能,當然也可以自己來,只是為了快速使用,直接採用別人測過的韌體比較簡便。
改機韌體有幾個選擇,這裡採用 Olegs 版本,這個版本加了 telnet/ssh/smaba/Qos/ipkg
等強化小白的必備工具,關於這個韌體更多資料可以參考 General information about Olegs Firmware
Olegs 的網頁 ASUS WL-500g/WL-500gx/WL-300g/WL-500b/WL-500bv2/WL-HDD custom firmware page
注意下面有提到的死機問題,到時可能會需要拆開才可以回復原廠設定,請先有準備。
WL-500g Premium Howto Part One
WL500g Premium pre7 firmware
開始換韌體。
- 上傳 WL500gp-1.9.2.7-7f-pre7.trx 到小白
- 網頁變成英文,可以下 command ,試看看 ifconfig。
- telnet 192.168.1.1 看看 OK。
- 檢查無線強度,在 status 關掉 wireless 看看。
- 重新開機檢視,在 status 關掉是臨時的,可以進 wireless 關掉,以後再開。
- 改 LAN IP 為目前使用的內部網段,所以運作模式要改為 access point mode,這樣才方便設定 default gw 到原先的 router。
- 改掉預設的密碼
下面可以看出沒有增加記憶體到 32M,只有 16M。
[admin@whitebox /]$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/root 2944 2944 0 100% /
[admin@whitebox /]$ free
total used free shared buffers
Mem: 13932 10560 3372 0 1308
Swap: 0 0 0
Total: 13932 10560 3372
進一步看看。
[admin@whitebox root]$ dmesg | more
CPU revision is: 00029006
Primary instruction cache 16kb, linesize 16 bytes (2 ways)
Primary data cache 16kb, linesize 16 bytes (2 ways)
Linux version 2.4.20 (root@omnibook)
(gcc version 3.2.3 with Broadcom modifications) #60 Sun Sep 3 22:38:39 MSD 2006
Setting the PFC value as 0x15
Determined physical RAM map:
memory: 01000000 @ 00000000 (usable)
On node 0 totalpages: 4096
zone(0): 4096 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/mtdblock2 noinitrd init=/linuxrc console=ttyS0,115200
CPU: BCM4704 rev 9 at 264 MHz
Calibrating delay loop... 262.96 BogoMIPS
Memory: 13860k/16384k available
(1776k kernel code, 2524k reserved, 248k data, 72k init, 0k highmem)
Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)
Inode cache hash table entries: 1024 (order: 1, 8192 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 4096 (order: 2, 16384 bytes)
雖然有 telnet 預設,sshd 卻不是,需要加些設定。
ssh server
- mkdir -p /usr/local/etc/dropbear
- dropbearkey -t dss -f /usr/local/etc/dropbear/dropbear_dss_host_key
- dropbearkey -t rsa -f /usr/local/etc/dropbear/dropbear_rsa_host_key
- mkdir -p /usr/local/sbin/
- echo ”#!/bin/sh” >> /usr/local/sbin/post-boot
- chmod +x /usr/local/sbin/post-boot
- echo “dropbear” >> /usr/local/sbin/post-boot
- dropbear and netstat -at
- flashfs save && flashfs commit && flashfs enable && reboot
寫入 flash 後,每次開機 dropbear (ssh server) 都會被啟動,至於那隻 post-boot 會被自動叫起,那是這個韌體提供的便利之一。
目前資料開機後都會消失,所以需要藉由 USB 硬碟來提供可存放空間。
接上隨身碟
延續之前的設定,這次要加上可以放東西的空間,這裡是利用一隻舊隨身碟 128M。
ipkg package system Tutorial
- fdisk /dev/discs/disc0/disc
- d n p 1 enter +96M
- n p 2 enter enter t 2 82 w
- fdisk -l
- mke2fs -j /dev/discs/disc0/part1
- mkswap /dev/discs/disc0/part2
- mount /dev/discs/disc0/part1 /opt
- swapon /dev/discs/disc0/part2
- df
- free
測試可以後,裝些東西試看看。
- mkdir /opt/tmp
- mkdir /opt/tmp/ipkg
- ipkg.sh update
- ipkg.sh install ipkg
- /opt/bin/ipkg update
- /opt/bin/ipkg install nano
- /opt/bin/nano /usr/local/sbin/post-boot
- flashfs save && flashfs commit && flashfs enable && reboot
在之前的 dropbear 下面繼續加東西。
#!/bin/sh
dropbear
# wait for /opt to mount
mount /dev/discs/disc0/part1 /opt
i=0
while [ $i -le 30 ]
do
if [ -d /opt/etc ]
then
break
fi
sleep 1
i = `expr $i + 1`
done
# Activate swap
swapon /dev/discs/disc0/part2
開機後檢視一下 df/free 看是否正常,如有問題 dmesg 看一下。
java
java 環境已經有人幫忙做好,只要一點小改。
Unslung/WL500g packages available for Oleg’s firmware
改 /opt/etc/ipkg.conf 設定,讓 ipkg 裝別的地方。
src unslung http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable
dest root /
- nano /opt/etc/ipkg.conf
- ipkg update
- mkdir -p /opt/usr/lib
- ipkg install uclibc
- ipkg install sablevm
- ipkg install jikes
- ipkg install zlib
- ipkg install popt
- ipkg list_installed
最後安裝結果。
ipkg - 0.99.149-2 -
jikes - 1.22-1 - IBM java compiler
libstdc++ - 0.2.0-4 - =Standard C++ library, wrapped for uClibc++
libtool - 1.5.10-2 - Library tools.
libuclibc++ - 0.2.1-5 - C++ standard library d....
nano - 1.2.5-3 - A pico like editor
ncurses - 5.5-1 - NCurses libraries
popt - 1.7-2 - A C library for parsing command line parameters.
sablevm - 1.13-2 - A robust... JVM.
uclibc - 0.9.28-1 - micro C library for embedded Linux systems
zlib - 1.2.3-1 - zlib is a .....
如果沒裝 popt/zlib 執行的時候會提醒你。
$ sablevm --version
SableVM version 1.13
- compile date and time: 2006-08-12 14:14:23 UTC
- gcc version: 3.4.6
- 'real life brokenness' features enabled
- copying garbage collection
- bidirectional object layout
- direct-threaded interpreter
測一下 HelloWorld。
- cd /opt/tmp
- nano HelloWorld.java
- jikes -classpath /opt/lib/sablevm/lib/libclasspath.jar HelloWorld.java
- sablevm HelloWorld
Samba
- mkdir /opt/etc/samba
- nano /opt/etc/samba/smb.conf
- nano /opt/etc/init.d/S97Samba
- chmod 755 /opt/etc/init.d/S97Samba
smb.conf
[global]
workgroup = WORKGROUP
guest account = nobody
security = share
browseable = yes
guest ok = yes
guest only = no
log level = 1
max log size = 100
encrypt passwords = no
dns proxy = no
[smbshare]
path=/opt/share
writeable = yes
browseable = yes
force user = admin
S97Samba
#!/bin/sh
/usr/sbin/smbd -D -l /opt/var/log/smbd.log -s /opt/etc/samba/smb.conf
/usr/sbin/nmbd -D -n myasus -o -l /tmp -s /opt/etc/samba/smb.conf
最後要改起動檔 post-boot 加入一行 /opt/etc/init.d/rc.unslung ,代表啟動 S 開頭的服務。
- nano /usr/local/sbin/post-boot
- flashfs save && flashfs commit && flashfs enable && reboot
- netstat -at
\\192.168.1.1\smbshare 看看。
加大記憶體
預設只有 16MB RAM,但是板子上有 32MB,所以改一下 NVRAM 參數來用到 32MB RAM。
注意這是 gp 做法,其他板子不確定。
- nvram set sdram_init=0×0009
- nvram set sdram_ncdl=0
- nvram commit
- reboot
- free
一些觀察
- 安裝 Oleg 之後,網頁介面 USB Application – FTP Server 雖說 enable,但是檢驗 netstat/ps
看不到,想要 ftp 也是不行,這個設定跟掛載 USB 硬碟有關係,既然是用 post-boot 手動掛上,
如果需要 ftp 也要手動掛上。
- dropbear 沒有支援 sftp,只有 scp,要用 winscp 也需要一點會出現錯誤訊息,找到進階
選項的 SCP 部分,將 Lookup user groups 關掉就可以。參考 UseDropBearForRemoteAccess
獲得更多資訊。
links
關於核心效能參數的調整與強化參考 AP 進階改造,下載破表
很多的 Oleg 教學參考 Tutorials – Oleg
編譯官方核心的教學參考 HOW-TO: Compile a firmware for the WL-700g from the GPL 1.0.4.2
差別在 gp 部份,目前新版本為 24-Aug-2006 的 GPL_ToolChain.zip。
http://files.wl500g.info/asus/wl500gp/gpl/
ftp://dlsvr01.asus.com/pub/ASUS/wireless/WL-500gP/GPL_ToolChain.zip
一些 USB轉UART 使用 pl2303 的線應該可用,參考
Use an USB-serial port converter
外接基本 LCD 模組的做法參考 Connecting a LCD to the WL500g