เข้าระบบ

ชื่อผู้ใช้

รหัสผ่าน

  ล ง ท ะ เ บี ย น  

atlantaman

atlantaman的บล๊อก

atlantaman的主頁 | ดูทั้งหมด

การประยุกต์ใช้งาน Embedded Linux Computer (ตอนที่ 8)

2009-09-17 11:36
เอาล่ะครับ มาถึงจุดนี้ Router WRT54GL ของเราก็ได้แปลงร่างมาเป็นEmbedded Linux computerไปเรียบร้อยแล้ว แต่ยังขาดส่วนสำคัญส่วนนึงที่ต้องเซ็ทอัพเพื่อให้สมบูรณ์แบบนั่นคือการทำให้มันสามารถเชื่อมต่อแบบไร้สายกับระบบเน็ทเวิร์คภายในบ้านในลักษณะเดียวกับที่เราใช้Laptopต่อเน็ทแบบไร้สายนั่นเอง ซึ่งการต่อในลักษณะแบบนี้เรียกว่า Client Mode
 
 
ก่อนอื่นมาดูโครงสร้างเน็ทเวิร์คในบ้านผมก่อนนะครับ จากภายนอกเข้ามาก็จะเป็น Cable (หรือสายโทรศัพท์ในกรณีที่เป็น DSL) ซึ่งจะต่อผ่านโมเด็มเพื่อแปลงสัญญานที่เข้ามาไปเป็นสัญญานEthernetที่สามารถป้อนเข้าคอมพิวเตอร์ภายในบ้านได้ แต่เนื่องจากผมมี Client PCหลายตัวดังนั้นจึงต้องใช้ Router มาทำหน้าที่เป็น NAT(Network Address Translation) และ Firewall
การต่อกับ Router จะทำทั้งแบบใช้สาย(ในกรณีที่งานใช้ Traffic ค่อนข้างเยอะ)และไร้สาย(สำหรับงานทั่วๆไป)  เป้าหมายของเราก็คือจะใช้ Embedded Linux Computer ของเราต่อเข้ากับระบบเน็ทเวิร์คไร้สายที่มีอยู่แล้วในลักษณะ Client ตัวหนึ่งเนื่องจากจะอยู่ในโรงรถซึ่งห่างจากตัว Router หลักไม่เหมาะกับการเดินสายและTraffic ก็ไม่ได้มีอะไรมากมาย
 
 
ในโลกแห่งความเป็นจริง บ้านทุกหลังก็ต้องมีที่อยู่ที่ถูกกำหนดเอาไว้ ในโลกอินเตอร์เน็ทก็เช่นกัน ปลายทางของการรับส่งข้อมูลก็ต้องมีที่อยู่ที่ถูกกำหนดไว้ นั่นก็คือ WAN (Wide Area Network) IP Address ซึ่งตัวนี้จะถูกกำหนดโดย Internet Service Provider ที่ท่านใช้บริการอยู่
 
