logo资料库

MiniGUI3移植到Hi3515全过程.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
MiniGUI3 移植到 Hi3515 全过程 经过 3 周奋战,终于在 VGA 上显示出了 HelloWorld,其中过程,真 是一把辛酸泪,现记录如下,也让后来人少走弯路。 一、 安装包的下载 http://www.minigui.com/zhcn/download/ 各个库说明如下(个人整理,仅供参考) libmgi 输入法 libmgplus 图形功能,如路径,渐变填充,是平滑的,颜色组成 libmg3d 3D libmgutils 对话框模板,这些函数模板包括打开/保存文件对话框,颜 色选择,字体选择对话框,对话框的信息,等等 libmgp 打印控件,输出到打印机 qvfb2 gvfb 虚拟显存, QT 虚拟显存, GTK jpegsrc JPG 库 libpng PNG 库 freetype 字体 zlib PNG 压缩算法
我只安装了里面 7 个库:freetype,zlib,jpegsrc,libpng,以及 res, 主库,和 sample。 二、 安装前的准备 先从网上搜索移植资料,最后锁定了这篇作为参考: http://sgbihu.com/?p=249 然后就按要求将库一一解压,为了避免麻烦,我设置的安装路径也和 文中提到的一样,在/usr/local/minigui 中。 OK,准备工作完成,开始安装。 三、 zlib 库的安装 根据参考资料提示做。注意修改 gcc 为 hisi 环境的就行,下同,不再 累述 四、 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" 注意 I 和 L 后面不要有空格,高手当然知道,但俺是菜鸟,所以开始 给他们中间加了个空格,结果当然就悲剧了。 注意/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 是不行的。然后查看 minigui 的 configure –help,发现了 --enable-videohi35xx 选项,配置的时候加上,结果编译的时候报错, HI3560 缺少头文件,因为我们只需要 HI3515,所以 vi mgconfig.h vi confdefs.h 删掉 3560 的 define。 再编译,通过,结果继续报错,忘了是编译报错还是运行 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 函数中,参考 HI3515 的 SDK 中 mpp/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);
分享到:
收藏