天天看點

JZ2440開發闆移植Qtopia2.2.0

參考文獻:

       《嵌入式Linux應用開發》韋東山編著

         http://emb.hqyj.com/column/column97.htm

(1)移植環境:

         環境:ubuntu9.10

         gcc:  4.4.1

         arm-linux-gcc: 3.4.5

(2)移植Qtopia依賴的庫

        ①  編譯、安裝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

             将在/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

               最後一條指令在/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目錄

(3)編譯安裝Qtopia-2.2.0

         使用更新檔修改、編譯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”并回車才能繼續下去

(4)基于最小根檔案系統制作QT檔案系統

         使用fs_mini_mdev.tar.bz2,或者自己用busybox重新制作一個。

         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

(5)制作YAFFS2、JFFS2檔案系統映象檔案

         mkyaffs2image fs_qtopia fs_qtopia.yaffs2

         mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_qtopia -o fs_qtopia.jffs2

(6)燒寫系統測試:

    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

制作好的更新檔檔案下載下傳:https://download.csdn.net/download/u014069939/11343242

繼續閱讀