搜索
bottom↓
回复: 9

minigui3.0.12之初体验-移植篇

[复制链接]

出0入0汤圆

发表于 2016-11-7 21:14:31 | 显示全部楼层 |阅读模式
原文地址: http://blog.csdn.net/jxgz_leo/article/details/53027588

前言

在一年多年前有幸接触使用到minigui一段时间,当时使用的应该是1.6版本,硬件平台使用的是s3c2440+64M内存,界面上做了很多功能,但整体运行还是十分流畅,我想要是换成QT在上面跑流畅度应该是比不上minigui的了;前段时间从朋友那拿到一块基于新塘nuc972的板子用来玩玩学习下,nuc972也是一颗基于arm926内核的soc,我想让人喜欢它的地方应该要是它内置了64M的DDR和LQFP的封装吧,硬件配置总体上和s3c2440相当,然后还配了一块800x480的七寸屏,我想用它来跑跑minigui应该会比较合适,也正好看看minigui3.0x更新的新特性。

备料

准备编译环境和交叉编译器,最好能用它编译一个最简单打印一句“hello world!”的小程序在板子上正常跑起来确保整个编译环境的正确;
下载minigui源码,它最基本的组成包括核心库MiniGUI Core Lib (V3.0.12 )和资源文件MiniGUI Resource (V3.0.12)这些多可以从minigui官方网站上下载到,另我这边这个两个文件是从nuc972的bsp包里得到的,它和从官网上下载的唯一区别是,它里面移植好了使用了nuc972的2D硬件加速功能的图像引擎,也就是说可以配置使用nuc972的硬件2D图像加速功能,貌似也只使用到了里面的BitBlt功能,画线这些基本操作还是由minigui来实现的,然而后面当我启用这个功能的时候屏幕颜色显示不对,还没去深究就先使用通用的FrameBuffer图像引擎了。
有了跑minigui的核心资源了,那再跑个demo看看吧,这里选择官网提供的iPhoneLikeDemo 后面发现运行它还需要用到jpeg和png库,这个两个也多可以在官网的下载界面的Tools and Dep. Libraries项里找到。
编译

一、核心库的编译

使用tar命令解压libminigui-gpl-3.0.12.tar.gz并cd进入;
使用configure脚本来配置minigui特性,这里执行如下命令:
./configure --prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --with-osname=linux --with-targetname=fbcon
--disable-pcxvfb --enable-videonuc970 --enable-videofbcon --enable-autoial --disable-vbfsupport
--disable-screensaver --enable-tslibial --enable-procs
其中--enable-videonuc970表示加入nuc92的硬件图形引擎支持,之后可在配置文件中选择使用;--enable-tslibial表示支持tslib作为IAL输入引擎;--enable-procs表示使minigui运行在procs模式,关于minigui的三种运行模式可参考官方文档;
配置成功后,执行make命令,等待编译完成无误后再执行make install命令即可由--prefix=xxx指定的路径下发现minigui的安装文件,把它们拷贝到rootfs对于的目录下即可。
修改etc目录下的MiniGUI.cfg配置文件,首先我们要修改指定我们使用的图像引擎为fbcon然后将其分辨率信息设置我们板子对应的分辨率如下:
# GAL engine and default options
gal_engine=fbcon
defaultmode=800x480-16bpp
第二个需要配置的为输入引擎IAL这里我们使用tslib作为我们的输入引擎即如下:
# IAL engine
ial_engine=tslib
mdev=/dev/input/event0
mtype=IMPS2
还有要修改的地方就是配置正确的资源文件路径,如光标图片资源等,如下:
[cursorinfo]
#Edit following line to specify cursor files path
cursorpath=/share/minigui/res/cursor/

[resinfo]
respath=/share/minigui/res/
Tips:
1. 在官方下载的源码中将不支持--enable-videonuc970选项可去掉;
2. 可通过命令./configure --help来查看支持的所有选项和含义。
3. 实际上如果我要跑官网上的demo的话还要打开对png图片的支持,配置时这项默认是关闭的,可加入参数--enable-pngsupport但实际上我发现即使添加上这个也是还没打开对png图片的支持,这一点可以通过打开mgconfig.h文件来确认配置是否生效,如果没有可手工将里面对于的宏打开即可,如png图片支持对于的宏为#define _MGIMAGE_PNG 1
二、编译资源文件

资源文件的编译相对简单,里面主要是包含一些图片资源等,如光标样式,使用tar命令解压minigui-res-be-3.0.12.tar.gz并cd进入,然后使用configure脚本配置安装路径执行如下命令:
./configure --prefix=$PWD/../build
然后执行make和make install即可,相关资源就会被安装到了上级目录的build目录下,既对应着在rootfs下的相应目录。

三、编译依赖的库文件

1、jpeg库的编译

