linux training in Thailand
| Home | Articles | Download | Free Linux Tips | Resources | Training | Web Link | Linux Training English|
| Courses | Schedule | Price & Promotion | Map | Customer Ref. | Instructors | Certification | FAQ | Registration Form |
สถาบันฯ ขอแจ้งปิดทำการระหว่างวันที่ 27 -31 กรกฏาคม 2558 และเปิดทำการปกติวันที่ 3 สิงหาคม 2558
We are on vacations 5 days in July 27-31, 2015 Please contract Line ID : nok_fly or e-mail : info@itdestination.com
ITDestination จะปิดปรับปรุงเว็บไซต์ ตั้งแต่วันที่ 7 - 9 มิถุนายน 2556
อาจจะทำให้ใช้งานไม่ได้ในบริการ Webboard Freetips และ E-Learning จึงขออภัยในความไม่สะดวกมา ณ ที่นี้
สถาบันฯ ขอแจ้งปิดทำการวันที่ 22-28 กุมภาพันธ์ 2560 และจะเปิดทำการปกติในวันที่ 1 มีนาคม 2560
กรณีติดต่อส่งข้อความมาที่ Facebook: LinuxITDestination หรือ e-mail: info@itdestination.com ซึ่งจะติดต่อกลับประมาณ 17.00 น.
ผู้ลงทะเบียนอบรมสามารถทำข้อสอบ online ในช่วงที่มาอบรมเพื่อทบทวนความรู้ ทำได้ไม่จำกัดจำนวนครั้ง มีข้อเฉลยที่ถูกต้องแนะนำ
สอบถามรายละเอียดโทร 089 890-5494 >>> อ่านรายละเอียด... คลิ๊ก

NdisWrapper เชื่อมโยงลีนุกซ์สู่ Wireless LAN

โดย ธีรภัทร มนตรีศาสตร์,RHCE

