Chinaunix首页 | 论坛 | 博客
  • 博客访问: 65276
  • 博文数量: 50
  • 博客积分: 2360
  • 博客等级: 大尉
  • 技术积分: 620
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-02 15:59
文章分类

全部博文(50)

文章存档

2011年(1)

2009年(49)

我的朋友

分类: LINUX

2009-08-10 15:47:18

MiniGUI-1.3.3在ARM平台上的移植
本文档主要参考《MiniGUI 1.3.3 移植详解》 
作者:大漠孤狼   E-Mail:yuqiang0107@126.com
step 1:
配置好2.95.3交叉编译环境
/*MiniGUI 的编译需要一些库文件,缺省我们的 gcc 基本上都有这些库文件,所以不需*/
/*要安装,但是对于交叉编译,交叉编译器不带这些库文件,所以我们首先要编译这些库*/
/*文件安装到交叉编译器中去。                                                  */
step 2: 安装 zlib 库
由于zlib库的configure 脚本不支持交叉编译选项,所以手动临时把gcc修改成指向我们的交叉编译器arm-linux-gcc 
# cd /usr/bin 
# mv gcc gcc_back 
# ln -s /usr/local/arm/2.95.3/bin/arm-linux-gcc ./gcc 
# mv ld ld_back 
# ln -s /usr/local/arm/2.95.3/bin/arm-linux-ld ./ld 
修改完成后回到zlib-1.2.3目录下 
#./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ --shared   
#make
#make install
注意:把gcc、ld改回去!!
step 3: 安装png
# tar zxf libpng-1.0.10rc1.tar.gz 
# cd libpng-1.0.10rc1 
Libpng不提供有效的configure脚本,所以手动修改Makefile文件了
# cp scripts/makefile.linux  Makefile   //把 Scripts  下的一个 makefile 拷出来修改 
# vi Makefile
CC=arm-linux-gcc    //修改这里 
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h 
prefix=/usr/local/arm/2.95.3/arm-linux     //修改这里 
# Where the zlib library and include files are located 
#ZLIBLIB=/usr/local/lib 
#ZLIBINC=/usr/local/include 
ZLIBLIB=/usr/local/arm/2.95.3/arm-linux/lib   //修改这里 
ZLIBINC=/usr/local/arm/2.95.3/arm-linux/include   //修改这里 
保存,编译
#make 
#make install 
step 4: 安装jpeg
# tar zxf jpegsrc.v6b.tar.gz 
# cd jpeg-6b 
# ./configure –help    //可以查看它的配置选项 
首先在本机上编译一下,主要是它的configure文件设计得有问题,得先用gcc编译一个 dummy.c文件,然后才能后面编译,不然的话就会出现libtool找不到之类的错误
# ./configure --enable-shared --enable-static 
本机正常编译通过以后,[user]# make clean 清除掉,然后执行交叉编译 
一般情况下用:       #./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ --host=arm-linux --enable-shared --enable-static 
--host=arm-linux来指定交叉编译选项,可是这里死活它不认,所以改用别的方法,如下 
#./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ CC=arm-linux-gcc --enable-shared --enable-static 
# make 
安装前需要在 arm-linux 下建个目录,不然安装会出错 
# mkdir –p /usr/local/arm/2.95.3/arm-linux/man/man1 
# make install
step 5: 安装libttf
注意:MiniGUI 的文档说只支持 1.3.1 版本的 ttf 库,不要把版本弄错了
这个库装起来最麻烦,全部自己手动编译安装。
# tar zxf  freetype-1.3.1.tar.gz       
# cd freetype-1.3.1   
# mkdir –p libttf/extend   // libttf目录与freetype-1.3.1是同级目录 
# cp freetype-1.3.1/lib/*  freetype-1.3.1/lib/arch/ansi/*  libttf/   //把有用的东西拷出来 
# cp freetype-1.3.1/lib/extend/*  libttf/extend/    把 extend 目录下的文件也拷出来 
注意cp命令不要用–r选项,因为会把一些没用的东西出拷出来的 
拷贝完成了,现在来自己手动编译了 
# cd libttf 
# arm-linux-gcc -c -fPIC -O2 freetype.c       // 只要编译这一个 .c 文件,因为它包括了
// 其它所有的.c文件了
# arm-linux-gcc -c -fPIC -O2 -I./  extend/*.c   // 把 extend 下所有的 .c 文件全部编译 
# arm-linux-gcc --shared -o libttf.so *.o        // 生成最后的动态链接库
现在手动安装,先建立相关目录 
mkdir –p /usr/local/arm/2.95.3/arm-linux/include/freetype1/freetype 
cp *.h  extend/*.h  /usr/local/arm/2.95.3/arm-linux/include/freetype1/freetype 
cp libttf.so  /usr/local/arm/2.95.3/arm-linux/lib 
安装libttf库完成
step 6: 安装libminigui
经试验发现MiniGUI 1.3.3 版本在链接ljpeg lpng lttf时总是要链接 /usr/lib 下的库,没办法,用老方法 
# cd /usr/lib 
# mv libjpeg.so   libjpeg.so_back 
# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libjpeg.so  ./libjpeg.so    //指向 arm 的库 
# mv libpng.so   libpng.so_back 
# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libpng.so  ./libpng.so 
# mv libttf.so   libttf.so_back 
# ln –s /usr/local/arm/2.95.3/arm-linux/lib/libttf.so  ./libttf.so 
完成以上工作后就可以编译 libminigui 了 
# cd libminigui-1.3.3 
# make menuconfig                //用图形界面来配置 
如果在 make menuconfig 出错,去检查一下你的 gcc ,前面我们把它指向 arm-linux-gcc ,问一下,你改回来没有? 
下面是配置libminigui 
在 System Wide Options 里如下: 
Build MiniGUI-Lite        //用 Lite 方式编译,不是Thread 方式,这里适用于 PDA 
[ ] Stand-Alone 
[ ] Use incore (built-in) resource        //建议不要选这个,老有问题 
Unit of timer is 10ms 
Cursor support 
[ ] User can move window with mouse   //建议别选这个,可以移动蛮烦人的 
Mouse button can do double click 
Build with debugging messages 
[ ] Trace messages of MiniGUI        //不要选这个,出来的Trace太多,看不过来 
Include symbol name of messages 
在 GAL  engine Options 里 
(NEWGAL) GAL and its engines 
  NEWGAL engine on Linux FrameBuffer console 
[ ] NEWGAL engine on Qt Virtual FrameBuffer     //建议不要选这个,不然老让你用qvfb 
[ ] NEWGAL engine on eCos LCD interface 
Dummy NEWGAL engine 
Have console on Linux FrameBuffer 
在 IAL engine options 里 
[ ] EP7211-based board 
[ ] ADS Graphics Client 
[ ] iPAQ H3600 (also H3800) 
[ ] MPC823 
[ ] PX255B 
[ ] NEC VR4181 
[ ] Helio Touch Panel 
[ ] MT T800 
SMDK2410 Touch Screen 
[ ] uClinux Touch Screen Palm/MC68EZ328 
Dummy IAL engine 
Native (console) input engine 
---   Native IAL engine subdriver options 
[ ]   PS2 mouse 
[ ]   IntelligentMouse (IMPS/2) mouse 
[ ]   MS mouse 
[ ]   MS3 mouse 
  GPM daemon 
在 Font Option 里 
Raw bitmap font 
[ ] Var bitmap font  //千万不要选这个,不然会出现unreferenced vfb_Courier8x8()之类的错误 
Incore font sansserif 
Incore font courier 
Incore font symbol 
Incore font vgas 
Qt Prerendered Font 
TrueType font 
[ ] Adobe Type1 font 
在 Image Options 里 
Includes SaveBitmap-related functions 
[ ] PCX file support 
[ ] LBM/PBM file support 
[ ] TGA file support 
GIF file support 
JPG file support 
PNG file support 
在 Input Medthold Option 里 
IME (GB2312) support 
[ ] IME (GB2312) Intelligent Pinyin module   //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了(Abort ,有点像 OOP 一样,显示所有的寄存器的值,然后Abort) 
在 Development Environment Option 里 
(Linux) Platform 
(arm-linux-gcc) Compiler   //注意这里 
(glibc) Libc             //注意这里 
--- Installation options 
Path prefix: "/usr/local/arm/2.95.3/arm-linux"   //注意这里,我们把库装到交叉编译器的目录下 
--- Additonal Compiler Flags 
     CFLAGS: "" 
     LDFLAGS: "" 
其它的用缺省的选项就可以了,保存设置,然后它就开始检测系统了,注意下面的输出: 
checking for FrameBuffer console support... yes 
checking for TT_FreeType_Version in -lttf... yes      //True Type字体 
checking for jpeg_std_error in -ljpeg... yes           // jpeg 支持 
checking for png_check_sig in -lpng... yes           //png 图形支持,重要!!! 
checking for pow in -lm... yes 
这里的库应该都是显示为 yes 了,如果有 no 的话,回去检查前面你有哪步做得不对,不然的话编译后的东西可能没法正常执行,切记切记!!! 
#  make   
#  make install 
注意:我们这里 make install 其实是给交叉编译器安装 libminigui 的库,将来需要编译为 minigui 开发的程序,这个程序需要链接库,这些库因此也需要在交叉编译器中,不然交叉编译的时候编译不过去。 
装好后,到/usr/local/arm/2.95.3/arm-linux的include lib目录下去看看,是不是多了相应的 libminigui.so  libmgext.so  libvcongui.so,在 include 目录下多了一个minigui目录,里面有相应的头文件 
step 7: 安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过. 
# tar zxf popt-1.7.tar.gz 
# cd popt-1.7 
# ./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ --host=arm-linux --enable-shared --enable-static 
# make 
# make install 
step 8: 拷贝相关库文件到根文件系统中去
拷贝/usr/local/arm/2.95.3/arm-linux/lib下的所有.so系列文件到根文件系统的/usr/local/lib下(若根文件系统不支持/usr/local/lib库目录,也可以放在/usr/lib下)。
删除不用的库文件,只保留下列文件:
jpeg相关,libm相关,libmgext相关,libminigui相关,libpng相关,libpopt相关,libttf相关,libvcongui相关,libz相关。
step 9: 拷贝资源文件
/usr/local/lib/minigui目录整个拷贝到根文件系统的/usr/local/lib目录下。
step 10: 拷贝配置文件
拷贝/usr/local/etc/MiniGUI.cfg 到根文件系统的/usr/local/etc/ 目录下,保持目录结构的一致 
修改 MiniGUI.cfg ,如下 :
[system] 
# GAL engine 
gal_engine=fbcon     //这里修改 
# IAL engine 
ial_engine=dummy      // 这里修改,我不知道你会用什么触摸屏,用dummy肯定不会错 
mdev=/dev/touchscreen/0raw  //解摸屏,如果前面是 dummy ,则这里改不改无所谓 
mtype=none 
[fbcon] 
defaultmode=640x480-16bpp  // 根据LCD大小设置,设置错误minigui就启动不了 
ial_engine 一开始建议用 dummy ,先让 minigui 跑起来,以后再把 触摸屏 加进去,保证尽可能减少错误的发生 
保存,退出。 板子上的系统也搭建完毕了,现在来让真正的图形界面跑起来! 
注意:Build嵌入式Linux内核时,在 Console 中一定要先上FrameBuffer,从4位色一直到 16 位色的支持,全选上吧,同时把 VGA TextOut 选项勾掉,不要选它!
step 11: 编译安装mde-1.3.0 
Windows 操作系统,左下方是一个 [开始] 按钮,然后是任务条,MiniGUI也提供了类似的界面,这就是一个叫mginit的程序,它启动后就跟widnows的界面很像了,它就在mde包里面。 
# tar zxf mde-1.3.0.tar.gz 
# cd mde-1.3.0 
//先对 mginit 程序做一点修改
# cd mginit ; vi mginit.c 
在 297 行处,把下面代码注释掉 
/*************** 
   AboutMiniGUI (); 
AboutMDE (); 
**************/ 
保存,退出即可。 
因为我们没有触摸屏,现在,没法点它的确认按钮,所以把这些About信息去掉。 
编译mde-1.3.0
# ./configure --prefix=/根文件系统/usr/local --host=arm-linux 
# make 
如果发现mginit目录下的程序没有被编译,那就说明你的libminigui配置不正确,记住,必须是配置为 Lite 模式,这个程序才会被编译 
# make install 
事实上证明,make install,根本没用,它什么都没做,所以还是需要手动来做。 
# mkdir –p /根文件系统/usr/local/lib/shared/miniguiapps   //据MiniGUI.cfg配置建立该目录 
# cp –r –a mde-1.3.0/*  /根文件系统/usr/local/lib/shared/miniguiapps 
直接全部拷过去,然后到/根文件系统/usr/local/lib/shared/miniguiapps的各个程序目录下去,比如 mginit , bomb , painter之类的,把不用的 .c .h .o Makefile 之类的全删除掉,保留可执行文件和相应的res目录下的资源。
注意,保持目录的结构,mginit.rc 文件不要删了,这个对mginit 程序很重要 
step 12: 修改配置文件
/etc/profile中加上一句,
mknod /dev/ttyp5  c  3  5
mknod /dev/ptyp5  c  2  5
如果没有这两个设备节点,会出现错误提示框,Create Terminal Errorminicom提示如下:
VCOnGUI > can not get master pty!
VCOnGUI > system error -/dev/ptysf: No such file or directory
step 13: 制作cramfs文件系统
step 14:
注意重要的一点:在运行mginit前,先通过挂载ramfs文件系统等方式使/var目录可写,并建立/var/tmp目录,mginit程序会在/var/tmp建立两个文件。否则运行mginit失败,提示:
LoadSharedResource : No such file or directory
Error in step 7: Can not load shared resource!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file
阅读(538) | 评论(0) | 转发(0) |
0

上一篇:microwindow--arm

下一篇:MiniGUI-1.3.3--PC

给主人留下些什么吧!~~