Submitted by admin on Sat, 01/02/2010 - 01:17
มาถึงตอนนี้เราก็มีเครื่องเทียมที่วิ่งระบบปฎิบัติการ Linux Ubuntu และพร้อมที่จะทำการสร้าง Image File เพื่อใช้ในการ Flash WRT54GL ของเราแล้วนะครับ
หากท่านทำทุกอย่างถูกต้อง เมื่อเปิดโปรแกรม VirtualBox ขึ้นมาใหม่ ก็จะเห็นดังภาพ ให้คลิ๊กเลือก Ubuntu แล้วคลิ๊กปุ่ม Start

รอสักครู่ Linux Ubuntu ก็จะปรากฏขึ้นมา หลักๆแล้วเราจะทำงานกับส่วนที่เรียกว่า Console (เปรียบไปเหมือน DOS command ในระบบปฏิบัติการวินโวส์) การเข้า Console ทำได้โดย คลิ๊กเมนู Application/Accessories/Terminal
เราสามารถที่จะเปิด Console Termianl หลายๆหน้าต่างพร้อมๆกันได้

พิมพ์คำสั่ง sudo apt-get update แล้วกด Enter ระบบจะถามหา password (หวังว่าคงยังจำ password ที่ใส่ตอนติดตั้งได้นะครับ)

sudo คืออะไร
ในระบบลินุกซ์จะมีการแบ่งผู้ใช้งานระบบออกเป็นสองกลุ่มใหญ่ๆได้แก่ ผู้ใช้ธรรมดา และ ผู้ดูแลระบบ โดยผู้ดูแลระบบนั้นจะมีชื่อเป็นทางการอย่างว่า root เหตุผลที่แบ่งเช่นนั้นเพราะว่า root เป็นผู้ใช้ที่ต้องติดตั้งดูและจัดการระบบและสามารถทำความเสียหายให้กับระบบได้หากไม่มีความระมัดระวัง ดังนั้นในการใช้งานทั่วๆไป เราจะloginเข้าระบบเป็นเหมือนผู้ใช้ธรรมดาทั่วไป แต่เมื่อไหร่ก็ตามที่จะต้องใช้คำสั่งเกี่ยวกับการติดตั้งระบบ เราก็จะบอกระบบว่า ฉันจงใจจะใช้คำสั่งนี้ในฐานะ root นะ นั่นคือที่มาว่าทำไมต้องใส่ sudo หน้าคำสั่ง
apt-get update ทำอะไร
apt-get เป็นคำสั่งเฉพาะของ Linux Distribution ที่แตกรากมากจาก Debian ในกรณีนี้รวมไปถึง Ubuntu ด้วย apt-get เป็นคำสั่งที่ใช้ในการบริหารจัดการโปรแกรมเพิ่มเติมต่างๆที่ไม่ได้รวมอยู่ด้วยในขั้นตอนการติดตั้งตอนแรก apt-getโดยส่วนใหญ่จะชี้ไปหาไฟล์ที่อยู่บนInternet เนื่องจากไฟล์ที่อยู่บนอินเตอร์เน็ทจะมีการอัพเดทตลอดเวลา ดังนั้นจึงควรจะทำการอัพเดทรายชื่อของไฟล์เสียก่อนด้วยการใช้คำสั่ง apt-get update

ต่อไปเราจะเริ่มติดตั้งโปรแกรม(ซึ่งในกรณีUbuntuเราจะเรียกว่า Packages)ที่จำเป็นในการCompile kernel และสร้าง Image file สำหรับ Router ของเราด้วยคำสั่งใน Console ดังนี้
$ sudo apt-get install build-essential
$ sudo apt-get install libncurses5-dev
$ sudo apt-get install libz-dev
$ sudo apt-get install gawk
$ sudo apt-get install flex
ตามด้วยการติดตั้งโปรแกรม subversion (โปรแกรมนี้ใช้ในการบริหารจัดการซอสโคด อาทิเช่นอัพเดทไฟล์ที่อยู่บนเครื่องเราเมื่อมีการอัพเดทซอสโคดที่อยู่บนอินเตอร์เน็ท)
$ sudo apt-get install subversion
สร้าง directory ชื่อ openwrt และเข้าไปภายใต้ openwrt เพื่อทำการดึง source code ล่าสุดด้วยคำสั่ง svn checkout
$ mkdir openwrt
$ cd openwrt
$ svn checkout svn://svn.openwrt.org/openwrt/trunk kamikaze
โปรแกรม svn จะทำการดึงซอสไฟล์เอามาไว้ภายใต้ directory ที่ชื่อ kamikaze ดังนี้

