Submitted by admin on Sat, 01/09/2010 - 01:16
ในตอนนี้จะรวบรวมกลเม็ดเคล็ด(ไม่)ลับถึงอาวุธยุทโธปกรณ์(Utilities Program)ที่ติดมากับระบบOpenWrtให้ทราบกันนิดนึง ก่อนเคลื่อนกำลังไปรบกันจริงนะครับ
เคล็ดลับที่ 1. opkg
หากบนวินโดวส์มี Add/remove Program บน OpenWrt ก็มี opkg ที่ทำหน้าที่คล้ายๆกัน opkg เป็นโปรแกรมที่จัดการในการติดตั้ง/ถอด/ค้นหา Package(ชุดของโปรแกรม) ต่างๆที่อยู่บนคลังโปรแกรม(repository)
ที่ตั้งของคลังโปรแกรมจะถูกกำหนดไว้ในไฟล์ /etc/opkg.conf โดยมีข้อความดังนี้
src/gz snapshots http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /jffs
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /jffs
หากลองใช้เวบบราวเซอร์ไปยังตำแหน่ง http://downloads.openwrt.org/snapshots/trunk/brcm-2.4/packages/ จะเห็น Package ของโปรแกรมสำเร็จรูปมากมายที่พร้อมติดตั้งและใช้ได้ทันทีสำหรับWRT54GL เราลองมาติดตั้งกันสักโปรแกรมนะครับ
1.1 เริ่มต้นด้วยการ update รายการของโปรแกรมที่อยู่ในคลังก่อนด้วยคำสั่ง
# opkg update

1.2 เราสามารถใช้คำสั่งต่อไปนี้ในการแสดงรายการโปรแกรม
1.2.1 opkg list เพื่อแสดงรายการทั้งหมด
1.2.2 opkg list | more เพื่อแสดงรายการทีละหน้า เคาะแป้น Page Up/Page Down เพื่อไปยังหน้าถัดไปหรือก่อนหน้า หากกดปุ่ม q จะเป็นการจบการดูรายการ
1.2.3 opkg list | grep text เพื่อเป็นการค้นหารายชื่อที่เกี่ยวข้องกับ text ที่เราระบุ
จากตัวอย่างเราจะลองค้นหาโปรแกรม nano (Editor ที่ง่ายกว่า vi) และทำการติดตั้งนะครับ

การค้นหาเจอโปรแกรมอยู่ในคลังโปรแกรม เสร็จแล้วก็ทำการติดตั้งโดยใช้คำสั่ง opkg install nano
อุ๊บ!!! ปรากฏว่าเจอปัญหาครับ ถ้าหากท่านติดตั้งสำเร็จก็ยินดีด้วยครับ แต่ถ้าหากเจอปัญหาเหมือนตัวอย่างก็ให้ทำดังนี้ครับ
Error ที่เกิดขึ้นแสดงว่าตัวคลังโปรแกรมของท่านทันสมัยกว่าตัวKernelครับให้ท่านกลับไป
- Update Kernel (svn update) และ Compile (make) ใหม่บน Ubuntu (กลับไปดูวิธีในตอนที่ 4 นะครับ)
- จากนั้นก็ Flash WRT54GL ของท่านใหม่ (ดูหมายเหตุสำหรับเทคนิคใหม่ในการ Flash Image หรือจะทำตามเทคนิคเก่าในตอนที่ 7)
- Set up Network (file /etc/config/network) และ Wireless network (file /etc/config/wireless) ใหม่ (วิธีการอยู่ในตอนที่ 8)
แล้วถึงค่อยกลับมาติดตั้งโปรแกรม nano ครับ ถือเป็นการทบทวนวิทยายุทธนะครับ (นี่คือเหตุผลว่าทำไมเราควรที่จะรู้จักการสร้าง Kernel Image เอง)
หลังจากทำการ Update kernel แล้ว ก็จะได้ผลดังนี้ครับ

จากนี้เราก็มีโปรแกรม nano สำหรับใช้แก้ไขไฟล์ได้ง่ายขึ้นครับดังตัวอย่าง