ปัญหาการใช้งานระบบปฏิบัติการลีนุกซ์กับอุปกรณ์ฮาร์ดแวร์ต่างๆ นับว่าเป็นประเด็นที่มีการพูดถึงกันในกลุ่มผู้ใช้งานลีนุกซ์ค่อนข้างมากตั้งแต่ยุคเริ่มแรก จนถึงทุกวันนี้ถึงแม้ว่าจะได้มีการเอาชนะอุปสรรคนี้ได้บ้างแล้วสำหรับฮาร์ดแวร์บางกลุ่ม เป็นต้นว่า อุปกรณ์การ์ดเสียง ชิปเซ็ตควบคุมบนเมนบอร์ด หรืออุปกรณ์บันทึกข้อมูลแบบยูเอสบี แต่ปัญหาเรื่องซอฟต์แวร์ไดร้วเวอร์สำหรับลีนุกซ์ก็ยังคงมีอยู่เนื่องจากอุปกรณ์ฮาร์ดแวร์ใหม่ๆ มีการผลิตและพัฒนาอยู่เสมอ แนวความคิดที่จะนำเอาซอฟต์แวร์ไดร้วเวอร์สำหรับวินโดวส์มาใช้ในลีนุกซ์นั้น ฟังดูเหมือนเป็นเรื่องล้อกันเล่น หรือมีความเป็นไปได้ยาก เพราะระบบปฏิบัติการทั้งสองระบบนี้มีความแตกต่างกันชนิดที่เรียกว่าคนละขั้วกันเลยทีเดียว จนกระทั่งโปรเจคที่ชื่อว่า NdisWrapper ได้เริ่มต้นขึ้น แนวคิดดังกล่าวก็เป็นความจริงได้ในที่สุด NdisWrapper คืออะไร NdisWrapper คือ เคอร์เนลโมดูล (Kernel Module) ที่ไม่มีความสามารถในการสนับสนุนการทำงานของอุปกรณ์ใดๆ ได้ด้วยตัวเอง แต่มันเป็นการจำลองสภาพแวดล้อมให้กับ NDIS ขึ้นในลีนุกซ์ ซึ่งทำให้โปรแกรมดีไวซ์ไดร้วเวอร์ของวินโดวส์รู้สึกเหมือนกับเป็นสภาพแวดล้อมที่ตนเองคุ้นเคยและสามารถทำงานได้ตามปรกติ NDIS เป็นคำย่อมาจาก Network Driver Interface Specification คือ ข้อกำหนดเพื่อการพัฒนาโปรแกรมดีไวซ์ไดร้วเวอร์สำหรับอุปกรณ์เชื่อมต่อทางเครือข่าย ที่พัฒนาขึ้นโดยความร่วมมือระหว่าง ไมโครซอฟต์และ 3COM NDIS เป็นการเชื่อมต่อระหว่างเลเยอร์ 2 กับเลเยอร์ 3 ของ OSI Reference Model ( ตัวแบบของการสื่อสารข้อมูลซึ่งกำหนดขึ้นโดย International Standards Organization ) ดังนั้น NDIS จึงเป็นต้วกลางระหว่างอุปกรณ์เชื่อมต่อระบบเครือข่าย ( Network Adapter ) กับโปรโตคอลระดับสูงขึ้นไปที่ต้องการขนส่งข้อมูลเข้าออกผ่านระบบเครือข่าย ซึ่ง NdisWrapper จะมีลักษณะคล้ายเปลือกนอกห่อหุ้ม (Wrap) เอาโปรแกรมไดร้วเวอร์ของวินโดวส์ไว้ภายใน ทำให้สามารถนำโปรแกรมไดร้วเวอร์ที่สร้างขึ้นตามข้อกำหนดของ NDIS มาใช้ในลีนุกซ์ได้ตามที่เราต้องการ Linksys WUSB54G v.4 อุปกรณ์ไวร์เลส มาตรฐาน IEEE 802.11 ส่วนใหญ่ในปัจจุบันจะมีลักษณะการเชื่อมต่อทั้งสิ้น 3 รูปแบบ คือ แบบการ์ด PCI แบบที่เป็นการ์ด PCMCIA และแบบที่ใช้เสียบกับช่อง USB ซึ่งในแบบที่เป็นการ์ด PCI นั้น ลีนุกซ์ดิสทริบิวชั่นหลักๆ ในปัจจุบันมักจะสนับสนุนอยู่แล้วเป็นส่วนใหญ่ สามารถเซ็ตอัพผ่านโปรแกรมยูทิลิตี้ในแบบ GUI ได้ทันที แต่บางส่วนก็อาจจะต้องใช้ NdisWrapper เข้ามาใช้ร่วมด้วย ส่วนแบบที่เป็น PCMCIA และแบบ USB มักจะไม่สามารถเซ็ตอัพได้ทันที


