Openwrt - มาโม router กันดีกว่า

รูปภาพของ golf24
Openwrt:ลินุกซ์สำหรับอุปกรณ์สมองกลฝังตัว(Embedded Devices)

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 อีกทีหนึ่ง

แพคเกจและโปรแกรม ที่แนะนำมีดังนี้

  • alsa-utils และ alsa-lib สำหรับเป็นไดรเวอร์ของอุปกรณ์ประเภท audio
  • ctorrent สำหรับ download ไฟล์ประเภท bit torrent
  • fdisk สำหรับแบ่งและจัดการ partition
  • flite โปรแกรมเปลี่ยนข้อความเป็นเสียงพูด(text-to-speech)
  • lsusb/usbutils สำหรับตรวจสอบว่าบัส usb ของ router มีอุปกรณ์อะไรต่ออยู่บ้าง
  • madplay โปรแกรมสำหรับเล่นไฟล์เพลง(mp3, ogg, etc)
  • motion โปรแกรมบันทึกภาพจากอุปกรณ์วีดีโอ โดยจะเน้นบันทึกภาพเฉพาะเมื่อมีการเคลื่อนไหวเกิดขึ้น
  • mpg123 สำหรับเล่นไฟล์เพลง เช่น ไฟล์.mp3
  • ntpclient สำหรับเป็น ntp client เพื่ออ่านค่าเวลามาจาก ntp server
  • pciutils สำหรับตรวจสอบว่าบัส pci ของ router มีอุปกรณ์อะไรต่ออยู่บ้าง
  • vsftpd สำหรับเป็น ftp server เพื่อรับ-ส่งไฟล์ระหว่าง router กับ PC
  • kmod-usb2 สำหรับเป็นไดรเวอร์ของอุปกรณ์ usb ที่เป็นเวอร์ชั่น 2.0
  • kmod-usb-printer สำหรับเป็นไดรเวอร์ของอุปกรณ์ usb เป็น printer/parellel
  • kmod-usb-uhci สำหรับเป็นไดรเวอร์ของ usb host ที่เป็นแบบ UHCI
  • kmod-usb-storage สำหรับเป็นไดรเวอร์ของอุปกรณ์ usb ที่ใช้เก็บข้อมูล เช่น usb flashdrive
  • kmod-usb-serial สำหรับเป็นไดรเวอร์ของอุปกรณ์แปลงการสื่อสารแบบ usb เป็น rs232
  • kmod-vfat สำหรับเป็นไดรเวอร์ของระบบไฟล์แบบ FAT16 และ FAT32
  • ser2net โปรแกรมสำหรับแปลงการเชื่อมต่อระหว่างพอร์ตอนุกรมกับ TCP
  • spca5xx_lite สำหรับเป็นไดรเวอร์สำหรับต่อกล้อง webcam ซึ่งรายการของกล้องที่รองรับดูได้จาก http://mxhaard.free.fr/spca5xx.html
  • spcacat สำหรับถ่ายภาพจากกล้อง webcam
  • spcaserv สำหรับทำให้อุปกรณ์ router เป็น webcam server ซึ่งทางฝั่ง client ต้องใช้โปรแกรม spcaview เข้ามาดู
  • wl สำหรับเป็นโปรแกรมช่วยในการเชื่อมต่อกับอุปกรณ์ WIFI
  • wput สำหรับเป็น ftp client เพื่อส่งไฟล์ไปยัง ftp server

หมายเหตุ 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
...........

 


 

ข้อดี

  • สามารถสร้างอุปกรณ์ที่ทำงานเฉพาะทางได้ ในราคาที่ถูก
  • เป็น distribution ที่ค่อนข้างเสถียรและเป็นที่ยอมรับ
  • มีผู้ใช้งานค่อนข้างมาก ทำให้เมื่อเกิดปัญหาสามารถสอบถามผู้อื่นได้

ข้อเสีย

  • ความเร็วของ CPU ค่อนข้างต่ำ ส่วนใหญ่จะอยู่ในช่วง 100 MHz ถึง 200 Mhz
  • อุปกรณ์ที่นำมาใช้งานอาจเลิกผลิต ทำให้ผู้ใช้ต้องหาอุปกรณ์ตัวอื่นมาแทน
  • ในบางรุ่น ผู้ผลิตอาจเปลี่ยนฮาร์ดแวร์จากระบบที่ทำงานด้วยไมโครโปรเซสเซอร์เป็นระบบที่ทำงานด้วยวงจรรวมเฉพาะทาง(ASIC) ทำให้ผู้ใช้ไม่ สามารถปรับแต่งอุปกรณ์ได้เหมือนเดิม

ข้อแนะนำเพิ่มเติม

  • การลง firmware ตัวใหม่หรือการเปิดกล่องตัวอุปกรณ์จะทำให้ผู้ใช้เสียประกันจากทางผู้ผลิต
  • หน่วยความจำ flash และ ram ของอุปกรณ์มีขนาดเล็ก ดังนั้นโปรแกรมที่นำมาใช้งานควรเลือกโปรแกรมที่ไม่กินหน่วยความจำมากเกินไป
  • ถ้าขนาดของหน่วยความจำ flash ในอุปกรณ์ไม่พอสำหรับเก็บข้อมูล อาจนำข้อมูลบางส่วนไปเก็บไว้ใน usb drive แล้วสร้าง symbolic link ไปที่ directory ใน usb driveแต่ทั้งนี้อุปกรณ์ที่ใช้ต้องมีพอร์ต usb

ข้อมูลเพิ่มเติม
http://wiki.openwrt.org/
http://www.macsat.com
http://wl500g.info/
http://downloads.openwrt.org/sources/

รูปภาพของ ไม่ออกนาม

RocketTeam

มี Tomato อีกตัวครับที่น่าสนใจ
รูปภาพของ ไม่ออกนาม

พอจะแนะแนวเรื่องการ เซ็ค cross ของ MIPS ได้ไหมครับ

ทำตามที่บอกแล้ว มันไม่ได้นะครับ สนใจ มาเลยครับ มือใหม่จริงๆ
รูปภาพของ golf24

MIPS ที่กล่าวถึงในบทความของ Broadcom นะครับ

พวกเบอร์ที่ขึ้นต้นด้วย BCMxxxx แล้วติดปัญหาตรงไหนเหรอครับ
รูปภาพของ ไม่ออกนาม

Openwrt - มาโม router กันดีกว่า

ในกรณีที่ไม่มีหน้าเว๊บผมจะเซ็ตในลีนุ๊กไง คือลงไปแล้วแต่ไม่รู้จะเซ้ตในฟุตตี้ไงอยากเว็ตกลับตัวเดิมนะ
รูปภาพของ ohno

ได้ backup

ได้ backup ไว้หรือเปล่าอ่ะ

 

Syndicate content