Chinaunix首页 | 论坛 | 博客
  • 博客访问: 948132
  • 博文数量: 104
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1910
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 16:33
文章分类
文章存档

2016年(4)

2015年(1)

2014年(6)

2013年(16)

2012年(27)

2011年(49)

2010年(1)

分类: LINUX

2011-12-15 15:21:06

环境:虚拟机+fedora10

开发板:tq2440以及天嵌开发光盘自带的交叉编译器,即/opt/EmbedSky/4.3.3

(一)准备工作

下载软件包

libminigui-1.6.10.tar.gz --主要的库文件(
mg-samples-1.6.10.tar.gz
--示例代码(
minigui-res-1.6.10.tar.gz
--资源文件(
mde-1.6.10.tar.gz(


演示文件


在linux虚拟机根目录下创建一个minigui-free的目录然后把这些软件包放在该目录下在分别解压缩。

再在 /minigui-free下创建一个miniguitmp的目录,用于安装编译以后的库文件。

(二)编译 libminigui   库文件
首先修改configure文件,在文件的开头加入交叉编译的路径
CC=/opt/EmbedSky/4.3.3/bin/arm-linux-gcc
CPP=/opt/EmbedSky/4.3.3/bin/arm-linux-cpp
LD=/opt/EmbedSky/4.3.3/bin/arm-linux-ld
AR=/opt/EmbedSky/4.3.3/bin/arm-linux-ar
RANLIB=/opt/EmbedSky/4.3.3/bin/arm-linux-ranlib
STRIP=/opt/EmbedSky/4.3.3/bin/arm-linux-strip

然后在libminigui-1.6.10目录下建立bash文件mysetup.sh,内容如下:
/* mysetup.sh */
./configure --prefix=/minigui-free/miniguitmp/ \
--host=arm-unknown-linux \
--target=arm-unknown-linux

然后执行[root@localhost libminigui-1.6.10]# ./mysetup.sh
如果配置不成功,则可能是编译器问题。我的就是不成功。

那么首先查看编译环境(你也可以在config.log中查看编译条件,然后找到不成功的原因):

上图中显示的交叉编译器为arm-3.4.1,而不是我们希望的/opt/EmbedSky/4.3.3

所以临时修改如下:

或者用命令:PATH=$PATH: /opt/EmbedSky/4.3.3

命令: echo $PATH 显示变量路径
如果成功之后[root@localhost libminigui-1.6.10]# make
这一步时间有点长,5分钟左右

[root@localhost libminigui-1.6.10]# make install
这一步就很快了,一闪就完成。执行成功后,这个过程基本上不会有什么错误的。执行make install的时候会把编译以后的资源安装到/minigui-free/miniguitmp中,在这之下会有etc include lib 3个目录产生。libminigui的交叉编译工作就算完成了。


(三 )安装MiniGUI资源
下面安装MiniGUI资源,这些资源包括基本字体、图标、位图和鼠标光标等等。解压minigui-res- 1.6.tar.gzar zxf minigui-res-1.6.tar.gz),进入生成目录,

修改configure.linux文件,指明TOPDIR= /minigui-free/miniguitmp,

执行make install,

执行后会在/minigui-free/miniguitmp/ 下生成usr/local/lib/minigui/res 相关目录,以下为res目录下的子目录,用户有兴趣可以进入以下目录查看其中的内容: bmp cursor font icon imetab


(四)修改/ minigui-free/miniguitmp/etc/MiniGUI.cfg文件
[system]                                                                    
# GAL engine and default options                                            
gal_engine=fbcon                                                            
defaultmode=320x240-16bpp
                                       
# IAL engine                                                                
#ial_engine=qvfb                                                            
#mdev=/dev/input/mice                                                       
#ial_engine=console
ial_engine=dummy                                                          
mdev=/dev/mouse                                                             
mtype=IMPS2
                                              
[fbcon]                                                                     
defaultmode=320x240-16bpp                                           
[qvfb]                                                                      
defaultmode=320x240-16bpp                                                   
display=0
            
一般就上面几个地方要修改
然后把MiniGUI.cfg下载到开发板的/etc/目录下:
[root@EmbedSky etc]# cp MiniGUI.cfg /etc
PC/ minigui-free/miniguitmp/lib中所有的运行库下载到开发板上的/usr/lib目录下:
[root@EmbedSky lib]# cp * /usr/lib


pc机上/minigui-free/miniguitmp/usr/local/lib/minigui/res中的内容拷贝到目标板/usr/local/lib/minigui/res中。res目录下有5个文件夹,一个一个创建和复制很麻烦,可以写一个批处理来做,那样简单多了。至于批处理很简单,这里就不说了。


(五)下面可以在宿主机上编译,然后开发板上运行了。
/* helloWorld.c */
#include
#include
#include
#include
#include
#include
static int helloProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    switch (message)
             {
                 case MSG_PAINT:
                            hdc = BeginPaint(hWnd);
                            TextOut(hdc,50,50,"Helllo MiniGUi");
                            EndPaint(hWnd,hdc);
                            return 0;
             case MSG_CLOSE:
                            DestroyMainWindow(hWnd);
                            PostQuitMessage(hWnd);
                            return 0;
             }
         return DefaultMainWinProc(hWnd,message,wParam,lParam);
}
int MiniGUIMain(int argc,const char* argv[])
{
      MSG Msg;
         HWND hMainWnd;
         MAINWINCREATE CreateInfo;
#ifdef _LITE_VERSION
   SetDesktopRect(0,0,640,480);
#endif
         CreateInfo.dwStyle = WS_VISIBLE|WS_BORDER|WS_CAPTION;
         CreateInfo.dwExStyle = WS_EX_NONE;
         CreateInfo.spCaption = "hello";
         CreateInfo.hMenu = 0;
         CreateInfo.hCursor = GetSystemCursor(0);
         CreateInfo.hIcon = 0;
         CreateInfo.MainWindowProc = helloProc;
         CreateInfo.lx = 0;
         CreateInfo.ty = 0;
         CreateInfo.rx = 200;
         CreateInfo.by = 200;
         CreateInfo.iBkColor = COLOR_lightwhite;
         CreateInfo.dwAddData = 0;
         CreateInfo.hHosting = HWND_DESKTOP;
         hMainWnd = CreateMainWindow(&CreateInfo);
         if(hMainWnd == HWND_INVALID)
                   return 1;
         ShowWindow(hMainWnd,SW_SHOWNORMAL);   
         while(GetMessage(&Msg,hMainWnd))
                   {
                      TranslateMessage(&Msg);
                      DispatchMessage(&Msg);
                   }
         MainWindowThreadCleanup(hMainWnd);
         return 0;
}
#ifndef _LITE_VERSION
#include
#endif

/* makefile */
DEP = helloWorld.c
SRC_FILE = helloWorld.c
CC = /opt/EmbedSky/4.3.3/bin/arm-linux-gcc
LIB_MINIGUI = /minigui-free/miniguitmp/lib
INCLUDE_MINIGUI = /minigui-free/miniguitmp/include
PROJECT_DIR =
hello:$(DEP)
         $(CC) -o helloWorld $(SRC_FILE) -lpthread -lminigui -lsqlite3 -lm -lmgext -lpng -ljpeg -L$(LIB_MINIGUI) -I$(INCLUDE_MINIGUI)
#.PHONY: install
#install:
#       cp helloWorld $(PROJECT_DIR)/target/
#       @echo "moving the TARGET to ../target ."
.PHONY: clean
clean:
         rm helloWorld
         @echo "it is cleaning."


(六)编译helloWorld.c时可能还会遇到问题
1.
我在编译的时候遇到的问题:

这是编译器出的问题:因为在步骤(二)中做的PATH的修改只是临时的,只对那个打开的终端有效,对重新打开的终端就失效了。解决办法:参考步骤(二)。
2.
找不到资源

显然是fonts资源找不到,原因在于没有将fonts文件夹拷贝到目标机上或是未拷贝完全,重新拷贝下,然后就ok了。

然后挂载运行,呵呵,有效果了吧!^_^


转自:http://hi.baidu.com/li_yuangong/blog/item/8c8272b5f5accce631add140.html

阅读(3220) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~