รูปที่ 1 Linksys WUSB54G อุปกรณ์ไวร์แลสที่ใช้ทดสอบ
ผู้เขียนได้นำ Linksys WUSB54G (version 4) มาใช้งานกับเครื่องเดสทอปที่เป็นวินโดวส์ ซึ่งแรกๆ จะมีปัญหาพอสมควร จนต้องอัพเกรดโปรแกรมไดร้วเวอร์รุ่นล่าสุดจึงสามารถใช้งานได้ดี โดยอุปกรณ์ตัวนี้มีลักษณะการเชื่อมต่อใช้งานผ่านพอร์ต USB 2.0 และผู้ผลิตไม่ได้จัดซอฟต์แวร์ใดๆ สำหรับใช้งานร่วมกับ ลีนุกซ์ไว้ให้เลย จึงเหมาะมากที่จะใช้อุปกรณ์ตัวนี้เป็นกรณีศึกษาในเรื่องนี้ และผู้เขียนเลือกใช้ Fedora Core 5 เป็นตัวอย่าง อัพเกรดเคอร์เนลให้กับ Fedora กันก่อน จากข้อมูลที่ผู้พัฒนาโปรเจค NdisWrapper ได้ให้ไว้ที่ http://ndiswrapper.sourceforge.net และ Wiki ของโปรเจคนี้ ทำให้ทราบว่าปัจจุบัน NdisWrapper จะสามารถใช้งานได้ดีจำเป็นต้องอัพเกรดเคอร์เนลของลีนุกซ์ให้เป็นรุ่น 2.6.16 ขึ้นไป ซึ่งเจ้า Fedora Core 5 จะมีเคอร์เนลที่ติดตั้งมาในดิสทริบิวชั่นเป็นรุ่น 2.6.15 ดังนั้นจึงต้องอัพเกรดเคอร์เนลกันก่อน สามารถดาวน์โหลดเคอร์เนลรุ่นใหม่ในแพคเกจแบบ RPM ได้จาก เว็บไซต์ http://fedora.redhat.com โดยจะต้องใช้จำนวนทั้งสิ้น 2 แพคเกจ คือ kernel และ kernel-devel (ตัวหลังนี้สำคัญมากกับเรื่องนี้เพราะใช้ในการ build หรือคอมไพล์โปรแกรม NdisWrapper ) เมื่อได้ไฟล์แพคเกจมาแล้ว ใช้คำสั่ง rpm -U เพื่ออัพเกรดทั้งสองแพคเกจเข้าสู่ระบบทันที ผลการอัพเกรดจะปรากฏเป็นไฟล์เคอร์เนลรุ่นใหม่ แทนที่รุ่นเก่า และจะเห็นว่ามีการแก้ไขคอนฟิกเกี่ยวกับการบูตของ GRUB อีกด้วย หลังจากนี้ควรรีบูตเครื่องใหม่เพื่อให้ระบบทำงานด้วยเคอร์เนลใหม่ก่อนที่จะไปสู่ขั้นตอนอื่นต่อไป # rpm -Uvh kernel-2.6.17-1.2174_FC5.i686.rpm
# rpm -Uvh kernel-devel-2.6.17-1.2174_FC5.i686.rpm
# ls -l /boot# cat /etc/grub.conf


