MiniGUI3移植到Hi3515全过程

http://blog.csdn.net/longyue0917/article/details/7882672#comments

DOC文档下载地址:

http://download.csdn.net/detail/longyue0917/4510567

 

经过3周奋战,终于在VGA上显示出了HelloWorld,其中过程,真是一把辛酸泪,现记录如下,也让后来人少走弯路。

 

一、     安装包的下载

http://www.minigui.com/zhcn/download/

各个库说明如下(个人整理,仅供参考)

libmgi       输入法

libmgplus 图形功能,如路径,渐变填充,是平滑的,颜色组成

libmg3d          3D

libmgutils 对话框模板,这些函数模板包括打开/保存文件对话框,颜色选择,字体选择对话框,对话框的信息,等等

libmgp           打印控件,输出到打印机

 

qvfb2        虚拟显存, QT

gvfb          虚拟显存, GTK

 

jpegsrc           JPG

libpng       PNG

freetype    字体

zlib           PNG压缩算法

 

我只安装了里面7个库:freetypezlibjpegsrclibpng,以及res,主库,和sample

 

二、     安装前的准备

先从网上搜索移植资料,最后锁定了这篇作为参考:

http://sgbihu.com/?p=249

 

然后就按要求将库一一解压,为了避免麻烦,我设置的安装路径也和文中提到的一样,在/usr/local/minigui中。

OK,准备工作完成,开始安装。

 

三、     zlib库的安装

根据参考资料提示做。注意修改gcchisi环境的就行,下同,不再累述

 

四、     png库安装

资料一开始就说用libpng1.5.8的版本,我开始也到png网下了最新的版本,结果最后跑sample的时候给我带来了不少的麻烦,因为如果minigui的配置不修改的话,是识别不到太新的png库的,而对于第一次移植的菜鸟们来说,最好是尽量少点麻烦,所以我最后还是换回了libpng-1.2.37

 

按资料上的配置直接编译的话是会报错提示zlib没有安装的,网上BAIDU解决方法五花八门,但都未能解决问题,最后我在GOOGLE上找到一份资料提示才得以解决该问题,参考地址如下:

http://blog.csdn.net/absurd/article/details/646546

 

具体解决方法是,在编译之前(我是在configure之前),手动指定一下参数:

export CFLAGS="-I/usr/local/minigui/include"

export LDFLAGS="-L/usr/local/minigui/lib"

注意IL后面不要有空格,高手当然知道,但俺是菜鸟,所以开始给他们中间加了个空格,结果当然就悲剧了。

注意/usr/local/minigui是我的安装GUI的路径,如果你的路径不同,则注意修改。

 

五、     JPEG库的编译

这个和资料一致

 

六、     freetype库的编译

这个和资料一致

 

七、     minigui资源库的编译

这个和资料一致

 

八、     minigui核心库的编译

好,问题开始来了。

先是按资料上的configure配置和编译,遇到asm问题后,按资料上的方法copy文件是没用的,在下面这份资料上找到的解决办法:

http://zhangjunxin520.blog.163.com/blog/static/30503703201227103553401/

 

具体做法就是修改src/newgal/pcxvfb/Makefile

删掉oldincludedir = /usr/include一句和INCLUDES里面删掉最后一项-I/usr/include

 

如果之前用的png库是最新的版本,那么这里配置过程中lpng会是NO状态(打印信息一闪而过,不留意的话很容易忽略过去),然后运行sample的时候就会提示PNG问题。

 

这样编译虽然能通过,但输出只有FBCON,因为我是要移植到HI3515上,且通过HIFB驱动输出,所以需要打开HI3515的选项(对应在GUI中是HI3510),利用他本身的库进行输出,否则就要自己修改一大堆的东西。

 

开始在头文件中找到有_MGGAL_HI3510,手动打开,编译能过,但是跑sample是不行的。然后查看miniguiconfigure –help,发现了--enable-videohi35xx选项,配置的时候加上,结果编译的时候报错,HI3560缺少头文件,因为我们只需要HI3515,所以

vi mgconfig.h

vi confdefs.h

删掉3560define

再编译,通过,结果继续报错,忘了是编译报错还是运行sample报错了,最后关联是查到用3515需要打开--enable-procs。最后配置如下:

CC=arm-hismall-linux-gcc \

CXX=arm-hismall-linux-g++ \

LD=arm-hismall-linux-ld \

CFLAGS="-I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

CPPFLAGS="-g -I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

CXXFLAGS="-g -I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

