Powered by Drupal, an open source content management system

การใช้ usb wireless adapter กับ mini2440

เนื่องจากบอร์ด mini2440 ไม่ได้มาพร้อมกับความสามารถในการต่อเน็ทเวิร์คแบบไร้สาย ดังนั้นหากต้องการที่จะใช้เน็ทเวิร์คบนบอร์ด mini2440 แบบไร้สายจำเป็นต้องใช้ usb wireless adapter บทความนี้จะนำเสนอการเลือกใช้ usb wireless adapter การสร้างจัดเตรียม driver ตลอดจนถึงการเซ็ทอัพเพื่อใช้งาน

1. ขั้นตอนแรกที่สำคัญมากคือการเลือกใช้ usb adapter เราจะต้องเลือกใช้รุ่นที่ chip ภายในของมันมี Driver ที่รองรับโดย linux kernel มิฉนั้นแล้วท่านจะต้องไปหา driver เอาเอง ก่อนที่จะซื้อให้ตรวจสอบได้จากที่นี่ครับ

http://linuxwireless.org/en/users/Devices/USB

 

 จากตัวอย่าง เราจะใช้ usb wifi adapter ของ NetGear รุ่น WG111v3 ซึ่งจะใช้ Driver rtl8187 เป็นหลักในการสาธิต

2. ระบบที่จะใช้จะเป็น Debian Distribution สำหรับ mini2440 เราเริ่มต้นด้วยการติดตั้งโปรแกรมที่จำเป็นก่อนครับ

# apt-get update
# apt-get install usbutils wireless-tools

3. เสียบ usb wifi adapter เข้ากับบอร์ด จะเห็นข้อความดังนี้ปรากฏบน serial console

mini2440:~# usb 1-1: new full speed USB device using s3c2410-ohci and address 2
usb 1-1: configuration #1 chosen from 1 choice

 ใช้คำสั่ง lsusb เพื่อตรวจสอบรายละเอียดของ usb devices ที่ต่ออยู่กับระบบ จะเห็นว่าระบบรายงานข้อมูลของ usb wifi ตรงกับรายละเอียดในข้อที่ 1

mini2440:~# lsusb
Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111(v3) 54 Mbps Wireless [RealTek RTL8187B]
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

ใช้คำสั่ง ifconfig -a เพื่อตรวจสอบว่าระบบของเรามี Device Driver สำหรับ usb wifi ตัวนี้หรือเปล่า

mini2440:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 01:02:03:04:05:07
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:192 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33147 (32.3 KiB)  TX bytes:836 (836.0 B)
          Interrupt:51 Base address:0x300

lo        Link encap:Local Loopback
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ถ้าระบบของเรามี Device Driver ที่รองรับ เราจะเห็น device ที่ชื่อ wlan0 ในกรณีนี้ปรากฏว่ามีเพียง eth0 ดังนั้นเราจำเป็นต้องติดตั้ง Device Driver เพิ่มเติมสำหรับ usb wifi adapter ตัวนี้

4. เราสามารถสร้าง Device Driver สำหรับ usb wifi ของเราด้วยการแก้ไข config ในขั้นตอนการสร้าง kernel ดังนี้

  • ให้ทำตามขั้นตอน การสร้าง Kernel สำหรับ mini2440 จนกระทั่งก่อนขั้นตอนการสร้าง uImage
  • ทำการ config ระบบเพื่อเพิ่ม Driver ด้วยคำสั่งดังนี้

$ cd ~/kernel/mini2440
$ CROSS_COMPILE=arm-angstrom-linux-gnueabi- ARCH=arm make O=../kernel-bin/ menu_config

เลือกเมนูตามลำดับดังนี้

Device Drivers/Network device support/Wireless LAN/Wireless LAN (IEEE 802.11)

จากข้อมูลในข้อ 1 และ 3 แสดงให้เห็นว่า usb adapter ของเราใช้ Driver RTL8187B ดังนั้นให้เลื่อน cursor ไปยัง Realtek 8187 and 8187B USB support  และเคาะ space bar เพื่อเลือกให้สร้าง Module

เลือก exit ไปจนกระทั่งก่อนออกจากโปรแกรมและ save config หลังจากนั้นทำการสร้าง uImage และสร้าง Modules ตามขั้นตอนดังนี้