จัดเตรียมไดร้วเวอร์ของอะแดปเตอร์ Wireless LAN ในการใช้งาน NdisWrapper จะต้องใช้โปรแกรมไดร้วเวอร์ของอุปกรณ์ไวร์เลสที่เป็นของวินโดวส์เป็นส่วนสำคัญ ดังนั้นจึงต้องสำเนาไฟล์ไดร้วเวอร์เหล่านั้น ซึ่งปรกติจะมีไฟล์ .sys .inf และ .cat ถ้าไฟล์เหล่านี้ถูกติดตั้งไว้ในเครื่องวินโดวส์แล้ว หรือแยกไว้เป็นไฟล์ย่อยๆ แล้ว ก็สำเนามาที่เครื่องลีนุกซ์ได้ทันที แต่ถ้ายังอยู่ในลักษณะบีบอัดรวมกันไว้เป็นนามสกุลไฟล์ .exe หรือ .zip จะต้องแยกไฟล์เหล่านี้ออกมาให้ได้ก่อน ในกรณีของ Linksys ที่ผู้เขียนใช้งานในตัวอย่างนี้ไฟล์ต่างๆ ของไดร้วเวอร์จัดรวมไว้ในไดเร็คทอรี่อย่างเป็นระเบียบ จึงสำเนามาทั้งไดเร็คทอรี่ได้ทันที โดยนำมาเก็บไว้ที่ /root/Drivers/WUSB54Gv4 และมีไฟล์ทั้งหมด 3 ไฟล์ คือ rt2500usb.cat ,rt2500usb.inf และ rt2500usb.sys ดาวน์โหลดและคอมไพล์ NDIS Wrapper ตัวโปรแกรม NdisWrapper จะอยู่ในรูปแบบไฟล์บีบอัดแบบ Tar (.tar.gz) สามารถดาวน์โหลดได้จากเว็บไซต์ของโปรเจคที่ได้กล่าวไปแล้ว ปัจจุบันเป็นเวอร์ชั่น 1.23 มีขนาดประมาณ 182 กิโลไบต์ เมื่อได้ไฟล์มาแล้ว สามารถดำเนินการตามขั้นตอนนี้ คือ แตกไฟล์ออก แล้วเข้าไปในไดเร็คทอรี่ที่เป็น source code ของโปรแกรม ทำการ make และ make install ได้ทันที # tar -xzf ndiswrapper-1.23.tar.gz
# cd ndiswrapper-1.23
# make# make install
ผลการคอมไพล์จะเป็นคำสั่งและไฟล์ต่างๆ ที่ประกอบการทำงานของ NdisWrapper เก็บไว้ที่ /usr เป็นปรกติ นอกจากไฟล์โมดูลของ Ndiswrapper คือ ndiswrapper.ko จะติดตั้งไว้ที่ /lib/modules/2.6.xxx/misc ปัญหาของผู้ที่คอมไพล์โปรแกรมในลีนุกซ์ไม่สำเร็จมักจะเกิดจากการติดตั้งแพคเกจที่จำเป็นต้องใช้ในขั้นตอนการคอมไพล์ไม่เพียงพอนั่นเอง ให้สังเกตข้อความที่แสดงความผิดพลาดแล้วหาแพคเกจที่เกี่ยวข้องมาติดตั้งเพิ่มเติมจนกว่าจะสามารถคอมไพล์ได้สำเร็จ ติดตั้งไดร้วเวอร์ของวินโดวส์เข้าสู่ NDIS Wrapper การใช้งาน NdisWrapper จะเริ่มต้นที่การติดตั้งไฟล์ไดร้วเวอร์ของวินโดวส์ โดยให้เข้าสู่ไดเร็คทอรี่ที่เก็บไฟล์ไดร้วเวอร์ไว้ แล้วใช้คำสั่ง ndiswrapper -i ตามด้วยชื่อไฟล์ .inf จะเป็นการติดตั้ง (install) หากสามารถติดตั้งได้สำเร็จจะมีไฟล์เก็บอยู่ที่ /etc/ndiswrapper ดังนั้นหลังจากที่อุปกรณ์ไวร์เลสของเราทำงานได้แล้วก็ไม่จำเป็นต้องเก็บไดเร็คทอรี่ต้นฉบับใน /root/Drivers นี้ไว้อีกต่อไป # cd /root/Drivers/WUSB54Gv4
# ndiswrapper -i rt2500usb.inf
# ndiswrapper -l
# ndiswrapper -m
ส่วนพารามิเตอร์ -l ย่อจาก list เมื่อทำคำสั่งนี้จะเป็นการแสดงรายชื่อไดร้วเวอร์ที่ได้ติดตั้งไว้ให้ทำงานภายใต้ NdisWrapper ซึ่งมีได้หลายไดร้วเวอร์ในเวลาเดียวกัน และสามารถใช้งานพร้อมๆ กันหลายอุปกรณ์ก็ได้ ( เช่น ใช้งานเป็น bridge หรือ router เป็นต้น ) พารามิเตอร์ -m ย่อมาจาก modprobe config เป็นการสั่งให้ NdisWrapper ทำการสร้างคอนฟิกไฟล์ขึ้นภายใต้ไดเร็คทอรี่ /etc/modprobe.d โดยจะเกิดไฟล์เป็นชื่อเดียวกันกับชื่อไดร้วเวอร์ ( เช่น rt2500usb.conf ) ผลของการทำเช่นนี้จะช่วยให้มีการโหลดโมดูล ndiswrapper โดยอัตโนมัติทุกครั้งที่เปิดเครื่อง นอกจากนี้ยังมีพารามิเตอร์อื่นๆ อีก เช่น -e หรือ Erase ใช้ในการถอนการติดตั้งไดร้วเวอร์ของวินโดวส์ออกจาก NdisWrapper ซึ่งอาจจะจำเป็นต้องใช้งานบ้างหากมีการติดตั้งไดร้วเวอร์ผิดรุ่นลงไป ในขั้นตอนนี้ควรจะลองใช้คำสั่ง lsmod ตรวจดูว่ามีการโหลดโมดูลชื่อ ndiswrapper หรือยัง หากต้องการโหลดด้วยตนเองสามารถทำได้ด้วยคำสั่ง modprobe ndiswrapper การคอนฟิกเพิ่มเติม เมื่อโหลดโมดูลแล้วขั้นตอนต่อไปจะต้องสร้างไฟล์คอนฟิกของดีไวซ์ชื่อ wlan0 ขึ้นเพื่อใช้งานเป็นอุปกรณ์เครือข่าย ในขั้นตอนนี้ควรจะต้องทราบว่า ESSID ของระบบเครือข่ายไวร์เลสที่จะใช้งานมีค่าเป็นอะไร เช่น ในเครือข่ายของผู้เขียนตั้งค่า ESSID ไว้เป็น mycom จะสร้างไฟล์คอนฟิกขึ้นดังตัวอย่าง โดยรับค่าไอพีแอดเดรสแบบ DHCP มาจาก Access Point/Router โดยอัตโนมัติ # vi /etc/sysconfig/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcpONBOOT=yes
ESSID="mycom"
หากท่านต้องการระบุค่าอื่นๆ เพิ่มเติม เช่น WEP Key หรือ MAC Address ก็สามารถทำได้ แต่ในขั้นตอนนี้ควรระบุค่าให้น้อยๆ ไว้ก่อนจะช่วยลดปัญหาการติดตั้งลงได้น่าจะเป็นหนทางที่ดีกว่า เมื่อทุกอย่างทำงานได้แล้ว ( สามารถ recover สัญญาณวิทยุได้แล้ว ) จึงค่อยป้อนค่าอื่นๆ เพิ่มเข้าไปผ่านทางหน้าจอแบบ GUI ก็ได้ซึ่งสะดวกกว่ามาก หลังจากบันทึกไฟล์นี้ไว้แล้ว ควรรีสตาร์ตบริการ network หรือรีบูตเครื่องใหม่เลยก็ได้ ระหว่างที่บูตเครื่องขึ้นมาจะสังเกตเห็นว่ามีอินเทอร์เฟส wlan0 เริ่มทำงาน