เอาละครับ ได้ซอสโค๊ดมาแล้ว ตรงนี้ยังไม่มีความจำเป็นที่จะลงในรายละเอียดว่ามีอะไรอยู่ในซอสโค๊ดบ้าง เราจะกลับมาเจาะลึกอีกทีหากมีความจำเป็นต้องแก้ไขดัดแปลงการสร้างkernelของเราเพื่อเพิ่มเติมความสามารถนอกเหนือไปจากที่ควรจะมี แต่สำหรับคนที่สนใจอยากจะรู้ว่ามันมีอะไรบ้างและเพื่ออะไรก็หาอ่านรายละเอียดได้จากที่นี่ครับ http://kamikaze.openwrt.org/docs/openwrt.html#x1-410002.1.1
ก่อนที่เราจะเริ่มต้นสร้าง Kernel และ Image เรามีความจำเป็นต้องรู้อีกสองอย่างที่มีความสำคัญในการช่ว่ยสร้าง kernel ของเรา นั่นคือ
1. Linux kernel สร้างจากโปรแกรมย่อยๆจำนวนมหาศาล ดังนั้นการที่จะคอมไพล์ไฟล์แต่ละตัวแล้วนำมาเชื่อมต่อกันโดยไม่มีระบบจัดการเลยไม่ใช่เรื่องที่ทำได้ง่ายๆ ด้วยเหตุนี้จึงมีการค้นคิดระบบช่วยในการคอมไพล์ขึ้นมาคือโปรแกรม make โดยตัวโปรแกรมนี้จะใช้ในการช่วยคอมไพล์ให้ง่ายดายยิ่งขึ้น สามารถแบ่งการสร้าง kernel เป็นขั้นตอนต่างๆ โดยแต่ละขั้นตอนจะเรียกว่าtarget วิธีการในการprocess targetต่างๆจะถูกเก็บไว้ในไฟล์ที่ชื่อ Makefile ตัวอย่างเช่น ถ้าเราใช้คำสั่ง
$ make clean
โปรแกรม make จะเข้าไปหาในไฟล์ Makefile ว่า target ที่ชื่อว่า clean ต้องทำคำสั่งอะไรบ้าง ซึ่งปกติ clean ก็จะทำการลบไฟล์ที่ได้จากการคอมไพล์ครั้งที่แล้วออกจากระบบทั้งหมดให้มีสภาพเหมือนก่อนการคอมไพล์
2. Linux kernel เป็นโปรแกรมที่มีความยืดหยุ่นอย่างสูง เราสามารถที่จะกำหนดได้ว่าให้สร้างkernelที่มีความสามารถอะไรบ้าง เหตุผลก็เพราะว่าเราไม่ต้องการรวมความสามารถทุกอย่างเข้าไปในkernelจนทำให้kernelมีขนาดใหญ่โตเกินกว่าที่จะใส่ลงไปบน Flash memoryได้ และโดยธรรมชาติของ Embedded Linuxแล้วฮาร์แวร์จะไม่มีการเพิ่มเติมเปลี่ยนแปลงบ่อยเหมือนอย่างบนพีซี
ไฟล์ที่ใช้กำหนดความสามารถของkernelที่เราจะสร้างมีชื่อว่า .config (จุดข้างหน้าไฟล์ในlinux system จะทำให้ไฟล์นั้นๆไม่แสดงเมื่อใช้คำสั่ง ls ธรรมดา แต่จะแสดงเมื่อใช้คำสั่ง ls -a สำหรับรายละเอียดวิธีการใช้ ls หรือ list directory contentให้ใช้คำสั่ง man ls ใน console )
เอาล่ะครับ ถึงเวลาลงมือ Compile kernel กันจริงๆสักที...
เริ่มต้นด้วยการ config kernel ของเราให้เป็นอย่างที่เราต้องการก่อนดังนี้
1. ใน Console หรือ Terminal ให้เราพิมพ์คำสั่งเพื่อไปยัง directory ของซอสโค๊ดก่อน
$ cd ~/openwrt/kamikaze
2. เริ่มต้น config ด้วยคำสั่ง
$ make menuconfig

โดยDefaultแล้ว config จะถูกเซ็ทไว้ให้สร้างKernel version 2.4 เราต้องการเปลี่ยนให้เป็น version 2.6 โดยกด Enter ตรง Target System แล้วใช้หัวลูกศรเลือก Broadcom BCM947xx/953xx จากนั้นกด Enter อีกครั้งหนึ่ง โปรแกรมจะกลับมายังเมนูหลักและแสดงผลว่า Target System (Broadcom BCM947xx/953xx)
3. ให้เลื่อนหัวลูกศรมาตรง Kernel modules แล้วกด Enter
»



