Submitted by admin on Fri, 01/15/2010 - 21:24

Qt เป็น Cross-Platform Application และ UI Frame Work ที่วิ่งได้ในหลายระบบตั้งแต่ Windows, Mac OSX, Linux ตลอดจนไปถึง Linux Embeded system เราสามารถที่จะพัฒนาบน Platform หนึ่งแล้วเอาซอสโคดไปคอมไพล์ใช้บนอีก Platform ได้อย่างสบาย ตลอดจนเนื่องจากเป็น C++ ดังนั้นประสิทธิภาพของโปรแกรมที่ได้จึงสูงมาก
บทความนี้จะแสดงวิธีการคอมไพล์ระบบ Qt เพื่อนำไปใช้บน Mini2440 โดยจะอิง Qt 4.5.3 และ Qt 4.6 เป็นหลัก โดยสมมติให้ home directory ของ user คือ /home/mini2440
1. หากระบบยังไม่ได้ติดตั้ง cross tool chain ให้ทำงานติดตั้งได้ตามนี้ครับ การติดตั้ง Cross Tool Chain
2. เนื่องจาก Embedded Linux มักจะใช้งานร่วมกับ Touch screen ดังนั้นเราจึงจำเป็นต้องเตรียม Driver สำหรับ Touch screen ดังนี้
- กำหนด directory และ ตำแหน่งที่เราจะไปดึง source code ด้วย cvs
- password ที่ใช้ในการดึง source code คือ anoncvs
$ mkdir tslib |
ผลที่ได้จะเป็นดังนี้

- source code จะถูกดึงมาไว้ที่ ~/tslib/apps/tslib
- เริ่มต้นการสร้าง tslib ดังนี้
$ export ac_cv_func_malloc_0_nonnull=yes |
export ac_cv_func_malloc_0_nonnull=yes ต้องทำก่อน configure หากไม่ทำเวลา compile จะเจอปัญหา "undefined reference to rpl_malloc"
$ cd ~/tslib/apps/tslib |
- เมื่อเสร็จสิ้นการคอมไพล์ เราจะได้ tslib อยู่ภายใต้ build directory โดยมีโครงสร้างดังนี้
/home/mini2440/tslib/apps/tslib/build |
3. คราวนี้ก็ได้เวลาเตรียม source code สำหรับ Qt แล้วครับ โดยสร้าง Directory แล้วทำการดึงไฟล์มาแล้วแตกไฟล์ดังนี้
ในกรณีที่เป็น Qt4.5.3
$ mkdir ~/qt4.5.3 |
ในกรณีที่เป็น Qt4.6
$ mkdir ~/qt4.6 |
4. แก้ไขไฟล์ mkspecs/qws/linux-arm-g++/qmake.conf ที่ใช้กำกับการสร้าง Qt ดังนี้
แก้ไขFilename ของ cross tool chain ในส่วนสีแดงให้ถูกต้อง หากท่านใช้ Cross Tool Chain ตัวอื่นที่แตกต่างไปจากที่กำหนดไว้ในข้อ 1เพิ่มบรรทัดสีชมพูเพื่อกำหนดตำแหน่งของ Include/Lib สำหรับ Touch Screen Lib ที่เราได้สร้างไว้ในข้อ 2
|
|
- ในกรณีของ Qt4.6 เนื่องจากมีบั๊กในการสร้าง Makefile เราจึงจำเป็นต้องเพิ่ม LIBS += -lts ไปอีกบรรทัดเพื่อรองรับ Touch screen lib ดังนี้
|
|
5. ทำการ configure ด้วยคำสั่ง
$ ./configure -embedded arm -xplatform qws/linux-arm-g++ -prefix /usr/local/Qt -qt-mouse-tslib -little-endian -qt-gfx-transformed -qt-gfx-linuxfb -qt-gfx-vnc |
- -qt-gfx-transformed สำหรับติดตั้ง Driver เพื่อการหมุนหน้าจอ
- -qt-gfx-linuxfb สำหรับติดตั้ง Driver เพื่อติดต่อกับ Linux Frame Buffer
- -qt-gfx-vnc สำหรับติดตั้ง Driver เพื่อให้ Qt เป็น vncserver ทำให้เราสามารถใช้ vnc client ติดต่อกับหน้าจอของ Qt
- -prefix /usr/local/Qt จะกำหนด Directory ที่จะทำการติดตั้งระบบ Qt
และเลือก o สำหรับ Open Source Edition และ เลือก yes เพื่อยอมรับ license

