Minigui在ARM开发板上的移植过程
Helper2416开发板移植minigui3.0.12系列

Helper2416开发板移植minigui3.0.12之一:让PC运行minigui笔者最近有时间学习嵌入式linux,于是熟悉了一下基本操作之后,选定了移植minigui作为一个练习。
看了看官网说明,移植过程挺简单的,但整整三天之后,开发板首次显示出minigui版的helloworld。
第一阶段:PC运行minigui这个工作是一定要做的,因为minigui同其他GUI程序开发类似,都是先在PC上编程、调试、模拟,成型之后再交叉编译灌入嵌入式设备。
Helper2416开发板随机所带的虚拟机fedora12已经安装好了交叉编译链、zlib库,png库,jpeg库等,使移植工作大为简化。
此文也不涉及到这几个库的移植,相关方法在手册4.6节有详述,网上文章也未提及移植这几个库出什么问题。
一. 搞定qvfbqvfb是QT的一个附属程序,可以单独运行,跟minigui本身没什么联系,只是minigui可以拿它当作在PC上运行时的模拟屏幕。
qvfb大致有以下几个获取方式。
1. minigui官网有一个qvfb2-2.0.tar.gz程序包,编译这个包需要Qt3的库。
Qt3的库可以从QT官网下载编译。
2.Helper2416开发板随机提供了qtopia和Qt4的源码。
按手册 4.6节编译完qtopia之后,.../qtopia-2.2.0/qt2/bin/qvfb便是qvfb的可执行文件。
将此文件拷入PATH路径,然后用$lddqvfb命令查看一下所依赖的库,在.../qtopia-2.2.0/qt2/lib目录中找到相应的库,拷入/lib目录。
此时命令行直接输入$qvfb即可看到窗口界面。
3.对于Qt4,按手册4.7节编译完之后并不会自动生成qvfb可执行文件,需要单独进行编译。
网上的参考步骤是:(1).复制…/qt-everywhere-opensource-src-4.7.2/tools/shared/deviceskin.h,deviceskin.cpp两个文件到…/qt-everywhere-opensource-src-4.7.2/tools/qvfb目录下(2). 在qvfb文件夹下手动生成qvfb工程,即$qmake-project,生成qvfb.pro(3). $qmake,生成Makefile(4). 手动修改Makefile 中LIBS 选项:末尾添加-lXtst(5). $make即可得到可执行文件qvfb按照这个步骤可以编译得到qvfb,但笔者实测发现Qt4编译出来的qvfb运行minigui程序时鼠标不正常,而qtopia的qvfb鼠标正常。
MiniGUI3.0.12安装与移植

MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包) sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui修改Makefile第12行all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE # for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./configure --prefix=/usr/local/minigui --host=arm-linux \--target=arm-linux --build=i386-linux --with-osname=linux \--with-style=classic --with-targetname=fbcon --enable-autoial \--enable-rbf16 --disable-vbfsupport --enable-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff notebook same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
minigui1.6.10移植

注:这里我上网搜了搜,有人说去掉最后的编译选项--enable-shared就可以了,我一试,好像就可以了,而且不管是libpng-1.2.18还是我下的libpng,源码目录里都没有libtool
[root]# make
下面创建一个目录,否则 make install 的时候会报错。注:这里我不要这一步也没有报错。
在 make 之前注意:从前面 libpng-1.2.18 的源码目录中把 libtool 拷贝过来,放在
/home/source/minigui/jpeg-6b目录下,否则会出现“make: ./libtool: command not found”错误。
另外要注意的是:不能使用系统的 libtool,因为这里要进行的是交叉编译。
MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器可是不带这些库文件的,所以我们得首先自己编译这些库文件装到交叉编译器中去。
注意一点:库不一定要装最新的,库版本太新,MiniGUI 有可能不认识,像jpeg 库和 ttf 库就是这样,太新了反而用不了,所以要注意版本,以下的库都是我验证过可以和MiniGUI一起工作的,其它版本的库没试过,不保证能正确通过:)文中没有下载地址的文件大都可以在上下载。
(3)第三步:安装 jpeg 库
在/html/242232006010901.html(jpeg 库)下载到/root/cross/下面,同样,我用的是上提供的库
[root]# tar zxf jpegsrc.v6b.tar.gz
[root]# tar zxf libpng-1.2.18 .tar.gz
[root]# cd libpng-1.2.18
移植minicom到ARM开发板