$ CROSS_COMPILE=arm-angstrom-linux-gnueabi- ARCH=arm make O=../kernel-bin/
$ ~/uboot/mini2440/tools/mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -d ../kernel-bin/arch/arm/boot/zImage uImage
$ rm -Rf ../kernel-modules/*
$ CROSS_COMPILE=arm-angstrom-linux-gnueabi- ARCH=arm make O=../kernel-bin/ INSTALL_MOD_PATH=../kernel-modules modules_install

เมื่อเสร็จสิ้นขั้นตอนนี้เราจะได้ uImage อยู่ใน ~/kernel/mini2440 และ Device Drivers Modules อยู่ใน ~/kernel/kernel-modules

5. ทำการแทนที่ uImage เดิมด้วย uImage ตัวใหม่ และคัดลอกไฟล์ภายใต้ ~/kernel/kernel-modules ไปยัง root directory ของ mini2440 หลังจากบูท mini2440 แล้วให้ใช้คำสั่ง depmod -a เพื่อทำการ update module dependency list

# depmod -a

 หลังจากนั้นให้เสียบ usb wifi adapter เข้าไปใหม่อีกครั้ง ข้อความที่ปรากฏที่ console จะแสดงให้เห็นว่าระบบรู้จัก usb wifi adapter ของเราแล้ว

mini2440:~# usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: configuration #1 chosen from 1 choice
cfg80211: Using static regulatory domain info
cfg80211: Regulatory domain: US
        (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
        (2402000 KHz - 2472000 KHz @ 40000 KHz), (600 mBi, 2700 mBm)
        (5170000 KHz - 5190000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
        (5190000 KHz - 5210000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
        (5210000 KHz - 5230000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
        (5230000 KHz - 5330000 KHz @ 40000 KHz), (600 mBi, 2300 mBm)
        (5735000 KHz - 5835000 KHz @ 40000 KHz), (600 mBi, 3000 mBm)
cfg80211: Calling CRDA for country: US
phy0: hwaddr 01:02:03:04:05:06, RTL8187BvE V0 + rtl8225z2
rtl8187: Customer ID is 0x00
Registered led device: rtl8187-phy0::tx
Registered led device: rtl8187-phy0::rx
rtl8187: wireless switch is on
usbcore: registered new interface driver rtl8187

 ยืนยันอีกครั้งด้วยคำสั่ง ifconfig -a จะสังเกตุเห็น device ที่ชื่อ wlan0 ปรากฏในระบบ

mini2440:~# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 01:02:03:04:05:07
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:205 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:34728 (33.9 KiB)  TX bytes:836 (836.0 B)
          Interrupt:51 Base address:0x300

lo        Link encap:Local Loopback
          LOOPBACK  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 01:02:03:04:05:06
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

6.  มาถึงขั้นตอนนี้ การติดตั้ง Driver ก็เสร็จสิ้นเรียบร้อย ขั้นตอนต่อไปก็เป็นการเซ็ทอัพ usb wifi adapter ของเราให้ต่อเข้ากับระบบเน็ทเวิร์ค ในระบบตัวอย่าง Router ที่ใช้ทำการ encrypt แบบ WEP ข้อมูลที่จำเป็นต้องใช้ในการเซ็ทอัพมีดังนี้

  • ssid ของเน็ทเวิร์ค
  • key
  • channel

ซึ่ง ssid และ channel ถ้าหากไม่ทราบสามารถหาได้ด้วยคำสั่งดังนี้

# ifconfig wlan0 up
# iwlist wlan0 scanning
wlan0     Scan completed :
          Cell 01 - Address: 01:02:03:04:05:06
                    Channel:4
                    Frequency:2.427 GHz (Channel 4)
                    Quality=70/70  Signal level=-23 dBm
                    Encryption key:on
                    ESSID:"project4fun"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Master
                    Extra:tsf=00002e71f47aee11
                    Extra: Last beacon: 1675ms ago

สำหรับ key นั้นหากท่านเป็นเจ้าของเน็ทเวิร์ค ท่านต้องรู้อยู่แล้วเพราะท่านเป็นคนกำหนดเอง แต่หากใช้เน็ทเวิร์คอื่น ก็ต้องติดต่อขอ key จากเจ้าของระบบก่อนครับ ในกรณีนี้สมมติให้ key = 1234567890

เมื่อได้ข้อมูลมาแล้ว เราทำการทดลองตรวจสอบและเซ็ทค่าให้กับ wlan0 ของเราด้วยคำสั่ง iwconfig ดังนี้

mini2440:~# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bg  Mode:Managed  Access Point: Not-Associated
          Tx-Power=27 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

mini2440:~# iwconfig wlan0 essid project4fun
mini2440:~# iwconfig wlan0 key 1234567890
mini2440:~# iwconfig wlan0 channel 4
mini2440:~# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bg  ESSID:"project4fun"
          Mode:Managed  Frequency:2.427 GHz  Access Point: 01:02:03:04:05:06
          Bit Rate=1 Mb/s   Tx-Power=27 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:1234-5678-90
          Power Management:off
          Link Quality=70/70  Signal level=-23 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

หมายเหตุ ลองใช้คำสั่ง iwconfig --help เพื่อดู option ทั้งหมด

เมื่อพร้อมแล้วก็ทำการต่อเข้ากับระบบ network ด้วยคำสั่ง dhclient wlan0

mini2440:~# dhclient wlan0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/wlan0/01:02:03:04:05:06
Sending on   LPF/wlan0/01:02:03:04:05:06
Sending on   Socket/fallback
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 192.168.1.1
bound to 192.168.1.143 -- renewal in 39321 seconds.
mini2440:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 01:02:03:04:05:07
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:196 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:34547 (33.7 KiB)  TX bytes:836 (836.0 B)
          Interrupt:51 Base address:0x300

wlan0     Link encap:Ethernet  HWaddr 01:02:03:04:05:06
          inet addr:192.168.1.143  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:350 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:74271 (72.5 KiB)  TX bytes:420 (420.0 B)

เมื่อตรวจสอบด้วย ifconfig จะเห็นว่า wlan0 ต่อกับระบบโดยได้รับ ip address 192.168.1.143

เราจะทำทดสอบด้วยการปลด eth0 ออกจากระบบและใช้ wlan0 ในการติดต่อ network อย่างเดียวดังนี้

mini2440:~# ifconfig eth0 down
mini2440:~# ifconfig
wlan0     Link encap:Ethernet  HWaddr 01:02:03:04:05:06
          inet addr:192.168.1.143  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:571 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:117970 (115.2 KiB)  TX bytes:420 (420.0 B)

mini2440:~# ping google.com
PING google.com (74.125.65.99) 56(84) bytes of data.
64 bytes from gx-in-f99.1e100.net (11.122.33.44): icmp_seq=1 ttl=50 time=16.5 ms
64 bytes from gx-in-f99.1e100.net (11.122.33.44): icmp_seq=2 ttl=50 time=19.4 ms
64 bytes from gx-in-f99.1e100.net (11.122.33.44): icmp_seq=3 ttl=50 time=16.4 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 16.413/17.460/19.463/1.424 ms
mini2440:~#

ผลจากการ ping แสดงว่าเราสามารถที่จะใช้ usb wireless adapter ของเราติดต่อสื่อสารกับอินเตอร์เน็ทผ่านเน็ทเวิร์คไร้สายได้เป็นที่เรียบร้อย

7. หากเราต้องการให้ระบบติดต่อกับเน็ทเวิร์คผ่าน usb wireless adapter โดยอัตโนมัติทุกครั้งที่เราบูท mini2440 ก็ให้ทำขั้นตอนต่อไปนี้

 แก้ไขไฟล์ /etc/network/interfaces โดยใส่ # เพื่อ comment ในส่วนของ eth0 และเพิ่มเติมส่วนของ wlan0 แทนที่ดังนี้

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
# auto eth0
# iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
        wireless-key 1234567890
        wireless-essid project4fun
        wireless-channel 4

ทุกครั้งที่บูท mini2440 จะใช้ wlan0 ในการต่อเข้ากับ wireless network โดยอัตโนมัติ

สำหรับผู้ที่ใช้ encyption ในแบบอื่นๆให้ดูการเซ็ทอัพได้จาก เอกสารอ้างอิง

อ้างอิง

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch13_:_Linux_Wireless_Networking

http://linuxwireless.org/en/users/Documentation