以前接觸MiniGUI近2年的時間,也沒有做過MiniGUI的移植工作,近日利用調研的機會,對MiniGUI進行了一下在9G45平臺的移植工作。簡單記錄如下。
- 移植準備
- 交叉編譯工具鏈-$HOME/usr/arm-2008q1/arm-none-linux-gnueabi/arm-none-linux-gnueabi-gcc
- 需要移植的軟件包
- 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
- 移植過程
- 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."
- 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."
- 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."
- 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."
- 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."
- 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."
- 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."
- 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."
- 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."
- 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."
- zlib庫的移植
- 遇到的問題及解決方法
- 缺少鏈接庫—根據提示,缺少什麼庫就在編譯腳本中用-L和-l指定就OK了
- 編譯MiniGUI的過程中,遇到src/newgal/pcxvfb/Makefile.am和Makefile.in中直接INCLUDES了/usr/include目錄,將這個目錄去掉以避免引用到PC上的頭文件
- tslib配置的問題。MGSample運行時,提示信息“No raw modules loaded“,查看tslib的代碼,發現是tslib的配置問題,需要在目標平臺上設定:
兩個環境變量,才能夠直接查找到。export TSLIB_PLUGINDIR=/usr/local/lib/ts export TSLIB_CONFFILE=/etc/ts.conf</span>
- 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/