移植minicom到ARM开发板(转)最近调试自己做的S5PV210的底板上面的串口。
因为为了测试一个串口而写程序很麻烦。
所以,直接移植了一个minicom到开发板上面。
这样就可以直接进行串口收发了。
特别是在我需要同时测试多个串口的时候,比写程序来得快。
不多废话了,下面看操作流程。
第一步:需要交叉编译ncurses,否则minicom不能编译。
直接去官网下载。
地址不发。
新建一个文件叫run,然后增加可执行属性,最后在其中加入如下配置./configure CC=arm-linux-gcc --prefix=/opt/4.3.2/arm-none-linux-gnueabi --host=arm-linux CPPFLAGS=-I/opt/4.3.2/arm-none-linux-gnueabi/includeLDFLAGS=-L/opt/4.3.2/arm-none-linux-gnueabi/libmake讲解下:--prefix=/opt/4.3.2/arm-none-linux-gnueabi 红字为编译完成之后安装的地址,建议直接选择你的交叉编译器对应的位置,免得出错很麻烦,我这个就是交叉编译器的路径CPPFLAGS=-I/opt/4.3.2/arm-none-linux-gnueabi/include 红字为编译过程中需要的引用的路径,其实就是交叉编译器路径下面的includeLDFLAGS=-L/opt/4.3.2/arm-none-linux-gnueabi/lib 红字为引用的库路径,意义同上输入保存之后./run即可完成配置编译的操作,最后make install,建议先sudo su切换成root之后再操作,否则有可能会有麻烦,一些环境改变导致的麻烦。
第二步:交叉编译完成ncurses之后,就是交叉编译minicom,自己去官网下载最新版代码,解压缩后,把上面的run拷贝到新目录。
1_MiniGUI移植实验

广州致远电子有限公司
MagicARM2410教学实验开发平台
4.实验预习要求
必须先做<< 实验指导>> 必须先做 <<… 实验指导>> 第 5 、6 章的实验 ,在 RedHat <<… >>第 章的实验, 操作系统上建立交叉编译环境, Linux 9.0操作系统上建立交叉编译环境,掌握交叉编译 和下载Linux应用程序到MagicARM2410上并运行 Linux应用程序到MagicARM2410上并运行; 和下载Linux应用程序到MagicARM2410上并运行; <<… 仔 细 阅 读 <<… 实 验 指 导 >> 第 1 章 的 内 容 , 了 解 MagicARM2410 实验箱的硬件结构, 2410实验箱的硬件结构 MagicARM2410 实验箱的硬件结构 , 注意彩色液晶屏驱动 电路; 电路; 阅读MiniGUI的文档<<MiniGUI用户手册>> MiniGUI的文档<<MiniGUI用户手册>>、 阅读MiniGUI的文档<<MiniGUI用户手册>>、<<MiniGUI 编程指南>> 了解MiniGUI的基本特点和应用配置选项, >>, MiniGUI的基本特点和应用配置选项 编程指南>>,了解MiniGUI的基本特点和应用配置选项, 以及应用程序的编写。 以及应用程序的编写。
广州致远电子有限公司
MagicARM2410教学实验开发平台
2.实验设备
硬件: 硬件: PC机 PC机 1台 MagicARM2410教学实验开发平台 MagicARM2410教学实验开发平台 1台 USB鼠标 USB鼠标 1个 USB键盘 USB键盘 1个 软件: 软件: 9.0操作系统 安装有Autoconf 操作系统( Autoconf和 RedHat Linux 9.0操作系统(安装有Autoconf和 Automake工具 工具) Automake工具) 嵌入式Linux Linux开发环境 嵌入式Linux开发环境 MiniGUILinux)软件 MiniGUI-STR(for Linux)软件
MiniGUI3.0+tslib1.4移植过程

