2009年12月20日 星期日

Qt 環境配置 及 Tslib 觸控建立

~~事前準備工作~~
Linux版本:Fedora 9以上(我是用Fedora10)
Tslib版本:tslib-1.4.tar.bz2
Qt版本:qt-x11-opensource-src-4.5.0.tar
Qte版本:qt-embedded-linux-opensource-src-4.5.0.tar
交叉編譯器:arm-linux-gcc-4.3.2(用這版可以不用一直切換編譯器版本)
arm-linux-gcc-3.4.1(6410板子使用kernel cross compiler為4.2.2-eabi, lib為XXX.2.3.2 )
映像檔程式:mkyaffs2image.tgz (安裝方式:#tar zxvf mkyaffs2image.tgz –C /)
cramfs-1.1.tar.gz (6410板子使用 安裝方式:解壓縮-> # make ->產生cramfsck及mkcramfs->複製到/bin下)


~~tslib編譯~~
# tar jxvf tslib-1.4.tar.bz2
# cd tslib
tslib # ./autogen.sh
tslib # ./configure --prefix=$PWD/_install CC=arm-linux-gcc --host=arm ac_cv_func_malloc_0_nonnull=yes
分析:
--prefix => 指定Tslib安裝路徑
CC => gcc使用何種編譯器
--host => 目標的機器
ac_cv_ func_molloc_0_nonnull=yes => 緩衝〔固定會加這行〕
tslib# make
tslib# make install
tslib# cd _install/etc
etc # vim ts.conf (修改ts.conf內容)
內容:
原本=> # module_raw input
去除#=> module_raw input (m前面不可留空白)
Q : 如果 filesystem 的 etc目錄為"唯讀",會造成五點校準程式 (ts_calibrate) 所產生的 pointercal 坐標檔無法儲存
Ans: 修改 tslib/tests/ts_calibrate.c 將裡面 /etc/pointercal 路徑改為filesystem可寫入的路徑(例:/tmp/pointercal)

~~Qt-embedded程式安裝:主要可在Linux下產生編譯arm板的qmake編譯器+Tslib功能~~

# tar jxvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2 –C /
# mv qt-embedded-linux-opensource-src-4.5.0 qte-4.5.0-arm
# cd /qte-4.5.0-arm



設置Qt環境:
qte-4.5.0-arm# ./configure -prefix /usr/local/Trolltech/Qte-4.5.0-arm –qt-zlib –qt-libjpeg –embedded arm – xplatform qws/linux-arm-g++ -little-endian –depths 16 –qt-mouse-tslib
–I /tslib/_install/include(Tslib include路徑) –L /tslib/lib(Tslib lib路徑)



配置(configure)說明:<http://ccoolloorr.blogspot.com/2008/06/qtopia-configure.html,
http://translate.google.com/translate?hl=zh-TW&u=http%3A%2F%2Fwww.cnblogs.com%2Fcnnbboy%2Farchive%2F2009%2F07%2F13%2F1522461.html>



系統訊息:
-------------------------------------------------------
Type 'G' to view the GNU General Public License.
Type 'yes' to accept this license offer.
Type 'no' to decline this license offer.
-------------------------------------------------------
# yes

qte-4.5.0-arm # make (編譯)~~大約二個小時,視電腦速度
qte-4.5.0-arm # make install (安裝)=>路徑:-prefix(所設置的地方)

copy動態編譯檔:
qte-4.5.0-arm # cd /usr/local/Trolltech/Qte-4.5.0-arm/lib
lib# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ libc.so.6 .
lib# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ libdl.so.2 .
lib# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ libgcc_s.so.1 .
lib# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ libpthread.so.0 .
lib# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/lib/ libstdc++.so.6 .
copy tslib(保險起見 copy一下) :
lib# cp /tslib/_install/lib/libts-0.0.so.0 .

設置 主機 /etc/profile:
# vim /etc/profile
加入:export QTEDIR=/usr/local/Trolltech/Qte-4.5.0-arm
export PATH=$QTEDIR/bin:$PATH
# source /etc/profile (設置生效)
# qmake –v (確認版本及Qt目錄位置)
****Q:Fedora10本身有安裝Qt3可能環境上會衝到~
Ans:將 /etc/profile.d/qt.sh及qt.csh這二個檔名修改結尾不要sh就可以

將tslib/_install/ 裡的檔案 copy到板子的檔案系統目錄中
bin目錄下的檔案:
ts_calibrate ts_harvest ts_print ts_print_raw ts_test
etc目錄下的檔案:
ts.conf
lib目錄下的檔案:
libts-0.0.so.0 libts-0.0.so.0.1.1 libts.la libts.so pkgconfig資料夾 ts資料夾

設定 板子 /etc/profile (tslib環境變數):
root_qtopia# vim /etc/profile
加入:cd
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0(6410板子是/dev/event0)
export TSLIB_CALIBFILE=/etc/pointercal (若有修改ts_calibrate.c 改為產生路徑/tmp/pointercal)
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH
export QWS_MOUSE_PROTO=”tslib:/dev/input/event0” (不設的話,ts的游標會亂跑)
export QWS_MOUSE_PROTO=”tslib:/dev/event0”(6410板子)
export QWS_DISPLAY=”LinuxFb:mmWidth85” (設定字型,原本太小)

建立一個Qt應用程式:<
http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/Qt4Gossip.html教學>
# qmake –project (產生pro)
# qmake (產生make)
# make (編譯)
# cp Qt執行檔 /檔案系統目錄/bin
查詢程式所需的動態library:
# arm-linux-objdump –p (程式名稱)=>需在程式所在目錄下
NEEDED libQtGui.so.4
NEEDED libts-0.0.so.0
NEEDED libpng.so.3
NEEDED libQtNetwork.so.4
NEEDED libQtCore.so.4
NEEDED librt.so.1
NEEDED libdl.so.2
NEEDED libpthread.so.0
NEEDED libstdc++.so.6
NEEDED libm.so.6
NEEDED libgcc_s.so.1
NEEDED libc.so.6
RPATH /usr/local/Trolltech/Qte-4.5.0-arm/lib
(在板子的檔案系統建立相同RPATH路徑的目錄,建議將上面有關Qt的.so檔,
都放入上面RPATH的lib目錄下)
# find 從哪個路徑 –name “檔名”(可利用find來查詢檔案所在位置)
# mkdir fonts (建立字型檔)
# cd fonts
# cp /usr/local/Trolltech/Qte-4.5.0-arm-341/lib/fonts/c0419bt_.pfb .

打包檔案系統:
#mkyaffs2image 檔案系統目錄 檔案系統目錄.img
#mkcramfs檔案系統目錄 檔案系統目錄.cramfs
將資料燒寫到板子上開機:
以下是板子上的操作:
# ts_calibrate(游標定位)
# Qt程式 –qws & (執行)

<>
解壓縮qt-x11-opensource-src-4.5.0.tar
# cd qt-x11-opensource-src-4.5.0
# echo yes ./configure
# make && make install

安裝 Android yaffs system 到 6410 板子

Linux 平台下:
1. 準備一張 SD 卡 (不要SDHC), 插入電腦, 若電腦自動掛載, 請卸載
2.終端機 執行: fdisk /dev/sdb
2-1. 查看 fdisk 選項:
輸入 m
2-2. 刪除分區:
輸入 d
2-3. 創建第一分區:
輸入 n, p, 1, 空白, 20M
2-4. 創建第二分區:
輸入 n, p, 2, 空白, 空白
2-5. 標記Boot於第一個分區:
輸入 a, 1 輸入 p 查看剛才設定
2-6. 寫入分區表:
輸入 w
3.格式化2個分區:(2-6執行完通常會自動掛載,請先卸載)
3-1. 格式化第一分區為vfat:
# mkfs.vfat /dev/sdb1
3-2. 格式化第二分區為ext3:
# mkfs.exts /dev/sdb2

Windows 平台下:
開啟 SD_Fusing_Tool.exe 工具
1-1. SD/MMC Drive 選擇 SD卡所在的槽
1-2. Bootloader
Image file -> Browse -> 選擇 u-boot-sd.bin 路徑位置
1-3. Kernel
Image file -> Browse -> 選擇 zImage-sd 路徑位置
1-4. Partition Size -> Kernel -> 選擇 "6" MB
1-4. 點選 START 成功會彈出 Fusing image done

Linux 平台下:
將SD卡插入到Linux系統下, 將 u-boot-nand.bin, zImage-nand, androidfs.tar 三個文件
複製到剛才產生的ext3分區中

開發板平台下:
1. 將板子 SW 開關設為 SD 卡啟動
2. 將 SD 卡的 ext3 分區掛載至 /home
# mount -t ext3 /dev/mmcblk0p2 /home
3. 清除 NandFlash 分區 0
# flash_eraseall /dev/mtd0
4. 將 u-boot-nand.bin 寫入 NandFlash 分區 0
# flashcp -v /home/u-boot-nand.bin /dev/mtd0
5. 清除 NandFlash 分區 1
# flash_eraseall /dev/mtd1
6. 將 zImage-nand 寫入 NandFlash 分區 1
# flashcp -v /home/zImage-nand /dev/mtd1
7. 清除 NandFlash 分區 2
# flash_eraseall /dev/mtd2
8. 掛載文件系統
# mount -t yaffs2 /dev/mtdblock2 /mnt
9. 將文件系統解壓到 NandFlash 分區 2
# tar xvf /home/androidfs.tar -C /mnt
10.將板子設置 Nand Flash 開機即可