==============================================
หมายเหตุ เคล็ดลับการ Flash Image จาก Linux Console
ถ้าหากท่านมีเครื่องในเครือข่ายที่ได้ทำการเซ็ทให้เป็น webserver และมี Serial Portต่อกับWRT54GL เราสามารถทำการ Flash File โดยไม่ต้องปลด WRT54GL ออกจากเน็ทเวิร์คดังนี้ครับ
1. พื้นฐานของระบบเป็นดังนี้ครับ คือ
1.1 ผมมีWebserver วิ่งอยู่จากเครื่องIP Address 192.168.1.74
1.2 ELC(WRT54GL) ของผมมี Serial Port ต่ออยู่กับ PC
1.3 ELC(WRT54GL) ของผมมีต่ออยู่กับเครือข่ายหลักผ่าน Wireless ด้วย IP Address 192.168.1.111
2. ย้าย Image ที่ได้จากการ Compile Kernelใหม่ไปยัง webserver
$ sudo cp ~/openwrt/kamikaze/bin/openwrt-brcm-2.4-squashfs.trx /var/www
3. ในขณะนี้ ELC ของท่านต่อกับเน็ทเวิร์คผ่าน Wireless ท่านสามารถเข้าไปในระบบด้วย telnet หรือ serial port แล้วพิมพ์คำสั่งดังนี้
# wget http://192.168.1.74/openwrt-brcm-2.4-squashfs.trx -O - | mtd -e linux -r write - linux

โปรแกรม wget จะ download จะดึงไฟล์จาก webserver แล้วนำมาแทนที่ partition linux พร้อมกับรีบูทเครื่องเมื่อเสร็จเรียบร้อยแล้ว หลังจากบูทแล้ว ELC ของท่านจะมีสภาพกลับไปตั้งต้นจุดแรกใหม่
คำเตือน!!!
- ถ้าหากมีการขัดข้องระหว่างการดึงไฟล์ ELC ท่านอาจจะ Brick ให้ไปใช้วิธีที่แสดงในตอนที่ 7 ทำการ Flash Imageใหม่
- ในระหว่างปฏิบัติการ จะมีช่วงนึงที่โปรแกรมจะชะงัก(stalled) ให้รอสักครู่โปรแกรมจะทำงานต่อ
ขณะนี้ ELC ของท่านก็จะมี IP Address 192.168.1.1 และการเชื่อมต่อกับระบบหลักด้วย Wireless ก็จะถูก Reset ซึ่งเป็นการปลด ELC ของท่านจากระบบเน็ทเวิร์คโดยอัตโนมัติ ท่านจะต้องใช้ Serial Port กลับไปแก้ไขไฟล์ /etc/config/network และ /etc/config/wireless ให้ถูกต้อง เมื่อไฟล์ถูกแก้ไขให้ถูกต้องและ restart network หรือ reboot ELCใหม่ ท่านก็จะกลับไปเชื่อมต่อกับเน็ทเวิร์คผ่าน WiFi โดยอัตโนมัติ
==============================================
เคล็ดลับที่ 2. CFE (Common Firmware Environment)
ถ้าหากท่านได้ต่อ Serial Interface กับ ELC ของท่าน ท่านสามารถเข้าถึง CFE ซึ่งเป็น Boot Loader ของระบบได้ โดยการกด Ctrl-C ในระหว่างการบูท ซึ่งจะนำท่านไปยัง CFE Prompt