รูปที่ 2 ไฟล์คอนฟิกต่างๆ และค่า IP routing table ที่ wlan0 กำลังทำงานอยู่

ตรวจสอบและใช้งาน ไม่ว่า wlan0 จะเริ่มทำงานหรือไม่ก็ตาม อย่างน้อยเรายังสามารถตรวจสอบได้จากโปรแกรมคำสั่งจากแพคเกจ wireless-tools ซึ่งมีให้มาพร้อมใช้งานใน Fedora Core 5 ซึ่งมีคำสั่งที่น่าสนใจ คือ iwlist จะสามารถสั่งงานการ์ดไวร์เลสให้ค้นหา (scanning) เครือจข่ายไวร์เลสในพื้นที่นั้นได้ ประโยชน์ของคำสั่งนี้จะช่วยให้คุณสามารถแยกปัญหาได้ว่า โมดูล NdisWrapper กับไดร้วเวอร์อุปกรณ์ไวร์เลสเริ่มทำงานแล้วหรือยัง ถ้าเริ่มทำงานแล้วจะได้รับผลรายงานจากการ scanning ในขณะเดียวกันถ้าคำสั่ง iwconfig หรือ ifconfig ยังไม่สามารถรายงานเรื่อง IP Configuration ได้แสดงว่าการกำหนดค่าในคอนฟิกอาจผิดพลาดหรือไม่ครบถ้วน (เช่น ยังไม่ได้ตั้งค่า WEP Key ให้ตรงกับ Access Point ) เท่านั้น # iwlist wlan0 scanning
# iwconfig wlan0
# ifconfig wlan0