หลังจาก configure แล้วระบบก็พร้อมที่จะทำการสร้าง Qt

6. ทำการสร้างระบบ Qt ด้วยคำสั่ง make ซึ่งจะใช้เวลาในการ compile ยาวนานมากและหากทุกอย่างเรียบร้อย เราก็สามารถต่อด้วยคำสั่ง sudo make install เพื่อติดตั้ง Qt ไปยังตำแหน่งที่ระบุไว้ด้วย -prefix ในข้อ 5 ซึ่งในกรณีนี้คือ /usr/local/Qt เราจำเป็นต้องใช้คำสั่ง sudo ในขั้นตอนการ make install เพราะ /usr/local จะเขียนได้โดย root เท่านั้น
7. มาถึงจุดนี้ ไฟล์ของระบบ Qt ที่จะใช้รันบน mini2440 ทั้งหมดจะถูกเก็บอยู่ไว้ที่ /usr/local/Qt ซึ่งเราจะต้องทำการย้ายไปลงยัง File system ของ mini2440 ที่จะใช้รัน โดยเราจะต้องมีระบบที่วิ่ง Linux อยู่แล้ว หากท่านยังไม่มีระบบ Linux วิ่งอยู่บน mini2440 ให้ดูตัวอย่างการสร้างได้จากบทความสองอันนี้ การสร้าง Debian File System สำหรับ mini2440 หรือ การสร้าง Ångström Distribution ด้วย Openembedded
- ระบบที่ใช้ทดสอบมีคุณสมบัติดังนี้
- วิ่ง Linux Angstrom Distribution
- mini2440 ใช้ file system ที่ต่อผ่าน Network File system โดย root directory ของ mini2440 จะถูก map ไปยัง Host system ที่ /nfs/home/Angstrom-console (ดูเรื่อง การบูทระบบด้วย Network File System )
8. เริ่มต้นด้วยการย้ายไฟล์ที่เกี่ยวของกับ touch screen ไปยัง File System ของ mini2440
$ export MINI2440FS="/nfs/home/Angstrom-console" |
9. คัดลอกไฟล์ที่จำเป็นในการรันจาก Cross Tool Chain ไปยัง File system ของ mini2440 ดังนี้
$ export MINI2440FS="/nfs/home/Angstrom-console" |
10. คัดลอกไฟล์ Qt ไปยัง Root File System ของ mini2440
$ export MINI2440FS="/nfs/home/Angstrom-console" |
11. มาถึงขั้นนี้เราก็พร้อมที่จะบูท mini2440 ของเราแล้วครับ ให้เปิดสวิชท์เพื่อเริ่มต้นรัน mini2440 รอจนบูทเสร็จสิ้นแล้วให้ login ระบบด้วย root user
เราจำเป็นต้องทำการ Calibrate touch screen ของเราก่อนใช้งาน แต่ก่อนอื่นเราต้องแก้ไขไฟล์อีกสองตัวดังนี้
- แก้ไขไฟล์ /etc/ts.conf โดยตัดคอมเม็นท์ # ออกจากบรรทัดที่สองดังนี้
# Uncomment if you wish to use the linux input layer event interfacemodule_raw input |
- แก้ไขไฟล์ /etc/profile โดยเพิ่ม export ที่เกี่ยวข้องกับ tslib ดังนี้
|
|
หลังจากแก้ไขไฟล์แล้วให้ รีบูท mini2440 หนึ่งครั้ง !!!!!
- login root แล้ววิ่งคำสั่ง ts_calibrate จะเห็นภาพดังนี้ปรากฏบนหน้าจอ mini2440 ให้ทำการแตะจุดไปจนครบห้าจุด ซึ่งโปรแกรมจะทำการเก็บข้อมูลของการ Calibrate ไว้ในไฟล์ /etc/pointercal

12. และแล้วก็ได้เวลาที่เราจะได้ทดสอบโปรแกรมแรกของ Qt ภายใต้ mini2440 แล้ว ให้รัน demo ดังนี้
# cd /usr/local/Qt/demos/embedded/fluidlauncher |
ถ้าทุกอย่างถูกต้อง ท่านจะเห็น fluidlauncher ปรากฏบนจอ lcd ของ mini2440 ดังนี้ครับ
