ทีแรกว่าจะจดเป็น short note เฉยๆ พิมพ์ไปพิมพ์มาชักยาว ประกอบกับไม่ค่อยได้อัพบล็อก เลยคิดได้ว่า อย่ากระนั้นเลย... เอามาเขียนเป็นบล็อกจะดีกว่า =.=
BusyBox คือโปรแกรมสารพัดประโยชน์สำหรับระบบปฏิบัติการตระกูลลินุกซ์ ถ้าอ่านคำอธิบายจากเว็บไซต์ของมันจะได้ความประมาณว่า
BusyBox is a comprehensive set of programs needed to run a Linux system.
โดยปกติตัว BusyBox จะเป็นไฟล์ executable เพียงไฟล์เดียว แต่เราสามารถเรียกใช้งานคำสั่งต่างๆ ที่มีให้ใช้บนลินุกซ์ผ่านทางไฟล์นี้ได้ ยกตัวอย่างเช่น
busybox ls /system/app busybox wget http://www.example.com/file.zip
รายการคำสั่งที่มีให้เรียกใช้ใน BusyBox ดูได้จาก BusyBox Commands
สำหรับผู้ใช้ Android ที่ใช้โปรแกรมประเภทที่ต้องการสิทธิ์ root จะพบว่าส่วนใหญ่โปรแกรมพวกนี้จะมี requirement ว่าต้องมี BusyBox ติดตั้งอยู่ด้วย หรือบางโปรแกรมไม่ต้องการสิทธิ์ root แต่ก็ยังต้องการ BusyBox ซึ่งจริงๆ ก็สามารถติดตั้งได้ง่ายๆ โดยโหลดแอพพลิเคชันจาก Market เช่น BusyBox หรือ BusyBox Installer แต่ไหนๆ ก็บ้าพลังคอมไพล์ AOSP ใช้เองแล้ว เลยคิดว่าคอมไพล์ BusyBox ด้วยอีกอย่างจะเป็นไรไป :P
หมายเหตุ: ขั้นตอนต่อไปนี้ผมทำใน Ubuntu 11.04 64-bit นะครับ
ก่อนอื่นก็สร้าง directory สำหรับทำงานกันก่อน สมมติว่าเป็น /home/kong/busybox
mkdir -p /home/kong/busybox cd /home/kong/busybox
จากนั้นก็ดาวน์โหลด toolchain จาก CodeSourcery โดยเลือก target OS เป็น GNU/Linux ขณะที่เขียนบล็อกนี้จะเป็น Sourcery G++ Lite 2011.03-41 คลิกเข้าไปอีกที จะมีประเภทของ package ให้เลือก โดยเราจะเลือกเป็น IA32 GNU/Linux TAR กด copy URL ของไฟล์จากเบราเซอร์ พิมพ์คำสั่ง wget แล้ว paste URL ที่ได้ลงไป
wget http://www.codesourcery.com/sgpp/lite/arm/portal/package8739/public/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
ระหว่างรอโหลดขออธิบายนิดนึงว่า toolchain คือชุดของโปรแกรมที่ใช้คอมไพล์ซอฟต์แวร์ ในกรณีของเราจะใช้เป็น cross compiler เพื่อคอมไพล์ BusyBox สำหรับใช้บนแพลตฟอร์ม ARM ของ Android
สมมติว่าโหลดเสร็จเรียบร้อยแล้ว จะได้ไฟล์ arm-2011.03-41-....tar.bz2 จากนั้นก็แตกไฟล์โดยใช้คำสั่ง
tar xjf arm-2011.03-41-*.tar.bz2
จะได้ directory ชื่อ arm-2011.03 เพื่อความสวยงามขอเปลี่ยนชื่อ directory เล็กน้อย
mv arm-2011.03 toolchain
ขั้นตอนต่อมาคือดาวน์โหลดซอร์สโค้ดของ BusyBox ผ่าน git
git clone git://git.busybox.net/busybox src
จะได้ directory src ที่เก็บซอร์สโค้ดของ BusyBox อยู่ใน /home/kong/busybox อีกที ถึงตอนนี้เราก็พร้อมจะคอมไพล์ BusyBox แล้ว
cd src export PATH=/home/kong/busybox/toolchain/bin:$PATH make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
ในที่นี้ใช้ config แบบเดิมๆ ที่ทางผู้พัฒนาตั้งไว้ (defconfig) แต่ถ้ารู้ว่าอยากได้ฟีเจอร์อะไรจาก BusyBox บ้าง ก็สามารถเลือกเองได้โดยเปลี่ยนจากคำว่า defconfig เป็น menuconfig แทน
ถ้าคอมไพล์สำเร็จจะได้ไฟล์ busybox เป็น executable อยู่ใน /home/kong/busybox/src สามารถนำไป push เข้า Android ได้เลยครับ

2 comments
nice website.
A good read. I found it very useful. Gonna try it! Thanks!