รูปที่ 3 ผลลัพธ์คำสั่ง iwlist จะสังเกตเห็นค่า ESSID จากเครือข่าย



รูปที่ 4 ผลลัพธ์คำสั่ง iwconfig



รูปที่ 5 ผลลัพธ์คำสั่ง ifconfig
ดังนั้นสรุปได้ว่าหากไดร้วเวอร์ทำงานได้จะสามารถ iwlist ได้ แต่อาจจะยังใช้งานไม่ได้เพราะคอนฟิกยังไม่สมบูรณ์ คุณสามารถปรับแต่งได้จากโปรแกรม Network Configuration ในแถบ Wireless Settings ดังรูปที่ 6


รูปที่ 6 การกำหนดค่าเพิ่มเติมในแบบ GUI

หลังจากเริ่มการทำงานของบริการ network ใหม่แล้ว ถ้าค่าต่างๆ ที่เกี่ยวกับ TCP/IP และค่าตัวแปรเกี่ยวกับความปลอดภัยในระบบเครือข่ายไร้สายมีค่าที่ถูกต้องแล้วจะสามารถใช้งานเครือข่ายได้ โดยใน Fedora Core 5 จะมีโปรแกรมยูทิลิตี้ที่เกี่ยวข้องกับระบบเครือข่ายไร้สายไว้ให้ใช้งานนอกเหนือจาก Network Configuration แล้ว ยังมี KWiFiManager ซึ่งเป็นแอปพลิเคชั่นของเดสทอปแบบ KDE เมื่อรันโปรแกรมนี้จะมีหน้าตาดังรูปที่ 7 โดยจะรายงานว่ากำลังใช้งานในเครือข่ายใด มีค่าความแรงของสัญญาณมากหรือน้อย กำลังใช้ความเร็วเท่าใดอยู่ เป็นต้น (สังเกตที่ Top Panel จะเห็นมาตรวัดความแรงสัญญาณเล็กๆ ด้วย) นอกจากนี้ถ้าใช้งานในเดสทอปแบบ KDE ยังสามารถ Add Applet เพิ่มเติมใน Panel ได้อีกซึ่งมีมาตรวัดสัญญาณ WiFi ให้ใช้งานเช่นเดียวกัน แต่หน้าตาไม่สวยงามนัก


รูปที่ 7 ขณะใช้งานโปรแกรม KWiFiManager
ถึงแม้ปัญหาการใช้งานอุปกรณ์เครือข่ายไร้สายกับระบบปฏิบัติการลีนุกซ์ ได้รับการแก้ไขด้วย NdisWrapper แล้วก็ตาม แต่มิได้หมายความว่า NdisWrapper จะสนับสนุนไดร้วเวอร์อุปกรณ์ไร้สายที่มีในท้องตลาดได้ทั้งหมด ซึ่งผู้ใช้งานจะต้องเข้าไปที่ Wiki ของโปรเจค NdisWrapper เพื่อตรวจสอบว่าอุปกรณ์ของเราสามารถใช้งานกับ NdisWrapper ได้หรือไม่ และมีเงื่อนไขอย่างไรบ้าง

แหล่งข้อมูลอ้างอิง
  1. NdisWrapper Project : http://ndiswrapper.sourceforge.net/
  2. NDIS specification : http://www.microsoft.com/whdc/device/network/ndis/
  3. NdisWrapper Wiki : http://ndiswrapper.sourceforge.net/mediawiki/index.php/Main_Page