QT在JZ2440開發板上移植筆記:
為了和移植手冊保持一致使用的gcc編譯器版本降為3.4.5:
#if 0
tar xjf arm-linux-gcc-4.3.2.tar.bz2 //解壓工具鏈
對於arm-linux-gcc-4.3.2解壓出來得到usr目錄,工具鏈在usr/local/arm/4.3.2/bin,
對於gcc-3.4.5解壓出來得到gcc-3.4.5-glibc-2.3.6工具鏈目錄在gcc-3.4.5-glibc-2.3.6/bin/
到解壓出來的工具鏈目錄下:
cd usr/local/arm/4.3.2/bin
pwd
/home/book/workspace/jz2440_project/system/usr/local/arm/4.3.2/bin
#else
為了移植QT文件系統,把gcc編譯器版本降為3.4.5:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin
sudo vi /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"
#endif
① 編譯、安裝jpeg庫jpegsrc.v6b.tar.gz:
tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --enable-shared --enable-static --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --build=i386 --host=arm
vi Makefile,如下:
CC= gcc 改為:CC= arm-linux-gcc
AR= ar rc 改為:AR= arm-linux-ar rc
AR2= ranlib 改為:AR2= arm-linux-ranlib
make
make install-lib
將在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux中的include目錄中生成一些頭文件,在lib目錄中生成一些jpeg庫文件。
② 編譯、安裝uuid庫:
tar xzf e2fsprogs-1.40.2.tar.gz
cd e2fsprogs-1.40.2/
mkdir build; cd build
../configure --with-cc=arm-linux-gcc --with-linker=arm-linux-ld --enable-elf-shlibs --host=arm -prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
make
make install-libs
最後一條命令在/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/下的include、lib目錄中安裝一些頭文件和庫,比如uuid/uuid.h、libuuid.a、libuuid.so等
③ 編譯、安裝zlib庫:
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3/
./configure --shared --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
修改生成的Makefile,以下是修改後的結果,都加上了“arm-linux-”前綴:
CC=arm-linux-gcc
……
LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1
……
CPP=arm-linux-gcc -E
……
AR=arm-linux-ar rc
……
RANLIB=arm-linux-ranlib
make
make install
④ 編譯、安裝png庫:
tar xjf libpng-1.2.23.tar.bz2
cd libpng-1.2.23/
cp scripts/makefile.linux ./Makefile
修改Makefile,以下是修改後的結果,都加上了“arm-linux-”前綴:
AR_RC=arm-linux-ar rc
CC=arm-linux-gcc
……
RANLIB=arm-linux-ranlib
……
prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
make
make install
⑤ 編譯、安裝觸摸屏ts庫:
由於使用tslib-1.3按照文檔修改依然出現“libtool:link: only absolute run-paths are allowed“的錯誤,決定使用tslib-1.4:
a、使用tslib-1.3:
tar xjf tslib-1.3.tar.bz2
cd tslib-1.3/
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
在make之前,為了支持觸摸屏修改src/ts_read_raw.c文件,如下修改代碼:
char *defaulttseventtype="UCB1x00";
改為:
char *defaulttseventtype="H3600";
為了防止出現“libtool:link: only absolute run-paths are allowed“的錯誤,在plugins/Makefile裡面找rpath,找到將其注釋並加上絕對路徑:
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`
最後執行以下命令編譯安裝:
make
make install
b、使用tslib-1.4:
tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
// 如果使用的arm-linux-gcc-4.3.2交叉編譯工具要修改/usr/local/arm/4.3.2裡
// 的宏EV_VERSION要修改input.h,再make,詳情參見“觸摸屏實驗章節”
make
make install //安裝到tmp目錄
⑥ 使用補丁修改、編譯QT:
tar xzf qtopia-free-src-2.2.0.tar.gz
cd qtopia-free-2.2.0
patch -p1 < ../qtopia-free-2.2.0_jz2440.patch
./configure -qte '-embedded -xplatform linux-arm-g++ -qconfig qpe -depths 16,24 -no-qvfb -system-jpeg -system-libpng -system-zlib -tslib -gif -thread -lts' -qpe '-xplatform linux-arm-g++ -edition pda -displaysize 240x320' -qt2 '-no-xft' -dqt '-no-xft'
make
make install
這將把所有必需的目錄、文件復制到qtopia/image/opt/Qtopia目錄下。
注意:./configure時,要輸入“yes”並回車才能繼續下去
⑦ 基於最小根文件系統制作QT文件系統:
使用fs_mini_mdev.tar.bz2:
sudo tar xjf fs_mini_mdev.tar.bz2
sudo cp -rf fs_mini_mdev fs_qtopia
sudo chown book:book fs_qtopis –R
a、復制Qtopia所依賴庫文件
cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/
cp libpng.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libjpeg.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libuuid.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
cp libz.so* /home/book/workspace/jz2440_project/fs_qtopia/lib/ -d
b、拷貝觸摸屏所需文件
到libts目錄下:
cd /home/book/workspace/jz2440_project/system/deps/tslib/tmp
cp * /home/book/workspace/jz2440_project/fs_qtopia -rfd
修改開發板 /etc/ts.conf第1行(去掉#號和第一個空格):
# module_raw input
改為:
module_raw input
c、復制字庫
cd /home/book/workspace/jz2440_project/system/deps/qtopia-free-2.2.0/
cp -rf qt2/lib/fonts qtopia/image/opt/Qtopia/lib/
d、將qtopia/image/opt/整個目錄復制到開發板根目錄上
cd /home/book/workspace/jz2440_project/system/deps/qtopia-free-2.2.0/
cp -rf qtopia/image/opt /home/book/workspace/jz2440_project/fs_qtopia
e、創建時區文件
直接使用主機中的時區文件:
cd /home/book/workspace/jz2440_project/fs_qtopia
mkdir -p usr/share/zoneinfo/
cp -rf /usr/share/zoneinfo/America usr/share/zoneinfo/
cp /usr/share/zoneinfo/zone.tab usr/share/zoneinfo/
f、建立一個腳本文件,用來較驗觸摸屏
在單板根目錄/bin下建立ts_cal.sh文件,內容如下:
=====================================================================
#!/bin/sh
export HOME=/root
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_KEYBOARD="TTY:/dev/tty1"
#export QWS_MOUSE_PROTO="USB:/dev/mouse0"
export QWS_MOUSE_PROTO="TPanel:/dev/ts0"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
/usr/bin/ts_calibrate
=====================================================================
我們使用ts_calibrate來較驗觸摸屏,QT自帶的觸摸屏程序不好用。想再次較驗時,把/etc/po刪掉後重啟單板就可以了。
這個腳本被下面說到的qpe.sh調用。
還要修改它的屬性:
chmod +x bin/ts_cal.sh
g、建立一個腳本文件,用來運行qtopia
在單板根目錄/bin下建立qpe.sh文件,它用來設置環境變量、啟動qtopia。內容如下:
=====================================================================
#!/bin/sh
export HOME=/root
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_KEYBOARD="TTY:/dev/tty1"
#export QWS_MOUSE_PROTO="USB:/dev/mouse0"
export QWS_MOUSE_PROTO="TPanel:/dev/ts0"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
if [ ! -e /etc/pointercal ]
then
/bin/ts_cal.sh
fi
$QPEDIR/bin/qpe &
=====================================================================
h、修改根文件系統的啟動腳本
修改/home/book/workspace/jz2440_project/fs_qtopia/etc/fstab文件,加入一行:
tmpfs /tmp tmpfs defaults 0 0
/home/book/workspace/jz2440_project/fs_qtopia/etc/init.d/rcS,在最後加入以下一行:
/bin/qpe.sh &
還要修改它的屬性:
chmod +x bin/qpe.sh
⑧ 制作YAFFS2、JFFS2文件系統映象文件:
mkyaffs2image fs_qtopia fs_qtopia.yaffs2
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_qtopia -o fs_qtopia.jffs2
⑨ 燒寫系統測試:
tftp 30000000 u-boot.bin; nand erase.part u-boot; nand write 30000000 u-boot
reset
tftp 30000000 uImage;nand erase.part kernel;nand write 30000000 kernel
tftp 30000000 fs_qtopia.yaffs2;nand erase.part rootfs;nand write.yaffs 30000000 260000 $filesize
或:
tftp 30000000 fs_qtopia.jffs2;nand erase.part rootfs;nand write.jffs2 30000000 260000 $filesize
設置參數:
set bootcmd 'nand read 30000000 kernel;bootm 30000000'
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
或:
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
set machid 16a
save
reset