只支持 1.3.1 版本的 ttf 库:
注意:MiniGUI 的文档说只支持 1.3.1 版本的 ttf 库,不要把版本弄错了
[root@localhost jpeg-6b]# cd /root/cross/
[root@localhost cross]# tar zxvf freetype-1.3.1.tar.gz
注意:这里配置指向/usr/local/arm/arm-2008q3-linux/arm-none-linux-gnueabi 目录,会自动安 装在/usr/local/arm/arm-2008q3-linux/arm-none-linux-gnueabi / [include,lib] 目录下。
./configure CC=arm-none-linux-gnueabi-gcc --build=i686-pc-linux --target=arm-linux
--host=arm-linux
prefix=/usr/local/arm/arm-2008q3-linux/arm-none-linux-gnueabi
第四步:安装 jpeg 库
[root@localhost libpng-1.2.18]# cd /root/cross/
[root@localhost cross]# tar zxvf jpegsrc.v6b.tar.gz
[root@localhost cross]# cd jpeg-6b/
[root@localhost jpeg-6b]#
[include,lib] ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3 等
ARM-Linux环境下MiniGUI在S3C2410开发板上的移植

上模拟 显示屏 , 方便调试 M n U 应用 程序。 iG l i 解压 q t 1 ,r z v — . t . 后执行 : b 0a g
# / o fg r . n iu e c #ma e k
#ma e i sa l k n t l
在/o e下建立 目录 miiu, 网上 下载以下源码包并放 在该 目录 hm ng i从
并给 出了实验结果 , 明 了移植 的可行性。 证
关键 词 : 嵌入 式 系统 ;iu ;3 2 1 ; nGU ; 植 Ln x¥ C 4 0 Mii I移 中 图分 类 号 : P7 T 23 文献 标 识 码 : A
社n k Ia e
由于嵌入 式系统 一般 实时性要 求很高 .所 以嵌入 式系统下 的 G I U
b n / s o a/ i :u rl c ” i : dl e l n/ s/ a ? u b ol
保存 退 出 。执 行 #su(.ahe使 更 改 生效 。其 中/s ̄c l r/ orebsr  ̄ uroa/ m a 29 . bn是 以后要用到的交叉编译工具 的路径 。 .53 i /
完 成安装 , qP— . q i 在 v 1 /v o 0 b下有 q f 可 执行 程序 , 其路径添加 到 v b 将 可执行路径文件中去 :
#c d¥H0M E
#v b s r i.a h e
在 .ahc 后 面加 上 : bsr 最
e p r TH=”PATH: bn: s/o a/r 2953 xot PA Y / i / rlc am/ . ./ s u l
科技情报开发与经济
文 章 编 号 :0 5 6 3 (0 8 2 — 19 0 10 — 0 3 2 0 )8 0 3— 2
第09章 在ARM系统中使用MiniGUI

哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
系统中使用MiniGUI 第9章 在ARM系统中使用 章 系统中使用
9.2.2 交叉编译 交叉编译MiniGUI 修改buildlib-xxx编译配置文件 编译配置文件 修改
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
系统中使用MiniGUI 第9章 在ARM系统中使用 章 系统中使用
9.1 移植步骤
1.目标板要有足够的资源:如 目标板要有足够的资源: 目标板要有足够的资源 ROM、RAM和显示设备 、 和显示设备 2.为目标板编写 为目标板编写IAL和GAL 为目标板编写 和 3.配置 配置MiniGUI,交叉编译 配置 , MiniGUI函数库和应用程序 函数库和应用程序 4.下载、运行 下载、 下载
系统中使用MiniGUI 第9章 在ARM系统中使用 章 系统中使用
移植IAL 9.3.5 移植IAL 配置编译IAL 配置编译IAL
ial/Makefile.am
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
系统中使用MiniGUI 第9章 在ARM系统中使用 章 系统中使用
哈尔滨工业大学华德应用技术学院—计算机应用技术系— 哈尔滨工业大学华德应用技术学院—计算机应用技术系—嵌入式系统方向
系统中使用MiniGUI 第9章 在ARM系统中使用 章 系统中使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Minigui在ARM开发板上的移植过程一、题外话:为了感谢国人在开源世界颇具影响力的为数不多Minigui的开发者们的辛勤劳动(希望为数不多这个这个词若干年后我们不再提^_^),也为答谢飞漫公司和魏永明先生对开源项目在中国的运作模式的有意义的探索, 也为自己在感慨、敬佩之余尽一点微波之力,就将借工作之便并参考众多网友的体会,将一点移植心得整理出来,希望公司不介意。
考虑到每个人接触linux的起点不同,所以下文档按步就班说得比较详细(说得不好听点是罗嗦,^_^,如果您熟悉相关部分,请略过,希望不要当面说俺写的罗嗦,呵).二、特别声明:本文的移植过程主要以minigui1.2.3为基础。
本文中提到的注意可能是您容易忽视,而又要引起您注意的地方或者由于理解上的差异而容易造成交叉编译失败的地方。
本文中需要修改的地方以红色字体标注,而添加或者修改的地方以蓝色标注,需要您执行命令的地方以粉红标注(html格式颜色不显,我又懒蛋得写HTML标签,建议您下载附件中的PDF文档)。
另外,本文中提到的脚本编写和修改都请在linux环境下手工编写,不要在windows下或者直接从下面拷贝,免得出现错误。
三、硬件平台:CSB226-PXA250,Cogent ep7312,此文档以CSB226-PXA250参考开发板的移植过程为主来说明.LCD屏幕特性:640x480,支持8bpp.支持标准PC键盘、鼠标四、软件环境:主机:Redhat7.2目标板:采用umon作为boot loader, 开发环境和运行的内核是Montavista Profession Edition 2.1.目标板(以下称为target)采用NFS的方式将根文件系统挂接到开发主机(以下称为host)上,其路径为:/opt/hardhat/devkit/arm/xscale_le/target,目标板上以控制台下的framebuffer 方式运行。
host和target都以root身份登陆。
将minigui库文件原代码libminigui1.2.3.tar.gz,资源文件minigui-fonts.1.2.0.tar.gz, minigui-imetabs-1.1.0.tar.gz, minigui-res-1.2.0.tar.gz放在主机任意目录下,而考虑到演示程序编译后没有相应的安装脚本,将源代码包mde-1.2.3..tar.gz放在了/opt/hardhat/devkit/arm/xscale_le/target/root下面。
首先用类似tar zxf liminigui1.2.3.tar.gz命令将所有的压缩包解开。
五、libminigui1.2.3及资源文件的移植:1、libminigui1.2.3文件的移植:它移植主要定义交叉编译器已经编译后的目标库和头文件的存放路径,参考给出的交叉编译例子编写了交叉编译脚本build-pxa250#!/bin/shrm -f config.cache config.statusCC=xscale_le-gcc ./configure --prefix=/opt/hardhat/devkit/arm/xscale_le/target/usr/local \ --host=i386-linux \--target=arm-linux \--enable-tinyscreen注意:由于minigui现在的版本编译后的库缺省放在了/usr/local/lib下面,故在上面的目前路径中添加了usr/local.根据硬件特性修改libminigui1.2.3/etc/Minigui-3d.cfg和Minigui-flat.cfg文件中的[fbcon]defaultmode=1024x768-16bpp为相应的defaultmode=640x480-8bpp如果没有键盘鼠标,没细看系统能否运行,但资源文件一定会要做相应的修改。
执行以下shell命令:# chmod 777 ./build_pxa250#make distclean#./build_pxa250#make#make install如果编译通过,此时在目标路径/opt/hardhat/devkit/arm/xscale_le/target/usr/local/lib下就会有交叉编译出来的动态库和静态库文件.2、资源文件的移植:上文提及的三个资源文件都只是做一下相同的安装目标路径的改动,修改configure.linux,将TOPDIR= 一行改为:TOPDIR=/opt/hardhat/devkit/arm/xscale_le/target在各自的目录下执行命令,将相应的资源文件安装到目标系统中:# make install六、演示程序mde-1.2.3..tar.gz的移植注意,演示程序也是在host上交叉编译。
转到mde-1.2.3目录下,首先也是编写交叉编译的shell脚本:#!/bin/shCC=xscale_le-gcc ./configure --prefix=/opt/hardhat/devkit/arm/xscale_le/target/usr/local \--host=i386-linux \--target=arm-linux执行以下shell命令:# chmod 777 ./build_pxa250修改configure.in中以下地方:AC_CHECK_HEADERS(minigui/minigui.h, have_libminigui=yes, foo=bar)dnl================================================================= dnl Write Outputif test "$ac_cv_prog_gcc" = "yes"; thenCFLAGS="$CFLAGS -Wall -Wstrict-prototypes -pipe"改为:AC_CHECK_HEADERS($prefix/include/minigui/minigui.h, have_libminigui=yes, foo=bar)dnl====================================================================== ==dnl Write Outputif test x"$ac_cv_prog_gcc" = x"yes"; thenCFLAGS="$CFLAGS -Wall -Wstrict-prototypes -pipe"LDFLAGS="$LDFLAGS -Wl,--rpath -WL,$prefix/lib"fiif test "x$have_libminigui" = "xyes"; thenCFLAGS="$CFLAGS -I$prefix/include"fi如果您移植的是1.2.6以下版本(1.2.6我还没做相应测试,不过在ChangeLog中提及fix了这个BUG),由于PNG图片格式在非X86体系中跑得异常(论坛中孔明有相应得回帖),还需要修改mginit目录下的nr=10一行,改为:nr=8执行以下shell命令:#make distclean# ./build_pxa250# make至此,交叉编译完成,您可以启动target,执行以下命令(第一条命令为第一次在target 运行minigui时需要, 第二条命令为多次执行演示程序用,相关原理请看init.c或者论坛的相关讨论):# su –c ldconfig# rm –f /var/tmp/mginit# /root/mde-1.2.3/mginit/mginit但系统不一定能在目标板上跑起来,另外,下面是我遇到的一下问题以及一些改动意见,仅供参考。
如果在1.2.3中,中文输入法存在读资源文件sysphrase.tab失败的问题,跟踪发现出现在libminigui1.2.3/src/ime/pinyin.c的第576行附近的这部分代码:for(i = 1; i < MAX_PY_NUM; i++) {inmd->sysph[i] = sysph = (SysPhrase*)p;#if MGUI_BYTEORDER == MGUI_BIG_ENDIANsysph->count = ArchSwap16 (sysph->count);#endifp = (char*)sysph->phrase;for(j = 0; j < sysph->count; j++) {kph = (Phrase*)p;p += SizeOfPhrase (kph->len,kph->count); // skip the string}}本想好好看一下,不过在minigui的后期版本中对中文输入法做了比较大的改动,kongming最近又提供了最新版本minigui1.2.6-2的免费下载(如我这样的有福了,又要感谢”党的富民政策好”了,呵呵),我想在移植了minigui1.2.6-2后如果还有问题,再找原因,呵,懒劲使然.另外,vcongui也容易出现异常,我以1.2.3来说, 对vcongui有以下一点看法.1、vcongui使用了/dev下面的两个设备文件(具体我不记得了:(,不过你可以在它出现提示信息时参考PC机上的相应设备文件用mknod名字在目标系统中创建),想把它加到脚本中来创建。
2、在vcongui中以及libmingui中,定义了USE_ASM宏,并有相关的X86汇编代码,我还没细看交叉编译时候是否会编译进出而导致系统异常。
3、vcongui在defaultmap.c中定义了一些功能键来激活菜单,但对我这样的钟情于MC编辑器的man就不是很方便,比喻F10,是否在新版本中去掉它?并修改vcongui的大小,使得缺省的时候占满全屏,便于在minigui编辑,毕竟控制台下就有中文嘛,便于输入汉字^_^。
再说点题外话,这种方法我在EP7312上也进行了测试,改动非常之少,其他平台限于条件和时间所限,没进行测试。
如果您打算不用NFS,要将minigui最终定制在目标系统的FLASH中,您可以将target的静态库、甚至将/usr/local的头文件去掉,将资源文件缩减,论坛里有这方面的讨论,欢迎参考。