同样使用configure脚本配置编译,执行命令如下:
./configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux --enable-shared --enable-static
其中--enable-shared是为了配置生成.so即共享库
然后执行make和make install命令后即可在当前目录下的build/lib下找到我们需要的文件了。
Tips:
1、步骤1的配置命令通常适用于大多数使用Autoconf/Automake来生成的工程;
2、注意使用和minigui核心库匹配的jpeg库版本,如果不确定通常程序运行时它会发出错误说找不到对应版本的库文件;
3、以上配置编译命令适用于较新的jpeg库如在jpeg-7上配置编译是通过的,然而在配置编译配置jpeg-6b时却发生了错提示如下:
make: ./libtool: Command not found
原来较老的jpeg库没有自带libtool,这里要先下载交叉编译libtool-2.2.4配置命令如下:
./configure --prefix=$PWD/build CC=arm-linux-gcc --host=arm-linux --build=i386-linux
然后make & make install即可;
4、编译好libtool后将build/bin目录下的libtool脚本拷贝至jpeg-6b的目录下,然后先要手动创建好接下来要安装的目录命令如下:
mkdir -p build/bin build/include build/lib build/man/man1
之后再执行make & make install命令即可在build/lib目录下找到我们需要的共享库了。
2、png库的编译

编译配置方法同编译jpeg库,无特别注意事项。

三、编译iphone-like-demo

它同样是使用Autoconf/Automake来配置的工程,所以我们解压它并cd进入使用如下命令来配置它
./configure --prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux --build=i386-linux CFLAGS=-I$PWD/../build/include
LDFLAGS="-L$PWD/../build/lib" LIBS="-lminigui_procs -lts -ljpeg -lpng -lz -ldl -lm -lpthread"
其中CFLAGS参数指定了minigui的头文件路径,LDFLAGS指定了要链接的动态链接库路径,LIBS指定了要链接的动态链接库,尽管我们这样指定了minigui的头文件路径但是编译过程中它还是有提示报错说找不到相应的minigui的头文件路径,这时我们为了简单只需将minigui的头文件手动的拷贝到其-I指定的路径下即可,这里我们将minigui的头文件拷贝到编译的当前路径下即可;
编译中会遇到很多报错,我们只需依次解决下即可,如
eblistview.c:(.text+0x40): undefined reference to `rindex'
我们打开eblistview.c这个文件在文件头部添加如下代码
#define rindex strrchr
即用strrchr这个接口来代替rindex这个接口;
一般来说不会有其他很严重的报错,我们多可以依次解决,直到make完成,然后make install后即可在上层build目录下的bin文件夹下生成我们的执行程序;
然后将build目录下的lib文件夹下的库文件拷贝至板子上的lib文件夹下,之后想办法将bin文件夹的东西拷贝至板子上或通过网线挂载的方式,进入执行./mginit即可。
四、运行效果

由于整个程序进入子程序后没办法返回,我对其做下了修改,点击子程序的左上角作为退出的功能,并替换了一张背景图片,整个演示视频链接如下:
minigui3.0.12官方demo在NUC972上的运行效果iphone-like-demo
http://v.youku.com/v_show/id_XMTgwOTg0NzcyOA==.html
需要编译好的二进制文件的同学可到如下百度网盘路径下载解压出来放到rootfs下即可:
http://pan.baidu.com/s/1boYFc8f

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入84汤圆

发表于 2016-11-7 21:58:46 | 显示全部楼层
这片子性能就别指望这些动态效果了,看着蛋疼。。

出0入0汤圆

发表于 2016-11-7 22:07:32 | 显示全部楼层
boyiee 发表于 2016-11-7 21:58
这片子性能就别指望这些动态效果了,看着蛋疼。。

有什么好芯片推荐下吗?

出0入84汤圆

发表于 2016-11-7 23:02:50 | 显示全部楼层
LQS1200 发表于 2016-11-7 22:07
有什么好芯片推荐下吗?

性能比较高的 想性价比高看全志和瑞芯微的,A20 A33 等

老外的看AM335X,IMX6

都是用量比较大的

做网络通信和控制类对性能没要求可以看楼主位的NUC972之类,个人没用过。

用量大的看AT91SAM9X35系列和飞思卡尔最近出的IMX6UL。

出0入0汤圆

 楼主| 发表于 2016-11-7 23:39:52 | 显示全部楼层
boyiee 发表于 2016-11-7 21:58
这片子性能就别指望这些动态效果了,看着蛋疼。。

它有硬件2D加速功能,这里还有些问题没弄上去(加上去后颜色显示不对),启用的话动画效果估计是要好些,我想一般它的应用场合也用用控制类方面的gui,也用不上那些花哨的动画效果了,应该还是个不错的选择

出0入0汤圆

发表于 2016-11-8 07:59:35 来自手机 | 显示全部楼层
太慢了吧

出0入0汤圆

发表于 2016-11-8 09:26:54 | 显示全部楼层
谢谢分享经验!

出0入0汤圆

发表于 2016-11-8 12:46:49 | 显示全部楼层
boyiee 发表于 2016-11-7 23:02
性能比较高的 想性价比高看全志和瑞芯微的,A20 A33 等

老外的看AM335X,IMX6

全志的东西好不好弄?

出0入84汤圆

发表于 2016-11-14 14:00:39 | 显示全部楼层
LQS1200 发表于 2016-11-8 12:46
全志的东西好不好弄?

一般 常用的驱动都给了,但是像GPU等部分驱动是不开源的,只能在安卓用,也就是说linux下没法硬解视频,资料都是安卓的,linux下的很少。
以前做过A20的项目, 用的linux+QT, 如果对成本要求不高工业用还是建议AT91SAM9X5 AM335X IMX6这些片子,省心。

出0入0汤圆

发表于 2016-11-18 11:06:18 | 显示全部楼层
编译出的问题不少啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 04:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表