9G45平臺MiniGUI3.0.12移植總結

以前接觸MiniGUI近2年的時間,也沒有做過MiniGUI的移植工作,近日利用調研的機會,對MiniGUI進行了一下在9G45平臺的移植工作。簡單記錄如下。

  1. 移植準備
    1. 交叉編譯工具鏈-$HOME/usr/arm-2008q1/arm-none-linux-gnueabi/arm-none-linux-gnueabi-gcc
    2. 需要移植的軟件包
      • zlib-1.2.2
      • libpng-1.2.37
      • freetype-2.3.9-fm20100818
      • jpeg-7 
      • tslib-1.4
      • libminigui-gpl-3.0.12
      • minigui-res-be-3.0.12
      • libmgplus-1.2.4
      • libmgutils-1.0.4
      • mg-samples-3.0.12
  2. 移植過程
    1. zlib庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I${TOOLCHAIN}/include/c++/4.2.3"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc"
      
      ./configure --prefix=${HOME}/tmp/crosscomplie \
          --shared \
          && make && sudo make install && echo "Make successful." 
    2. tslib庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lm -lz"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
    3. png庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lm -lz"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
    4. jpeg庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I${TOOLCHAIN}/include/c++/4.2.3"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          --enable-shared \
          && make && make install && echo "Make successful."  
    5. freetype的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I${TOOLCHAIN}/include/c++/4.2.3"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          --enable-static \
          && make && make install && echo "Make successful." 
    6. MiniGUI庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include -I${INSTALL
      _DIR}/include/ts"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lm -lz -ldl -lpthread -lpng -ljpeg -lfreetype -lts"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          --enable-tslibial --enable-videofbcon \
          --enable-splash=no --enable-screensaver=no \
          && make && make install && echo "Make successful." 
    7. MiniGUI 資源庫的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include -I${INSTALL
      _DIR}/include/ts"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lm -lpthread -lpng -ljpeg -lfreetype -lts"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
    8. MGPlus的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include"
      export CXXFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3   -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include"
      
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      
      export LIBS="-lpng -ljpeg -lz -lpthread -ldl -lts -lfreetype -lminigui_ths"
      
      export MINIGUI_CFLAGS="-I${INSTALL_DIR}/include"
      export MINIGUI_LIBS="-lminigui_ths"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
    9. MGUtils的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include -I${INSTALL
      _DIR}/include/minigui"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lpng -ljpeg -lz -lpthread -lts -ldl -lfreetype -lminigui_ths"
      
      export MINIGUI_CFLAGS="-I${INSTALL_DIR}/include/minigui"
      export MINIGUI_LIBS="-L${INSTALL_DIR}/lib"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
    10. MGSamples的移植
      export TOOLCHAIN=${HOME}/usr/toolchain/arm-2008q1/arm-none-linux-anueabi
      export INSTALL_DIR=${HOME}/tmp/crosscompile
      
      export CC=arm-none-linux-gnueabi-gcc
      export CXX=arm-none-linux-gnueabi-g++
      export AS=arm-none-linux-gnueabi-as
      export LD=arm-none-linux-gnueabi-ld
      
      export CFLAGS="-I. -I./include -I${TOOLCHAIN}/include/c++/4.2.3 -I${INSTALL_DIR}/include -I${TOOLCHAIN}/libc/usr/include -I${INSTALL
      _DIR}/include/minigui"
      export LDFLAGS="-L${TOOLCHAIN}/lib -L${TOOLCHAIN}/libc -L${TOOLCHAIN}/libc/lib -L${INSTALL_DIR}/lib"
      export LIBS="-lpng -ldl -lpthread -lts -ljpeg -lz -lfreetype -lminigui_ths"
      
      export MINIGUI_CFLAGS="-I${INSTALL_DIR}/include/minigui"
      export MINIGUI_LIBS="-L${INSTALL_DIR}/lib"
      
      ./configure --build=i686-pc-linux-gnu --host=arm-none-linux-gnueabi \
          --target=arm-none-linux-gnueabi --prefix=${HOME}/tmp/crosscomplie \
          && make && make install && echo "Make successful."  
  3. 遇到的問題及解決方法
    1. 缺少鏈接庫—根據提示,缺少什麼庫就在編譯腳本中用-L和-l指定就OK了
    2. 編譯MiniGUI的過程中,遇到src/newgal/pcxvfb/Makefile.am和Makefile.in中直接INCLUDES了/usr/include目錄,將這個目錄去掉以避免引用到PC上的頭文件
    3. tslib配置的問題。MGSample運行時,提示信息“No raw modules loaded“,查看tslib的代碼,發現是tslib的配置問題,需要在目標平臺上設定:
      export TSLIB_PLUGINDIR=/usr/local/lib/ts export TSLIB_CONFFILE=/etc/ts.conf</span>
      兩個環境變量,才能夠直接查找到。
    4. MiniGUI.cfg配置文件的修改:
    • # GAL engine and default options
      gal_engine=fbcon
      defaultmode=800x480-16bpp
      # IAL engine
      ial_engine=tslib
      mdev=/dev/input/event0
      [fbcon]
      defaultmode=800x480-16bpp  
      [cursorinfo]                                                         
      # Edit following line to specify cursor files path                   
      cursorpath=/usr/local/share/minigui/res/cursor/ 
      [resinfo]                                                            
      respath=/usr/local/share/minigui/res/

發佈了58 篇原創文章 · 獲贊 4 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章