./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-videohi35xx \

--enable-procs

 

编译通过了,然后就是修改代码来初始化HIFB,否则VGA上是没有输出的:

修改文件是src/newgal/hisi/Hi3510_fbvideo.c

 

1

先在HI3510_Available函数中,将

if ( hi3510_console >= 0 ) {

        close(hi3510_console);

}

close打开(之前是//注解掉的),因为后面需要初始化HIFB,所以这里需要先关闭。

 

2

HI3510_VideoInit函数中,参考HI3515SDKmpp/sample/hifb中的代码,在函数刊头做如下初始化:

/

      const char *GAL_fbdev;

      HIFB_POINT_S stPoint = {0, 0};   //原点坐标

      HIFB_ALPHA_S stAlpha;                   //透明属性

 

      //

    GAL_fbdev = getenv("FRAMEBUFFER");

    if ( GAL_fbdev == NULL ) {

        GAL_fbdev = "/dev/fb0";

    }

 

      /*1 enable Vo device HD first*/

      //初始化MPP

      if(HI_SUCCESS != MppSysInit())

           return -1;

 

      //启动HD输出(VGA, 1024*768)

      if(HI_SUCCESS != EnableVoDev(HD))

      {

           MppSysExit();

           return -1;

      }

 

      /* 1. open framebuffer device overlay 0 */

      //打开驱动

      hi3510_console = open(GAL_fbdev, O_RDWR, 0);

      if(hi3510_console < 0)

    {

        printf("open %s failed!\n",GAL_fbdev);

        return -1;

    }

 

      /* 2. set the screen original position */

      //设置叠加层坐标原点

    if (ioctl(hi3510_console, FBIOPUT_SCREEN_ORIGIN_HIFB, &stPoint) < 0)

    {

        printf("set screen original show position failed!\n");

        close(hi3510_console);

        return -1;

    }

 

      /* 3.set alpha */

      //设置透明属性

      stAlpha.bAlphaEnable = 0; //透明叠加属性关

      stAlpha.bAlphaChannel = 0;     //透明通道属性关

      stAlpha.u8Alpha0 = 0xff;

      stAlpha.u8Alpha1 = 0x8f;              //透明值

    stAlpha.u8GlobalAlpha = 0x80;         //全部透明值

    //设置叠加层的透明属性

      if (ioctl(hi3510_console, FBIOPUT_ALPHA_HIFB,  &stAlpha) < 0)

      {

          printf("Set alpha failed!\n");

        close(hi3510_console);

        return -1;

      }

 

      /* 4. get the variable screen info */

      //获取屏幕信息

    if (ioctl(hi3510_console, FBIOGET_VSCREENINFO, &vinfo) < 0)

    {

             printf("Get variable screen info failed!\n");

        close(hi3510_console);

        return -1;

    }

 

      /* 5. modify the variable screen info

          the screen size: IMAGE_WIDTH*IMAGE_HEIGHT

          the virtual screen size: VIR_SCREEN_WIDTH*VIR_SCREEN_HEIGHT

          (which equals to VIR_SCREEN_WIDTH*(IMAGE_HEIGHT*2))

          the pixel format: ARGB1555

    */

    //修改屏幕信息

    vinfo.xres_virtual = 1024;  //虚拟屏幕尺寸(显存大小)

      vinfo.yres_virtual = 768;

      vinfo.xres = 1024;                //可见屏幕尺寸

    vinfo.yres = 768;

 

    vinfo.transp= g_a16;

    vinfo.red = g_r16;

    vinfo.green = g_g16;

    vinfo.blue = g_b16;            //颜色分量中ARGB的位置,这里是ARGB1555的设置

    vinfo.bits_per_pixel = 32;  //一个点16    

    vinfo.activate = FB_ACTIVATE_FORCE;          //强制设置生效

 

      /* 6. set the variable screeninfo */

      //设置屏幕信息

    if (ioctl(hi3510_console, FBIOPUT_VSCREENINFO, &vinfo) < 0)

    {

             printf("Put variable screen info failed!\n");

        close(hi3510_console);

        return -1;

    }

      /

     

3、将HI3515SDK中,mpp/sample/common/Vo_open.c文件中的内容搬过来,你要知道怎么包含的话就直接包含,你要不知道包含就像我一样,用最笨的方法,将open.c中的代码全部复制到本文件的开头处,别忘了头文件。

 

4、在HI3510_VideoQuit函数的最后加上以下代码:

//关闭视频输出

      DisableVoDev(HD);

      MppSysExit();

 

5、复制MPPincludeLIB中的文件到minigui3的安装路径对应的位置。因为HIFB用到了这些文件。

 

6、到目前为止,编译能成功,但运行sample会提示段错误,因为HI3515不支持2D加速,所以需要在HI3510的头文件里屏蔽_USE_2D_ACCEL选项,不使用hi_tde

 

OK,编译,安装,完工。

别忘了复制头文件和库文件到设备根文件系统的usr/local/

 

九、     sample的编译

不说了,反正配合minigui的主库不知道让我来回折腾了多少次了。直接上菜并做说明。

CC=arm-hismall-linux-gcc \

CXX=arm-hismall-linux-g++ \

LD=arm-hismall-linux-ld \

CFLAGS="-I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

CPPFLAGS="-g -I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

CXXFLAGS="-g -I/usr/local/minigui/include \

      -L/usr/local/minigui/lib \

      -I/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/include" \

./configure --prefix=/usr/local/minigui \

--build=i386-linux \

--host=arm-linux \

--target=arm-linux

 

然后make,会报错,哪个文件报错就进哪个Makefile中:

找到LIBS,然后修改为:

LDFLAGS = -L/usr/local/minigui/lib

MYLIBS = -lm -lc \

/usr/local/minigui/lib/libmpi.a

LIBS = -lminigui_procs -ljpeg -lm -lpthread -ldl -lz -lpng ${MYLIBS}

 

1、          由于minigui主程序配置的时候用了proc,所以这里生成的是libminigui_procs文件,而不是ths文件,

2、          由于png库依赖zib库,所以在-lpng之前要加上-lz

3、          由于HIFB用到了SDK中的libmpi.a静态库,所以用-lm –lc指定了库的路径。后面如果用到其他的库,则要在这里依次添加。

 

注意dbufctrl两个DEMO因为依赖了其他的资源,我们没有安装,所以在sample的根目录的makefile中的COMMON_SUBDIRS下将这两个文件删除。

 

最后进入mginit文件夹,做同样的修改,然后make生成mginit可执行文件。

注意,在sample编译完成之后在sample根路径下会生成一个mginit可执行文件,但是因为有一个同名的mginit文件夹,所以这个可执行文件我是不知道该怎么执行的。

 

然后在设备的根文件系统的var文件夹下mkdirtmp文件夹,给权限777

 

最后一步,修改设备根文件系统的下/usr/local/etc/MiniGUI.cfg

[system]

# GAL engine and default options

gal_engine=hi3510

defaultmode=1024x768-32bpp

 

# IAL engine

#ial_engine=dummy

#mdev=/dev/input/mice

ial_engine=console

#ial_engine=dummy

mdev=/dev/mice

mtype=IMPS2

 

十、     USB鼠标

HI3515提供的SDK中的内核默认是不支持USB鼠标的,需要重新配置一下,make xconfig

Device Driver

      HID Devices

           USB Human Interface Device (full HID) support(勾选)

                 /dev/hiddev raw HID device support(勾选)

 

Input device support

      Mouse interface(勾选)

           Provide legacy /dev/psaux device(勾选)

      Mice

           Mice(勾选)

 

OK,先跑mginit,然后运行same,玩球球吧。

 

十一、HIFB驱动的加载

直接进mpp/ko/,然后运行./load3515就行了。

如果VGA的分辨率设置太大,就修改一下vram0_size的大小,这些SDKPDF都有说明。

 

十二、VGA分辨率的修改

1、          EnableVoDev函数的开头,

      static VO_PUB_ATTR_S s_stPubAttrDflt[3]的第一项,

      .enIntfSync = VO_OUTPUT_1024x768_60,    改为你需要的分辨率

 

2、          刚才移植到HI3510_VideoInit函数中的初始化代码里面,

      找到:

      //修改屏幕信息

    vinfo.xres_virtual = 1024;  //虚拟屏幕尺寸(显存大小)

      vinfo.yres_virtual = 768;

      vinfo.xres = 1024;                //可见屏幕尺寸

vinfo.yres = 768;

这里修改为对应的尺寸。

 

3、          Minigui.cfg里面

      defaultmode=1024x768-32bpp

      修改为对应的大小。

      注意这里的32bpp,如果和屏幕信息不对应,也会提示出错。

      32bppARGB8888

 

0
0
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MiniGUI 用户手册是一本详细介绍 MiniGUI 软件使用方法和功能的手册。MiniGUI 是一个嵌入式图形用户界面开发框架,它提供了丰富的绘图和窗口管理功能,可以实现嵌入式设备上的图形界面显示和交互操作。 用户手册内容包括 MiniGUI 的基本概念和架构,如窗口、控件、绘图等。手册中详细介绍了如何安装和配置 MiniGUI,包括编译和移植 MiniGUI 到不同硬件平台的步骤。用户手册还提供了 MiniGUI 的主要 API 接口的详细说明,包括窗口和控件的创建、显示、隐藏和销毁等操作的函数调用方式和参数说明。 此外,用户手册还包含了一些示例代码,以帮助用户更好地理解 MiniGUI 的使用方法。用户可以通过阅读示例代码,学习如何创建窗口和控件,如何处理用户输入事件,如何绘制图像和文字等。用户手册还提供了一些常见问题的解答和故障排除的方法,帮助用户解决在使用 MiniGUI 过程中可能遇到的问题。 MiniGUI 用户手册对于初学者来说是一个很好的入门指南,它详细介绍了 MiniGUI 的各个方面,帮助用户快速上手并能够独立开发嵌入式图形界面应用。用户可以根据手册的指导,按照自己的需求进行 MiniGUI 的配置和开发,实现自己想要的图形界面效果。总之,MiniGUI 用户手册是理解和使用 MiniGUI 的重要参考资料,对于开发者来说,它是不可或缺的工具。 ### 回答2: Minigui用户手册是一本关于Minigui图形用户界面开发框架的指南。Minigui是一个基于C语言开发的轻量级、可定制的GUI开发工具包。它可以帮助开发者快速构建各种图形界面应用程序。 这本用户手册涵盖了Minigui的各个方面,从安装和配置开始,一直到开发和调试。手册中详细介绍了如何使用Minigui的各种功能和组件,如窗口、按钮、菜单、对话框等,以及使用不同控件实现用户交互。手册还提供了丰富的示例代码和演示,帮助开发者更好地理解和应用Minigui的功能。 此外,手册还介绍了Minigui的特性和优势。它可以运行在各种类型的嵌入式设备上,具有较低的资源占用和快速的响应速度。Minigui还支持跨平台开发,可以在多种操作系统上运行,如Windows、Linux等。它还支持多国语言和字符集,帮助开发者构建全球化的应用程序。 Minigui用户手册不仅提供了技术内容,还对开发过程中的常见问题进行了解答,以及开发者应该遵循的最佳实践和规范。手册的目的是帮助开发者更加高效地利用Minigui进行图形界面开发,提升开发效率,并最大限度地减少错误和调试时间。 总之,Minigui用户手册是Minigui开发框架的一本重要参考资料,它提供了详尽的技术指导和实例代码,帮助开发者快速上手并开发出高质量的图形界面应用程序。无论是初学者还是经验丰富的开发者,都可以从中受益并提升他们的开发技能。 ### 回答3: minigui 用户手册是一本介绍和指导用户如何使用 minigui 软件的手册。minigui 是一个开源的图形用户界面(GUI)开发框架,它提供了丰富的图形界面组件和功能,能够帮助开发人员快速构建跨平台的图形界面应用程序。 minigui 用户手册从基础开始,介绍了 minigui 开发环境的安装和配置方法,以及如何创建和编译一个 minigui 应用程序。接着,手册详细介绍了 minigui 的各种图形界面组件,如窗口、按钮、文本框等,以及它们的使用方法和属性设置。用户可以通过手册学习如何创建和布局这些组件,以及如何响应用户的交互事件。 除了组件的介绍,minigui 用户手册还提供了大量的示例代码和实践案例,让用户可以更好地理解和应用 minigui 的各种功能。手册还解释了 minigui 的一些高级特性,如绘图和图像处理,以及如何与后台服务进行通信,从而帮助用户开发更加复杂和实用的应用程序。 minigui 用户手册还对 minigui 的开发工具和调试方法进行了介绍,帮助用户更好地进行开发和调试工作。手册也提供了一些常见问题和解决方案,以及一些开发经验和技巧,供用户参考。 总而言之,minigui 用户手册是一本全面介绍 minigui 软件的指南,它帮助用户快速入门,掌握 minigui 的使用方法,并通过实践和示例代码提供了更深入的学习和开发体验。无论是初学者还是有经验的开发人员,都可以从 minigui 用户手册中获得帮助和指导,提升图形界面应用程序的开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值