สมมติว่าพีซีในบ้านท่านสองเครื่องมีการเปิดดูเวบเพจที่ต่างกัน   Internet Service Providerจะทำหน้าที่ส่งข้อมูลของเวบเพจมาถึง WAN IP Address ของท่านเท่านั้น แต่จะไม่ส่งไปถึงพีซีของท่าน (เหมือนบุรุษไปรษณีย์ที่ส่งจม แค่หน้าบ้านเท่านั้น) ดังนั้นจะต้องมีอุปกรณ์ตัวนึงที่ทำหน้าที่ส่งต่อข้อมูลเวบเพจที่ได้มาไปยังพีซีของท่าน อุปกรณ์ตัวนั้นคือ Router นั่นเองโดยRouter ก็ต้องจัดการให้มีการกำหนดที่อยู่ของเครื่องภายในเครือข่ายขึ้นมาใช้เองเป็นการภายใน(เหมือนหอพักก็ต้องมีว่าชั้นไหนห้องไหน) ซึ่งที่อยู่ภายในหรือ Private IP Address นี้จะมีมาตราฐานกำหนดไว้ตามแต่จำนวนของอุปกรณ์ภายในเครือข่ายนั้นๆ (Reference http://en.wikipedia.org/wiki/Private_network) ในกรณีของเรา เราใช้เบอร์ที่ขึ้นต้นด้วย 192.168.1.xx โดย Router จะทำการจับจองเบอร์แรกคือ 192.168.1.1 หลังจากนั้นอุปกรณ์ภายในบ้านก็จะสามารถมีเบอร์ได้ตั้งแต่ 192.168.1.2 ถึง 192.168.1.255 สำหรับ Embedded Linux Computer หรือ ELC ของเรา(โปรดสังเกตุ ผมจะไม่เรียกว่าเป็น router อีกต่อไปเพื่อไม่ให้สับสนกับ Router หลักของบ้านที่ทำหน้าที่ Router จริง)ผมกำหนดให้เบอร์ประจำตัวของมันคือ 192.168.1.111
 
ก่อนจะไปถึงการ set ip address ของ ELC ของเราให้เป็น 192.168.1.111 เราต้องเข้าใจโครงสร้างเน็ทเวิร์คภายในเครื่องของมันเสียก่อนว่าเป็นยังไง
 
WRT54GL Network Structure
 
 
จากไดอะแกรมอย่างง่ายของเรา WRT54GL เมื่อครั้งยังประกอบอาชีพเป็น Router จะประกอบไปด้วย Switch ที่มี port ภายใน 0 - 5 โดยจะแบ่งportออกเป็นสามกลุ่มตามการใช้งานเป็นดังนี้
 
1. Internal port 0-3 ถูก map ไปเป็น external port 1-4 ซึ่งใช้ในการเชื่อมต่อเน็ทเวิร์คภายในบ้าน
2. Internal port 4 ถูก map  ไปเป็น exernal port Internet ซึ่งใช้ในการเชื่อมต่อกับ Internet
3. Interal port 5 ใช้งานภายในโดยเชื่อมต่อ Internal port 0-3 กับ internal port 4 เข้าด้วยกัน
 
ในความเป็นจริงทางฮาร์แวร์แล้ว Port ทั้งหมดอยู่บนฮาร์แวร์ตัวเดียวกัน แต่ทำการแบ่งให้เสมือนแยกกันอยู่ต่างเน็ทเวิร์คกันโดยสามารถมีกลุ่ม IP Address ต่างกันโดยใช้เทคโนโลยีที่เรียกว่า VLAN (Virtual LAN อ้างอิง http://wiki.openwrt.org/oldwiki/openwrtdocs/networkinterfaces )
 
สำหรับเน็ทเวิร์คภายใน นอกจากจะต่อกับ Router ผ่าน port 1-4 ในข้อ 1 ได้แล้ว  ยังสามารถเชื่อมต่อแบบ Wireless ได้ด้วย ดังนั้นจึงมีส่วน Bridge ที่จะทำหน้าที่เชื่อมต่อ Wire 1-4 กับ Wireless เข้าด้วยกัน โดย Bridge นี่เองจะมี IP Address ที่CPUใช้ติดต่อกับวงเน็ทเวิร์คภายใน
หากเราใช้คำสั่ง ifconfig เราจะเห็นดังนี้
จะสังเกตุเห็นว่า IP Address ของ br-lan ซึ่งเป็น Bridge ของเรามีค่าDefaultหลังจากFlashแล้วเป็น 192.168.1.1 ซึ่งไปตรงกับ Router หลักของบ้าน ดังนั้นก่อนที่เราจะเอาไปใช้ร่วมกับเน็ทเวิร์คที่มีอยู่ เราจำเป็นต้องเปลี่ยนให้เป็นเบอร์อื่นก่อนในที่นี้ผมเลือกให้มันเป็น 192.168.1.111
 
 
จากนั้นเราทำการเปลี่ยนแปลงโดยการแก้ไขไฟล์ /etc/config/network ซึ่งเป็นตัวกำหนดระบบเน็ทเวิร์คของ Port ภายในทั้งหมด
สำหรับโปรแกรมEditorที่ติดมากับLinuxคือ vi โปรแกรมนี้อาจจะดูใช้ยากนิดนึงตอนเริ่มต้น แต่เนื่องจากเป็นโปรแกรมที่มีอยู่ในระบบแน่นอน ดังนั้นผู้ที่รักEmbedded Linuxควรเรียนรู้เอาไว้ (หลักสูตรเร่งรัดอยู่ที่นี่ครับ http://www.slackbook.org/html/vi.html)
 
ก่อนการแก้ไขขอย้ำว่าเรายังอยู่ภายใต้กติกานี้นะครับคือ
- PC ของเรายังเป็น Windows และไม่เชื่อมต่อกับเน็ทเวิร์คใดๆ ทั้งทาง Wire และ Wireless
- จะมีเพียงสาย Ethernet จาก ELC port ใดๆระหว่าง 1 ถึง 4 ไปยัง Eternet Port ของ PC
- IP Address ของพีซีจะอยู่ภายในวงเน็ทเวิร์ค 192.168.1.xx
 
เมื่อพร้อมแล้วก็เริ่มต้นแก้ไขเลยครับ
 
1. เปิดหน้าต่าง DOS Prompt แล้วใช้คำสั่ง telnet 192.168.1.1
2. ใช้คำสั่ง
# vi /etc/config/network
3. กดปุ่ม : พิมพ์ 20 แล้ว enter เพื่อไปยังบรรทัดที่ 20
5. กดปุ่ม $ เพื่อวิ่งไปตัวอักษรสุดท้ายของบรรทัด
6. กดปุ่ม a เพื่อเพิ่มตัวอักษร แล้วพิมพ์ตัวเลข 11 (เพื่อแก้ไข option ipaddr เป็น 192.168.1.111)
7. กดปุ่ม Esc เพื่อกลับไปยัง command mode
8. กดปุ่มหัวลูกศรลง เพื่อไปยังบรรทัด option netmask 255.255.255.0
9. กดปุ่ม o เพื่อเพิ่มบรรทัดใหม่แล้วพิมพ์ข้อความต่อไปนี้
 
option gateway  192.168.1.1
option dns      192.168.1.1
 
10. กดปุ่ม Esc เพื่อกลับไปยัง command mode แล้วพิมพ์ :x แล้ว enter โปรแกรมจะทำการบันทึกการเปลี่ยนแปลงแล้วออกไปยัง command shell
 
ไม่ยากใช่ไม๊ครับ vi :) ผลสุดท้ายเราจะได้ไฟล์ที่มีหน้าตาแบบนี้ครับ
 
 
ใช้คำสั่งcat เพื่อตรวจสอบความถูกต้องของการแก้ไขนะครับ
# cat /etc/config/network
 
หมายเลข  1 คือเราได้ทำการเปลี่ยนแปลง IP Address ของ ELC ไปเป็น 192.168.1.111 ให้ตรวจสอบความถูกต้องของ IP Address ตรงนี้ให้ดี เพราะในขณะนี้ ทางเดียวที่เราติดต่อกับระบบคือผ่าน telnet ไปยัง 192.168.1.1 หากเราแก้ไขตรงนี้ผิดพลาด เช่นพิมพ์ผิด เมื่อเครื่องบูทใหม่ จะทำให้ Network ทำงานไม่ถูกต้อง ทำให้เราไม่สามารถเข้าระบบได้อีกเลยนอกเสียจากว่าเราต้อง
- Flash Firmware ใหม่เพื่อเคลียร์ไฟล์
- ติดตั้ง Serial Port เข้ากับ ELC เพื่อให้สามารถเข้าถึงระบบโดยไม่ผ่านเน็ทเวิร์ค (ตรงนี้ไม่จำเป็นถ้าหากท่านไม่มีโครงการว่าจะใช้ Serial port เพื่อการอื่นใด แต่แนะนำว่าควรทำเป็นอย่างยิ่งสำหรับผู้ที่ต้องการพัฒนาระบบอย่างจริงจัง) เนื่องจากบทความเกี่ยวกับเรื่องนี้มีมากมายในเน็ทจึงจะไม่กล่าวถึงวิธีทำในที่นี้ (ลอง googel คำว่า serial port wrt54g)
หมายเลข 2 คือการบอกว่าให้ใช้ Router หลักของบ้านเป็น Gateway และ DNS (Domain Name Server) ซึ่งจะทำให้เราสามารถใช้ ELC ของเราต่อเข้ากับ Internet ภายนอกได้
 
หมายเหตุ เอกสารอ้างอิงการตั้งค่าไฟล์ network http://kamikaze.openwrt.org/docs/openwrt.html#x1-80001.2.1
 
เมื่อตรวจสอบทุกอย่างถูกต้องให้ใช้คำสั่งดังนี้ในการเปลี่ยนแปลงเบอร์ IP Address ของระบบ
# /etc/init.d/network restart
 
เมื่อจบคำสั่งแล้ว ELC ของเราจะทำการเปลี่ยนแปลง IP Aกdress ใหม่ไปเป็น 192.168.1.111 ดังนั้นเราจำเป็นต้องปิดโปรแกรม telnet ที่เดิมติดต่ออยู่กับ 192.168.1.1 แล้วเปิดใหม่เป็น telnet 192.168.1.111 ซึ่งหากไม่มีอะไรผิดพลาดในขั้นตอนนี้ เราควรจะเข้าระบบได้ด้วย IP Address ใหม่และเครื่องELCเราก็พร้อมที่จะเกาะเกี่ยวเข้ากับระบบเน็ทเวิร์คหลักแล้วครับ
 
Wireless network in client mode
 
ในขั้นต้น WiFi จะถูก Disable เอาไว้ เราจำเป็นต้องทำการ Enable เสียก่อนโดยการแก้ไขไฟล์ /etc/config/wireless เปลี่ยน option disable เป็น 0 ดังนี้
 
 
1.เปิดไฟล์ด้วยคำสั่ง
 
# vi /etc/config/wireless
 
2. พิมพ์ /1 แล้ว Enter เพื่อค้นหาตัวเลข 1
3. พิมพ์ r0 เพื่อแทนตัวอักษรตรงตำแหน่ง cursor ด้วย 0
4. พิมพ์ :x แล้ว enter เพื่อบันทึกการเปลี่ยนแปลง
5. สั่งให้ELCเปลี่ยนแปลงตามค่าที่ตั้งไว้ด้วยคำสั่ง
# /etc/init.d/network restart
 
ใช้คำสั่ง iwconfig ตรวจสอบdevice ที่เป็น wifi จะสังเกตุเห็นว่า wl0 เริ่มทำงานแล้ว
 
 
แต่ wl0 ถูกกำหนดด้วยค่า default ซึ่งเราจำเป็นต้องปรับไปเป็นค่าเน็ทเวิร์คในระบบของเรา ค่าที่จำเป็นต้องใช้มีดังนี้
1. Channel number (ผมใช้ channel 10 ในการส่ง WiFi)
2. mode (เลือก sta เพื่อบอกว่าต้องการให้ WiFi เป็น Client Mode)
3. ssid
4. Encryption type (ผมเลือกใช้ wep ครับ)
5. Key (อันนี้ใส่ Key หรือระหัสของท่านเองที่ใช้ควบคู่กับ wep ในข้อ 4 เพื่อใช้ในการถอดระหัสข้อมูล)
 
ซึ่งค่าทั้งหมดนี้จะเป็นค่าเดียวที่ถูกกำหนดไว้ใน Router หลักของระบบเพื่อใช้เชื่อมต่อ WiFi
 
ดังนั้นแก้ไขไฟล์ /etc/config/wireless เป็นดังนี้ (คราวนี้ไม่บอกคำสั่งของ vi แล้วนะครับ ลองตามคู่มือดูนะครับ : )
 
 
หมายเหตุ เอกสารอ้างอิงการตั้งค่าไฟล์ wireless http://kamikaze.openwrt.org/docs/openwrt.html#x1-120001.2.2
 
เมื่อแก้ไขไฟล์เรียบร้อยแล้ว ก็ใช้คำสั่งดังนี้เพื่อให้ ELC ของเรารับรู้
 
# /etc/init.d/network restart
 
ทำการปิด dhcp และ dns service บน ELC ของเราเสียก่อนเพื่อไม่ให้ไปกวนกับ Router หลักที่มี service อย่างเดียวกันวิ่งอยู่
 
# /etc/init.d/dnsmasq disable
 
เสร็จแล้วก็ลอง ping 192.168.1.1 ดูนะครับ เราควรจะได้
root@OpenWrt:/# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=6.488 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=1.463 ms
64 bytes from 192.168.1.1: seq=2 ttl=64 time=1.444 ms
กด Ctrl-C เพื่อหยุดการ ping แล้วลอง
root@OpenWrt:/# ping google.com
PING google.com (74.125.45.100): 56 data bytes
64 bytes from 74.125.45.100: seq=1 ttl=50 time=13.846 ms
64 bytes from 74.125.45.100: seq=2 ttl=50 time=11.445 ms
64 bytes from 74.125.45.100: seq=3 ttl=50 time=14.960 ms
ถ้าท่านได้ค่าทำนองนี้ก็ยินดีด้วยครับ แสดงว่า Embedded Linux Computer เราสามารถต่อกับเน็ทเวิร์คในบ้านแบบ Client mode เหมือนอุปกรณ์ตัวนึงเรียบร้อยแล้วครับ.....
 
Tip!!!
โปรดสังเกตุว่า Port 1-4 เชื่อมต่ออยู่กับ wl0 ผ่าน br-lan เนื่องจาก wl0 ข้างนึงต่ออยู่กับเน็ทเวิร์คหลักของระบบ ก็แปลว่าหากเราเอาอุปกรณ์ Ethernet ใดมาต่อ Port 1-4 ก็จะเชื่อมต่อกับเน็ทเวิร์คหลักเหมือนกัน หรืออีกนัยนึงเราสามารถใช้ ELC ของเราเป็นเหมือนWiFi Cardบน PC นั่นเอง ทดสอบได้โดย
 
1. ปิด dhcp บน ELC ของเราก่อนเนื่องจากไม่มีความจำเป็นต้องใช้แล้ว และเราต้องการให้ไปใช้ dhcp บน Router หลักของเรา ด้วยคำสั่ง
 
# /etc/init.d/dnsmasq disable
2. ปิด Wifi ที่มากับเครื่อง PC ถ้ามี
3. Set Adapter Local Area Connection ของPCดังนี้
 
 
4. ต่อสายEthernet ระหว่าง Port 1-4 กับ Ethernet port ของ PC computer
5. PC จะทำการเชื่อมตัวเองเข้ากับเน็ทเวิร์คผ่าน Port 1-4 ไปยัง wl0
6. PC เราก็จะสามารถติดต่อ Internet โดยใช้ ELC เหมือนมี WiFi Adapter อย่างดีที่มีเสาส่งขนาดใหญ่ รับส่งสัญญานได้ดีกว่า WiFi adapter ทั่วๆไป
 
แชร์ 1586 ดู | 2 ความเห็น

ความเห็น

  • jst
    jst 2009-09-18 15:42
    สุดยอดบทความ
    อยากเอา man vi >>my brian nand flash จังครับ อิอิ
  • worldplanet
    ถ้าผมต้องการใช้ในงาน qos เช่น ควบคุมการไหลของ traffic ต้องใช้ linux ตัวใหน ในการทำคับ จะใช้ ubuntu ได้เลยรึปล่าว