Cross Toolchains
Last updated
Last updated
Assoc. Prof. Wiroon Sriborrirux, Founder of Advance Innovation Center (AIC) and Bangsaen Design House (BDH), Electrical Engineering Department, Faculty of Engineering, Burapha University
ระบบปฏิบัติการลีนุกซ์ได้จัดเตรียมเครื่องมือพื้นฐานสำหรับการพัฒนาไว้เบื้องต้นอยู่แล้วซึ่งเรียกว่า “Native Toolchain” ซึ่งตัว native toolchain จะเป็นเครื่องมือหลักในการสร้างรหัสโปรแกรมที่ให้สามารถทำงานได้ บนแพลตฟอร์มของเครื่องคอมพิวเตอร์นั้นๆ (เช่น x86 Platform) แต่ในกรณีการพัฒนาโปรแกรมสำหรับระบบสมองกลฝังตัวนั้น ไม่สามารถใช้ native toolchain ที่มากับระบบปฏิบัติการได้ เนื่องจากระบบสมองกลฝังตัวมีข้อจำกัดในเรื่องของขนาดหน่วยความจำและการเก็บข้อมูล การทำงานช้ากว่าเครื่องคอมพิวเตอร์ส่วนบุคคลและที่สำคัญไม่สามารถจะติดตั้งเครื่องมือพัฒนาทั้งหมดให้อยู่บนระบบสมองกลฝังตัวได้
ดังนั้นต้องใช้เครื่องมือพัฒนาที่สามารถแปลงรหัสเพื่อให้สามารถใช้ข้ามแพลตฟอร์มได้ซึ่งจะถูกเรียกว่า “Cross-compiling Toolchain” หรือ “Cross Toolchains” ดังรูปข้างล่างแสดงให้เห็นว่า cross-compiling toolchain จะคอมไพล์โปรแกรมที่เขียนขึ้นมาให้สามารถทำงานได้บนสถาปัตยกรรมนั้นๆ (เช่น สถาปัตยกรรม ARM) ตามที่ถูกตั้งค่าไว้ก่อนเริ่มทำการคอมไพล์ ดังตัวอย่างข้างล่าง
ในปัจจุบันนี้มีเครื่องมือ cross toochains ที่ช่วยในการพัฒนางานด้านสมองกลฝังตัวอยู่หลายตัว โดยอาจแบ่งออกได้เป็น 2 กลุ่มใหญ่ๆ ได้แก่
CodeSourcery (http://www.codesourcery.com/)
CodeSourcery เป็นตัวที่ออกแบบเพื่อให้สามารถใช้กับ Sourcery G++ และ Eclipse IDE ที่ทำงานร่วมกันกับ GNU Toolchain (gcc, gdb เป็นต้น) ที่รองรับสถาปัตยกรรม ARM, Coldfire, MIPS, SuperH และ PowerPC
Linaro (http://linaro.org/)
Linaro เป็นองค์กรที่ไม่แสวงหากำไร ซึ่งเป็นการรวมตัวกันของเหล่าวิศวกรมือดี เพื่อร่วมกันสร้างและปรับแต่ง open source และเครื่องมือต่างๆ ให้กับสถาปัตยกรรม ARM ทาง Linaro เองก็ได้จ้างคนที่พัฒนา CodeSourcery เพื่อเน้นให้เป็นเครื่องมือที่เหมาะกับสถาปัตยกรรม ARM ให้มากที่สุด
DENX ELDK (http://www.denx.de/)
DENX Embedded Linux Development Kit (ELDK) จะเป็นชุดเครื่องมือที่เหมาะกับระบบสมองกลฝังตัวที่ทำงานแบบเวลาจริง (real-time) บนสถาปัตยกรรม ARM, PowerPC และ MIPS ชุดเครื่องมือที่สามารถใช้ได้ฟรีตามเงื่อนไข GPL และ Free Software Licenses ประกอบไปด้วย Cross Development Tools (Compiler, Assembler, Linker เป็นต้น), Native Tools (Shell, commands และ libraries), U-Boot, Linux kernel ที่มีโค้ดโปรแกรม ไลบรารีสำหรับบอร์ดสมองกล, Xenomai (RTOS Emulation framework) และ SELF (Simple Embedded Linux Framework)
Scratchbox (http://www.scratchbox.org/)
Scratchbox เป็นเครื่องมือที่ใช้ในการพัฒนา Maemo (Nokia 770, N800, N810 Internet Tablets และ Nokia N900) ซึ่งเน้นสนับสนุนสถาปัตยกรรม ARM และ x86
Buildroot (http://buildroot.uclibc.org/)
Buildroot เป็นเครื่องมือที่สมบูรณ์ที่นิยมตัวหนึ่งสำหรับการพัฒนาในระบบสมองกลฝังตัว และรองรับสถาปัตยกรรมหลากหลาย นักพัฒนาสามารถสร้าง RFS image (Root File System Image) ที่พร้อมจะสามารถเขียนลงแฟลช (flash) ได้ทันที นอกจากนั้นยังสามารถปรับแต่งหรือเพิ่มเติม open source อื่นเข้าไปใน RFS Image ได้ โดยตัว buildroot นี้จะสนับสนุนไลบรารีเพียง uClibc แต่ไม่สนับสนุนไลบรารี glibc
Crosstool-NG (http://crosstool-ng.org/)
Crosstool-NG เป็นเครื่องมือพัฒนาที่ได้รับความนิยมไม่แพ้ตัว buildroot โดยมีรูปแบบในการปรับแต่งเคอร์เนลผ่าน make menuconfig เช่นเดียวกับตัว buildroot สามารถรองรับได้ทั้ง uClibc และ glibc และมาพร้อมกับเครื่องมือในการดีบักโปรแกรม เช่น gdb, strace, dmalloc
Bitbake
Bitbake คือเครื่องมืออย่างง่ายที่ใช้ในการสร้างชุดแพกเก็ต ซึ่งถูกนำมาใช้ในโครงการ OpenEmbedded เช่น บอร์ด Ångström เป็นต้น
รายละเอียดภายในเครื่องมือ cross toolchains ที่จะต้องนำมาใช้ในการตั้งค่าการคอมไพล์ตัวซอร์สของลีนุกซ์คอร์เนล โปรแกรมที่จำเป็นสำหรับระบบสมองกลฝังตัว (เช่น BusyBox, Openssh, DirectFB เป็นต้น) และไลบรารีที่เกี่ยวข้องต่างๆ ประกอบไปด้วย
Binutils - เป็นชุดเครื่องมือที่เอาไว้ใช้ในการสร้างและจัดการไบนารีภายในโปรแกรมเพื่อให้เหมาะกับสภาพแวดล้อมบนสถาปัตยกรรมนั้นๆตัวอย่างคำสั่งได้แก่ as (Assembler), ld (Linker), ar, ranlib (สำหรับสร้างไลบรารีแบบ static), objdump, readelf, size, nm, strings, strip เป็นต้น
GCC Compiler - ชุด GNU C Compiler ซึ่งเป็นชุดที่แจกฟรีสำหรับใช้ในการคอมไพล์ภาษาโปรแกรมต่างๆ เช่น C, C++, Ada, Fortran, Java, Objective-C, Objective-C++ เป็นต้น เพื่อให้สามารถทำงานได้บนสถาปัตยกรรมที่หลากหลายเช่น ARM, AVR, Blackfin, CRIS, FRV, M32, MIPS, MN10300, PowerPC, SH, v850, i386, x86_64, IA64, Xtensa เป็นต้น
C/C++ Libraries - เป็นชุดไลบรารีที่มีความสำคัญต่อระบบปฏิบัติการลีนุกซ์เป็นอย่างมากซึ่งทำหน้าที่เป็นตัวกลางในการเชื่อมต่อระหว่างโปรแกรมและลีนุกซ์คอร์เนลสำหรับการพัฒนาในระบบสมองกลฝังตัว C Libraries มีอยู่หลายแบบเช่น glibc, uClibc, eglibc, dietlibc, newlib เป็นต้น
GDB Debugger - GDB เริ่มพัฒนาโดยนายริชาร์ด สตอลแมน เมื่อ พ.ศ. 2529 เพื่อให้เป็นส่วนหนึ่งของระบบ GNU หลังจากที่เขาพัฒนา GNU Emacs จนมีความเสถียรในระดับที่น่าพอใจ ซึ่งแนวความคิดของ GDB นั้นได้มาจาก Dbx ซึ่งเป็นโปรแกรมดีบั๊กเกอร์ที่มากับระบบปฏิบัติการ Unix BSD และในปัจจุบัน GDB ก็ได้ถูกดูแลโดย GDB Steering Committee ซึ่งเป็นคณะกรรมการที่ถูกตั้งโดยมูลนิธิซอฟต์แวร์เสรี (FSF) โดย GDB จะทำงานในแบบการพิมพ์คำสั่ง (command line) ผ่านหน้าจอ Console แต่ถ้าหากต้องการดีบักผ่านโปรแกรมในลักษณะกราฟฟิก (GUI) ก็สามารถใช้โปรแกรมชื่อว่า DDD แทนได้ ซึ่งโปรแกรมนี้จะทำการเรียกใช้คำสั่งของ GDB อีกต่อหนึ่ง
รูปข้างล่างเป็นตัวอย่างการนำชุดเครื่องมือ Buildroot มาใช้ในการสร้างและประกอบลีนุกซ์เคอร์เนล ไลบรารีและโปรแกรมประยุกต์ เพื่อนำไปฝังเข้าไปในบอร์ดสมองกลที่มีสถาปัตยกรรม ARM ต่อไปได้