
Openwrt เป็น Linux distribution ที่ออกมาเพื่อใช้งานกับ Wireless Router เท่านั้นในระยะแรก และในภายหลังได้มีการปรับปรุงให้ใช้กับอุปกรณ์ได้หลากหลายมากขึ้น เช่น ADSL Modem, ADSL Router, Wireless Harddisk ไปจนถึงคอมพิวเตอร์ตระกูล X86 จนในปัจจุบันผู้พัฒนา Openwrt ได้ประกาศให้ Openwrt เป็น Distribution ที่รองรับอุปกรณ์สมองกลฝังตัว แต่มีอุปกรณ์บางรุ่นเท่านั้นที่รองรับกับ Openwrt ซึ่งรายการของอุปกรณ์ที่สามารถใชักับ Openwrt ได้อยู่ใน http://toh.openwrt.org ในที่นี้จะขอกล่าวถึงเฉพาะ Wireless Router เป็นหลัก ซึ่งผู้เขียนขอแนะนำให้ใช้อุปกรณ์ของบริษัท ASUS(wl500g, wl500g-Deluxe, wl500g-Premium) เนื่องจากอุปกรณ์หลายตัวของทางบริษัท ASUS จะใช้ระบบปฏิบัติการลินุกซ์และเปิดเผย source code (บางบริษัทแม้จะใช้ระบบปฏิบัติการลินุกซ์แต่ไม่ได้เปิดเผย source code หรืออาจใช้ระบบปฏิบัติการอื่นที่เป็น commercial เช่น VxWork ทำให้ไม่สามารถปรับเปลี่ยนอะไรได้มากนัก) โดยอุปกรณ์ของบริษัท ASUS สามารถติดต่อซื้อได้จาก www.dcomputer.com ซึ่งเป็นตัวแทนจำหน่ายในไทย นอกจากอุปกรณ์ของบริษัท ASUS แล้วอุปกรณ์ของบริษัท Linksys ก็เป็นที่นิยมเช่นกัน โดยเฉพาะรุ่น WRT54GL และ NSLU2 ซึ่งมีการใช้งานอย่างกว้างขวาง
หมายเหตุ นอกจาก Openwrt แล้ว ยังมี firmware ที่ทำงานในลักษณะเดียวกันคือ DD-WRT และ OLEG
ขั้นตอนแรกที่ผู้ใช้ต้องทำเพื่อใช้งาน Openwrt คือการลง firmware ตัวใหม่ โดย firmware ที่สามารถใช้ได้จะมีอยู่หลายเวอร์ชัน แต่ในที่นี้ผู้เขียนจะกล่าวถึงเวอร์ชั่น RC5 ซึ่งเป็นเวอร์ชันที่ผู้เขียนใช้งานอยู่ โดยเวอร์ชั่นนี้จะใช้เคอร์เนล 2.4.30 และสำหรับ firmware ที่ต้องลงขึ้นอยู่กับรุ่นและไมโครโปรเซสเซอร์ที่อยู่ภายในอุปกรณ์ ส่วนวิธีการลง firmware ของแต่ละรุ่นสามารถดูได้จาก http://toh.openwrt.org โดยวิธีการลง firmware สามารถลงได้ 5 วิธี คือ
1. การลง firmware โดยใช้ web interface ที่มากับอุปกรณ์
2. การลง firmware โดยใช้โปรแกรมที่มากับผู้ผลิต
3. การลง firmware โดยใช้คำสั่ง tftp
4. การลง firmware โดยผ่านทาง Bootloader(serial port)
5. การลง firmware โดยใช้ JTAG(hardware debugger)
หมายเหตุ ปัจจุบันทางผู้พัฒนา Openwrt ได้ออก firmware ตัวใหม่โดยใช้ชื่อ Kamikaze ซึ่งรองรับอุปกรณ์ได้มากขึ้น และใช้เคอร์เนล 2.6.xx
ผู้เขียนขอแนะนำให้ลง firmware โดยวิธีที่ 3 คือใช้คำสั่ง tftp เพราะจากการทดสอบเป็นวิธีที่ใช้ได้ผลมากที่สุด เพราะในบางรุ่นการลง firmware ตัวอื่นที่ไม่ใช่firmware จากผู้ผลิต ด้วยวิธีที่ 1 และ 2 ไม่สามารถทำได้ ส่วนวิธีที่ 4 ผู้ใช้ก็จำเป็นต้องเปิดกล่องของตัวอุปกรณ์และต้องใช้ hardware เพิ่ม ซึ่งไม่สะดวกสำหรับผู้เริ่มต้น โดยในที่นี้ผู้เขียนขอกล่าวถึงเฉพาะตัวอย่างการลง firmware ของ wireless router รุ่น wl500g-Deluxe ซึ่งมีขั้นตอนดังนี้
1. เข้าสู่การทำงานในโหมด Failure โดยถอดสายไฟเลี้ยงออกในกรณีที่ต่อไฟเลี้ยงอยู่
2. กดปุ่ม reset(ปุ่มที่อยู่ใกล้ๆกับสายไฟเลี้ยง)ค้างไว้ แล้วเสียบสายไฟเลี้ยงในขณะที่ปุ่ม reset ถูกกดอยู่
3. กด reset ค้างไว้ประมาณ 3 วินาที หรือจนกว่าไฟแสดงสถานะ PWR จะเริ่มกระพริบช้าๆ
4. ลอง ping ไปที่ IP address ของตัว wireless router เพื่อทดสอบว่าได้เข้าสู่โหมด Failure จริง แต่ถ้า ping ไม่ได้ ให้ลองทำใหม่ตั้งแต่ขั้นตอนแรก
5. ส่ง firmware ไปที่ wireless router โดยซึ่งมีขั้นตอนดังนี้
กรณีใช้ระบบปฏิบัติการ Linux
- tftp 192.168.1.1 ในกรณีที่ IP address ของ wireless router เป็น 192.168.1.1
- binary
- trace
- put openwrt-xxx-x.x-xxx.trx ซึ่งในที่นี้ใช้ไฟล์ http://downloads.openwrt.org/whiterussian/rc5/bin/openwrt-brcm-2.4-jffs2...
กรณีใช้ระบบปฏิบัติการ Windows
- tftp -i 192.168.1.1 put openwrt-xxx-x.x-xxx.trx
เมื่อลง firmware เสร็จแล้วตัว wireless router ควรจะรีบู๊ตอัตโนมัติ แต่ถ้า wireless router ไม่รีบู๊ตให้รอประมาณ 5 นาที แล้วค่อยถอดไฟเลี้ยงแล้วเสียบใหม่ ถ้าไม่มีอะไรผิดพลาดผู้ใช้จะสามารถสื่อสารกับอุปกรณ์ปลายทางได้โดยใช้คำสั่ง telnet ชี้ไปที่ IP address ของอุปกรณ์ปลายทาง(ตัว firmware ส่วนใหญ่หรือทั้งหมดจะปิดการสื่อสาร telnet ไว้) ซึ่ง IP address ให้ใช้ค่าเริ่มต้นของอุปกรณ์ ซึ่งจะอยู่ในคู่มือหรือที่ตัวอุปกรณ์ แต่ส่วนมากจะเป็น 192.168.1.1 เมื่อใช้คำสั่ง telnet ตามวิธีที่กล่าวไว้ข้างต้นแล้ว ผู้ใช้จะได้หน้าจอ terminal ของตัวอุปกรณ์มา
ซึ่งในตอนนี้ผู้ใช้สามารถปรับเปลี่ยนโปรแกรมและค่าต่างๆของอุปกรณ์ได้แล้ว แต่ถ้าใช้ telnet อยู่อาจไม่ปลอดภัย เพราะว่าการสื่อสารโดยใช้ telnet ไม่มีการทำ authentication และไม่มีการเข้ารหัสข้อมูล ทำให้ผู้ใช้คนอื่นอาจเข้าถึงอุปกรณ์ของผู้ใช้ได้ ผู้เขียนจึงแนะนำให้เปลี่ยนจากการสื่อสาร telnet เป็น secure shell(SSH) ซึ่งมีการทำ authentication และการเข้ารหัสข้อมูล ซึ่งทำได้โดยการตั้ง password โดยใช้คำสั่ง passwd หลังจากตั้ง password แล้ว ผู้ใช้จะไม่สามารถติ่ดต่อกับอุปกรณ์ผ่านการสื่อสาร telnet ได้อีก แต่จะต้องใช้การสื่อสารแบบ secure shell แทน ซึ่งสามารถทำได้โดยใช้คำสั่ง ssh หรือใช้โปรแกรม putty แล้วชี้ไปที่ IP address ของอุปกรณ์ จะปรากฏหน้าจอให้พิมพ์ user และ password โดย user ให้ใช้เป็น root ส่วน password ให้ใช้ password ที่กำหนดโดยคำสั่ง passwd เมื่อป้อนค่าเสร็จก็จะได้หน้าจอ terminal มาคล้ายกับตอนที่ใช้คำสั่ง telnet และต่อจากนี้ผู้ใช้จะสามารถเข้าไปปรับเปลี่ยนค่าต่างๆของอุปกรณ์ผ่านทาง browser เช่น Mozilla Firefox หรือ Internet Explorer ได้แล้ว เมื่อใส่ IP address ของอุปกรณ์ที่ url ของ browser จะปรากฏ web interface ขึ้นมา
การลงโปรแกรมหรือ kernel module เพิ่มเติมสำหรับ Openwrt จะมีกระบวนการคล้ายกับคำสั่ง apt-get โดยใช้คำสั่ง ipkg ซึ่งถ้าอุปกรณ์ต่อกับเครือข่าย internet อยู่ จะสามารถลงได้โดยใช้คำสั่ง ipkg install ตามด้วยชื่อ package ที่ต้องการ เช่น ถ้าจะลงโปรแกรม vsftpd ก็พิมพ์คำสั่ง ipkg install vsftpd โดยกลไลที่โปรแกรม ipkg ทำก็คือโปรแกรม ipkg จะไปเรียกโปรแกรม wget ให้ไปโหลดไฟล์จากเซิร์ฟเวอร์ที่ http://openwrt.org อีกทีหนึ่ง แต่ก่อนจะลงโปรแกรมควรจะปรับเวอร์ชันของโปรแกรมให้เป็นเวอร์ชันล่าสุดก่อน โดยใช้คำสั่ง ipkg update และผู้ใช้สามารถดู package ที่สามารถ download ได้โดยคำสั่ง ipkg list แต่ในกรณีที่อุปกรณ์ไม่ได้ต่ออยู่กับเครือข่าย internet ให้ใช้คำสั่ง ipkg install ./ ตามด้วยชื่อ package โดยในกรณีนี้ผู้ใช้จำเป็นต้อง download package จาก http://downloads.openwrt.org/whiterussian/rc5/packages/ มาที่เครื่องคอมพิวเตอร์ก่อน ซึ่ง package จะมี suffix เป็น .ipk หลังจากนั้นจึงส่ง package ดังกล่าวไปที่อุปกรณ์ปลายทางโดยใช้การสื่อสาร ftp อีกทีหนึ่ง
แพคเกจและโปรแกรม ที่แนะนำมีดังนี้
หมายเหตุ package ที่ขึ้นต้นด้วย kmod คือ kernel module
แต่บางโปรแกรมอาจไม่มี package ให้ download ดังนั้นผู้ใช้จำเป็นต้องคอมไพล์โปรแกรมจาก source code เอง ซึ่งสามารถทำได้ 2 วิธี คือ
1. คอมไพล์แบบ cross compile หรือ cross platform คือ ผู้ใช้ต้องทำการคอมไพล์ source code บนเครื่องคอมพิวเตอร์ แล้วจึงนำไฟล์ที่คอมไพล์ได้ไปใช้งานบน router วิธีนี้ง่ายต่อการพัฒนาเพราะผู้ใช้สามารถพัฒนาและดีบักโปรแกรมเกือบทั้งหมดได้บนคอมพิวเตอร์ และเมื่อแน่ใจว่าโปรแกรมทำงานได้แล้ว จึงส่งโปรแกรมดังกล่าวไปที่ router ซึ่งวิธีนี้เป็นวิธีที่นิยมใช้มากกว่าวิธี native compile โดยสามารถดาวน์โหลดไฟล์ที่เกี่ยวข้องได้จาก http://downloads.openwrt.org/whiterussian/rc5/OpenWrt-SDK-Linux-i686-1.t... เมื่อแตกไฟล์ดังกล่าวเสร็จ ให้เข้าไปที่ไดเรคทอรี staging_dir_mipsel/bin จะพบคอมไพเลอร์สำหรับใช้งานกับไมโครโปรเซสเซอร์ตระกูล MIPS ซึ่งเป็น CPU ที่อยู่ใน wireless router รุ่น wl500g-deluxe ให้ทำการคัดลอกไฟล์ทั้งหมดในไดเรคทอรีดังกล่าวไปที่ /usr/bin หรือ export path ดังกล่าว โดยใช้คำสั่ง export PATH=$PATH:/YOUR_PATH เพื่อให้เรียกใช้งานได้จากทุกที่ แต่ผู้ใช้ต้องเข้าใจว่าโปรแกรมที่คอมไพล์โดยคอมไพเลอร์ดังกล่าว จะใช้ได้กับ wireless router หรืออุปกรณ์ที่ใช้ไมโครโปรเซสเซอร์ตระกูล MIPS เท่านั้น จะไม่สามารถใช้งานได้กับเครื่องคอมพิวเตอร์ส่วนบุคคลซึ่งใช้ส่วนประมวลผล X86(Pentium, AMD)
หมายเหตุ อุปกรณ์ประเภท wireless router จะไม่มีส่วนแสดงผลที่เป็นจอภาพ ดังนั้นถ้าผู้ใช้จะนำโปรแกรมมาคอมไพล์ โปรแกรมดังกล่าวต้องทำงานในโหมด command line เท่านั้น หรือถ้าโปรแกรมทำงานในโหมดกราฟฟิค ผู้ใช้จำเป็นต้องตัดโค้ดบางส่วนออก เพื่อให้เหลือแต่ส่วนที่เป็น command line
2. คอมไพล์แบบ native compile คือผู้ใช้ทำการคอมไพล์โดยใช้อุปกรณ์ router วิธีนี้ผู้ใช้ต้อง upload ไฟล์ source code ไปไว้ที่ router ก่อน แล้วจึงสั่งคอมไพล์ผ่าน terminal ของ router อีกทีหนึ่ง วิธีนี้มีข้อดีตรงที่สามารถเขียนโปรแกรมและทดสอบได้ทันที โดยไม่ต้อง upload ไฟล์จากคอมพิวเตอร์ แต่ก็มีข้อเสียตรงที่ router จะคอมไพล์โปรแกรมใช้เวลานานกว่าคอมพิวเตอร์มาก เนื่องจากความเร็วของ cpu และ ram ของ router น้อยกว่าคอมพิวเตอร์มาก และอุปกรณ์ปลายทางต้องมีพื้นที่สำหรับเก็บโปรแกรมที่ใช้ในการคอมไพล์ โดยขั้นตอนการติดตั้งเครื่องมือสำหรับ native compile มีดังนี้
- ดาวน์โหลด http://www.uclibc.org/downloads/root_fs_mipsel.ext2.bz2
- แตกไฟล์ที่ดาวน์โหลดออกจะได้ไฟล์ root_fs_mipsel.ext2
- ipkg install kmod-loop
- ipkg install kmod-ext2
- mkdir /mnt/rootfs
- mount -o loop root_fs_mipsel.ext2 /mnt/rootfs
ในไดเรคทอรี่ /mnt/rootfs/usr/bin จะมีโปรแกรมสำหรับคอมไพล์ เช่น gcc g++ ให้เพิ่ม path ดังกล่าวเข้าไปโดยคำสั่ง
export PATH=$PATH:/mnt/rootfs/usr/bin
ln -s /mnt/rootfs/usr/include/ /usr/include
example ลองคอมไพล์โปรแกรมง่ายๆ โดยใช้โปรแกรม vi สร้างไฟล์ test.c ซึ่งมีรายละเอียดดังนี้
#include <stdio.h>
int main(void)
{
printf("test\n");
return 0;
}
พิมพ์คำสั่ง gcc -o test test.c -I/mnt/rootfs/usr/include/ เพื่อคอมไพล์โปรแกรม
รันโปรแกรมโดยพิมพ์ ./test จะได้ผล
test
example ทดสอบคอมไพล์โปรแกรมจาก source code ใน internet
- cd /tmp
- wget http://mxhaard.free.fr/spca50x/Download/spcaview-20071224.tar.gz
- tar -zxvf spcaview-20071224.tar.gz
- cd spcaview-20071224
- ใช้โปรแกรม vi เพื่อแก้ไข Makefile ที่ บรรทัด all: spcaview spcaserv spcacat
ให้ลบ spcaview ออก ให้เหลือเพียง all: spcaserv spcacat
หมายเหตุ โปรแกรม spcaview เป็นโปรแกรมที่ต้องใช้จอแสดงผล ซึ่งอุปกรณ์พวก router นั้นไม่มี จึงต้องเอาออก ไม่เช่นนั้นจะคอมไพล์โปรแกรมไม่่ผ่าน
จากนั้นแก้ที่บรรทัด SERVFLAGS= -O2 -DLINUX $(WARNINGS)
โดยเพิ่ม -I/mnt/rootfs/usr/include ต่อท้ายบรรทัดดังกล่าว
- พิมพ์ make จะเป็นการคอมไพล์โปรแกรม
- ถ้าสำเร็จจะขึ้นข้อความ
gcc -O2 -DLINUX -I/mnt/rootfs/usr/include -c -o server.o server.c
gcc -O2 -DLINUX -I/mnt/rootfs/usr/include -c -o spcav4l.o spcav4l.c
....
และจะได้โปรแกรม 2 โปรแกรมคือ spcacat และ spcaserv
ทดสอบรันโปรแกรมโดยพิมพ์ ./spcacat ถ้าไม่มีอะไรผิดพลาดจะขึ้นข้อความดังข้างล่าง
Spcaview version: 1.1.8 date: 25:12:2007 (C) mxhaard@magic.fr
video /dev/video0
Camera found: Z-star Vimicro zc0301p
VIDIOCGPICT brightnes=32768 hue=0 color=0 contrast=32768 whiteness=0depth=8 palette=21
...........
ข้อดี
ข้อเสีย
ข้อแนะนำเพิ่มเติม
ข้อมูลเพิ่มเติม
http://wiki.openwrt.org/
http://www.macsat.com
http://wl500g.info/
http://downloads.openwrt.org/sources/
RocketTeam
พอจะแนะแนวเรื่องการ เซ็ค cross ของ MIPS ได้ไหมครับ
MIPS ที่กล่าวถึงในบทความของ Broadcom นะครับ
Openwrt - มาโม router กันดีกว่า
ได้ backup
ได้ backup ไว้หรือเปล่าอ่ะ