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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章