从http://www.minigui.org/en/download/这里下载 下面的三个文件:
libminigui-gpl-3.0.12.tar.gz MiniGUi3的库
minigui-res-be-3.0.12.tar.gz Minigui3的资源文件
前面这两个文件是必须的
mg-samples-3.0.12.tar.gz Minigui3的示例
获取后解压在一个地方,比如我的目录是: /code/code_2016/mingui3
Minigui3很小,真的很小,和QT这样企业级的应用来说,编译起来很轻松,几分钟就完事了,想想编译QT时二,三个小时太可怕了,还时不时的给你报错,真的很Mini,和UcGUI一样小,实现原理也基本是一样的,但对于大部份我们做一般的应用来说都够用了,不过在一个特定的平台,要用好,做出漂亮高效的UI,还真要在这些小的GUI自己定制修改不少的东西。
我基本是按默认的来编译MiniGui3的。
解压文件
tar –zxvf libminigui-gpl-3.0.12.tar.gz
cdlibminigui-gpl-3.0.12
进入MiniGUI3的目录里,会看到有一个build的目录,很多平台的编译脚本已有了,没有海思的,其实配也很简单。在移植前应该了解一下Migui3的GAL和IAL,基本我们做动的地方就是这两块,基它的地方,如果没有用过它,我们也比较难去修改它。
GAL是UI绘图的接口,IAL是外部设备的接口,打开几个文件了解一下,基本就看明白了,就那么几个struct 接口,不同的平台基本是一样的。
因为用Linux framebuffer标准的接口,修改的是很少的。
在根目录下写一个配置的脚本文件,如,下面两个配置 3520d和3531的基本一样:
#forhi3520D
CFLAGS="-I/home/jhting/minigui3/include-g -O0" ./configure \
--host=arm-hisiv100nptl-linux \
--prefix=/board/minigui3/hi3520d/\
--disable-screensaver\
--disable-splash\
--disable-jpgsupport \
--enable-videoqvfb=no\
--enable-rtosxvfb=no \
--enable-pcxvfb=no
#forhi3531
CFLAGS="-I/home/jhting/minigui3/include-g -O0" ./configure \
--host=arm-hisiv100nptl-linux \
--prefix=/board/minigui3/hi3531/\
--disable-screensaver\
--disable-splash\
--disable-jpgsupport \
--enable-videoqvfb=no\
--enable-rtosxvfb=no \
--enable-pcxvfb=no
没有用到qvfb所以把它们相关的关了(打开还会报一个包含头文件的错误,不过对应的修改一下Makefile就好了)。
执行上面的脚本
再:
make install
这样编译完成后,没有报错,比较幸运。
资源文件只要 ./configure 里接定 –prefix 和 –host安装上就行了,如基本这样:
./configure --host=arm-hisiv100nptl-linux --prefix=/board/minigui3/hi3531/
示例程序我没有编译所有的,我用哪个就编译了哪个,如:
#for hi3520D
arm-hisiv100nptl-linux-gcc -o helloworldhelloworld.c -I/board/minigui3/hi3520d/include -L/board/minigui3/hi3520d/lib-L/code/code_2016/mingui3/hisi_hifb/board/hi3520d/lib -I/code/code_2016/mingui3/hisi_hifb/board/hi3520d/include-static -lminigui_ths -lhifb -lmpi -laec -lhdmi -lmem -ltde -ljpeg -lVoiceEngine-lresampler -lanr -lvqev2 -ljpeg6b -lpthread -lm -lpthread –ldl
#for hi3531
arm-hisiv100nptl-linux-gcc -o helloworldhelloworld.c -I/board/minigui3/hi3531/include/-L/board/minigui3/hi3531/lib-L/code/code_2016/mingui3/hisi_hifb/board/hi3531/lib-I/code/code_2016/mingui3/hisi_hifb/board/hi3531/include -static -lminigui_ths -lhifb -lmpi -laec -lhdmi -lmem -ltde -ljpeg -lVoiceEngine-lresampler -lanr -lpciv -lvqev2 -ljpeg6b -lpthread -lm -lpthread –ldl
示例程序里有一个libhifb.a的库,这个是用来,初始化海思平台的,在代码修改里有说明
直接就按上面的来,当然是跑不出来什么东西的,也就是在运行程序时, 示例程序里编译时我们有一个libhifb.a的库,这个是用来初始化海思平台的,要初始化海思的MPI系统和VO输出,设置一些必要的参数,这部分我把它单独做了一个库,这样在MiniGUI里加一些必要的调用libhifb.a这个库,在不同的海思芯片平台上的修改都在libhifb.a这个库里搞定了,这样不会把UI的代码搞得太乱。
我们用 Minigui3里的fbcon接口来对接海思的fb接口,看一下minigui3里的fbcon接口,基本实现sysvideo.h里的 GAL_VideoDevice结构体的方法就行了,fbcon 里的fbvideo.c都实现了,我们要做的就是对接上海思平台的hifb就OK,改的地方不过几行而已。
基本的思路就是在GAL_VideoDevice里也有初始化的操作,把海思mpp,vo的初始化放这里就行了,有一个 SetVideoMode 的操作把设置hifb的参数放这里面就行了。
为了方便,在fbvideo.c里定义一个 HISI_FB的宏,把相对于海思平台的代码修改用它来控制。
这样根据基本的需求,定义一个头文件hisi_hifb.h,定义如下的方法:
int HIFB_VO_Start(void);
int HIFB_VO_Stop(void);
int HIFB_SetVideoMode(int fd, int width, int height, int bpp, intflags);
这些方法在libhifb.a的一个库里实现。Minigui3只要在 fbvideo.c里合适的地方调用就行了。
写一个libhifb.a的工程,它的目录是这样的
Board目录包括不同的平台头文件和lib
同级目录里有不同平台的代码 如src_hi3520d/src_hi3531/src_hi3536
不过海思不同平台的 hifb和tde基本是一致的,也完全可以写在同一份代码里,没必要搞得这么细.
在根目录里有一个Makefile.param内容如下:
exportBOARD?=hi3531
exportINSTALL_PREFIX?=/board/minigui3/$(BOARD)
exportLIBTARGET?=libhifb.a
exportCROSS_COMPILE?= arm-hisiv100nptl-linux-
export CROSS?=arm-hisiv100nptl-linux-
exportCC:=$(CROSS)gcc
exportAR:=$(CROSS)ar
export CFLAGS +=-g -O0 -Wall -Werror
ifeq($(HIARCH),hi3531)
CFLAGS +=-march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16
CXXFlAGS+=-march=armv7-a -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16
endif
exportPWD_PATH?=/code/code_2016/mingui3/hisi_hifb
exportMPP_LIB?=$(PWD_PATH)/board/$(BOARD)/lib
exportMPP_INCLUDE?=$(PWD_PATH)/board/$(BOARD)/include
CFLAGS +=-I$(MPP_INCLUDE)
如果编译不同的平台的,修改一下里面的 BOARD参数,当然做为参数传进来也许更方便一点。
在不同的芯片的目录里有一个Makefile,都一样的:
include../Makefile.param
SRC := $(wildcard *.c)
OBJ := $(SRC:%.c=%.o)
all:$(OBJ)
$(AR) rv $(LIBTARGET) $(OBJ)
cp $(LIBTARGET) $(INSTALL_PREFIX)/lib/
cp hisi_hifb.h$(INSTALL_PREFIX)/include/
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
clean:
@rm -f $(OBJ)
在代码里我是直接用,操作我是直接把海思mpp里的 sample代码拷来的,如src_hi3531里的文件:
改一点点东西就好了!
接上面的东西,实现了一个libhifb.a的库来初始化海思的东西,在Minigui3里的 fbcon 里的fbvideo.c里的合适地方调用就OK,基本上就这样,再编对Minigui3的库和helloworld程序,跑一下就行了。
配置也就修改一点点,把GAL指定为fbcon,分辩率改改,IAL指对对应的鼠标就行了。
1:在做上面的过程里,遇到的一个问题就是,按上面的东西,在hi3515/hi3520D上是跑是OK了,能输出了,但在hi3531,hi3536上跑,死活没有输出,搞了一天也没有结果,最后发现是fbcon里的一些其它ioctl操作后,hi3531/hi3536的fb就不行了,关了一些ioctl操作就OK了.
2:鼠标有残影,这个之前在用ucgui时也有,看来最好还是用海思的鼠标层来实现了。
基本就上面这些了,如果要实现好的话,还是得要用hifb里的TDE这些东西,不然画面效果不行,大屏必须了。
太晚了,文档中如果有坑,只挖不填,自己甄别啊!!!只供参考!!!