คำสั่งที่ CFE รองรับจะมีดังนี้
CFE> help
Available commands:
Available commands:
rndis Broadcom USB RNDIS utility.
et Broadcom Ethernet utility.
nvram NVRAM utility.
reboot Reboot.
flash Update a flash memory device
memtest Test memory.
f Fill contents of memory.
e Modify contents of memory.
d Dump memory.
u Disassemble instructions.
autoboot Automatic system bootstrap.
batch Load a batch file into memory and execute it
go Verify and boot OS image.
boot Load an executable file into memory and execute it
load Load an executable file into memory without executing it
save Save a region of memory to a remote file via TFTP
ping Ping a remote IP host.
arp Display or modify the ARP Table
ifconfig Configure the Ethernet interface
show devices Display information about the installed devices.
unsetenv Delete an environment variable.
printenv Display the environment variables
setenv Set an environment variable.
help Obtain help for CFE commands
et Broadcom Ethernet utility.
nvram NVRAM utility.
reboot Reboot.
flash Update a flash memory device
memtest Test memory.
f Fill contents of memory.
e Modify contents of memory.
d Dump memory.
u Disassemble instructions.
autoboot Automatic system bootstrap.
batch Load a batch file into memory and execute it
go Verify and boot OS image.
boot Load an executable file into memory and execute it
load Load an executable file into memory without executing it
save Save a region of memory to a remote file via TFTP
ping Ping a remote IP host.
arp Display or modify the ARP Table
ifconfig Configure the Ethernet interface
show devices Display information about the installed devices.
unsetenv Delete an environment variable.
printenv Display the environment variables
setenv Set an environment variable.
help Obtain help for CFE commands
For more information about a command, enter 'help command-name'
*** command status = 0
CFE>
*** command status = 0
CFE>
รายละเอียดวิธีการใช้ CFE หาอ่านได้จาก http://melbourne.wireless.org.au/files/wrt54/cfe.pdf
เคล็ดลับที่ 3. uci (Unified Configuration Interface)
uci เป็นโปรแกรมที่ใช้จัดการ file config ของ OpenWrt ต่างๆที่อยู่ภายใต้ไดเร็คทอรี่ /etc/config ให้มีรูปแบบคล้ายๆการใช้ nvram มาลองดูตัวอย่างกันนะครับ

1. ลองใช้คำสั่ง cat /etc/config/system เพื่อดู content ของไฟล์นะครับ โปรดสังเกตุ hostname ที่เป็น OpenWrt
2. ซึ่งไฟล์ /etc/config/system นี้เราสามารถใช้ uci show เพื่อดูค่าเช่นกัน (เราใช้คำสั่ง grep เข้ามาช่วยให้แสดงเฉพาะบรรทัดที่มีข้อความ system) โดยรูปแบบจะเป็นอย่าง block ที่ 2
3. ลองใช้คำสั่ง uci ในการแก้ไขโดยเปลี่ยนชื่อ hostname เป็น ELC
4. จากนั้นลองดู content ของไฟล์ /etc/config/system จะเห็นว่ามีค่าเปลี่ยนไปครับ
เคล็ดลับที่ 4. webif [A HTTP administrative console for OpenWrt]
เคล็ดลับสุดท้ายนี้ไม่เกี่ยวกับโครงการที่ผมกำลังจะนำ ELC ไปใช้ แต่สำหรับผู้ยังอยากใช้ OpenWrt เป็น Router อยู่ และมองหาระบบจัดการด้วยWeb Interface
โดย OpenWrt มี Package ที่ใช้ในงานเซ็ทอัพผ่านเวบเพจที่ชื่อว่า webif โดยทำการติดตั้งดังนี้
# opkg update
# opkg install webif
จากนั้นท่านก็สามารถที่จะเข้าจัดการกับเครื่องผ่านทาง Web Browser ด้วย URL http://192.168.1.111

เมื่อเข้าไปครั้งแรก ระบบจะให้กำหนด password (หลังจากท่านกำหนดตรงจุดนี้แล้ว ท่านจะเข้าELCด้วย telnet ไม่ได้อีกต่อไปแต่จะต้องใช้โปรแกรม ssh ในกรณีที่เป็น linux หรือโปรแกรม putty สำหรับ Windows http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
webif มีส่วนต่างๆในการเซ็ทอัพเครื่องมากมายรวมถึงการติดตั้งPackageใหม่ๆด้วยครับ
เคล็ดลับสุดท้ายเคล็ดลับที่ 5. iwlist
ในกรณีที่ท่านต้องการทราบว่าในละแวกบริเวณที่ท่านอยู่มี WiFi อะไรอยู่บ้างให้ใช้คำสั่ง
# iwlist wl0 scan

iwlist ยังมี option อีกมากมายครับ ลองใช้คำสั่ง iwlist เฉยๆก็จะแสดง option ให้เห็นครับ
ในตอนต่อไป เราจะเริ่มเข้าสู่ฮาร์แวร์แล้วนะครับ เนื่องจาก WRT54G มี GPIO ที่จำกัดมาก ดังนั้นผมจึงต้องหาทางขยายมันด้วยการเพิ่มเติมความสามารถทางด้าน i2c bus ซึ่งเป็นเรื่องใหม่สำหรับผมเหมือนกันในการใช้ i2c ผ่าน Linux Device Driver ลองติดตามกันคราวหน้านะครับ ว่าต้องไปลุยอะไรกับบ้าง......