Minigui在uClinux 上的移植心得
- 格式:doc
- 大小:40.00 KB
- 文档页数:7
ucGUI移植详细设计及总结序本文档阐述了将ucGUI移植到IM12上的过程。
ucGUI版本为3.9,移植到IM12上,触摸屏及按键能够正常使用。
在ucGUI源码包的基础上,添加了一些接口函数以适应IM12,在使用时应该根据情况使用这些接口,这些新增加的函数的接口将在后面章节中详细讲述。
此外,适应IM12的ucGUI在Wind River Workbench 3.0环境下被编译成两个静态库文件libNoWindow.a和libWindow.a,编译程序时应该连接这两个库。
文档篇章安排如下:第一章,ucGUI源码包简介。
主要介绍了所使用的ucGUI图形库中各文件夹的内容及功能,并对IM12中与ucGUI移植相关的部分,包括触摸屏、LCD、按键板等进行了简单的介绍。
第二章,图形库移植。
阐述如何对ucGUI进行配置、编译,以在IM12的LCD上显示图形,此部分还未实现触摸屏及按键功能,只是纯粹的显示而已第三章,触摸屏移植。
第四章,按键移植。
第五章,带触摸屏及按键功能的ucGUI应用程序模板。
第一章ucGUI源码包简介ucGUI要移植到im12上,实际上就是根据im12的情况修改ucGUI中的一些配置项,或增加、删减一些程序以适应im12,同时要保持ucGUI的特性。
要做好移植工作,需对ucGUI 及IM12相关部分有足够的了解。
1.1ucGUI简介移植所采用的ucGUI版本为3.9,主要包含的文件夹如图1所示图1 ucGUI源码结构图各文件夹的主要内容如下:Config ----------- 配置文件GUI ----------- 源代码GUI_X ---------- 操作系统接口函数定义文件GUI 源代码文件:1)AntiAlias: 抗锯齿显示效果支持。
2)ConvertColor: 彩色显示的色彩转换支持。
3)ConvertMono: (b/w)和灰度显示的色彩转换支持。
4)Core: 核心文件,提供了GUI基本的功能。
湖南城市学院信息技术与工程管理学院MiniGUI在SkyEye0.8.6上的移植项目小组成员蒋文杰舒伸罗品京付锡林阳棉似曹育斌指导老师:阳俊2011-9-1目录一、移植平台搭建 (3)二、移植过程中所需资源包汇总 (3)三、移植环境搭建详解 (3)1、编译安装SkyEye (3)2、编译安装带LCD的SkyEye (4)3、安装交叉编译工具 (4)4、配置、编译和运行内核 (5)5、内核在SkyEye上的运行 (8)6、根文件系统制作 (10)四、在SkyEye的EP7312模拟器上运行MiniGUI (19)1、确认内核的配置 (20)2、为SkyEye的EP7312模拟器交叉编译MiniGUI (24)3、在SkyEye的EP7312模拟器上运行MiniGUI示例程序 (25)a、交叉编译MiniGUI示例程序 (25)b、准备文件系统 (25)c、运行MiniGUI示例程序 (27)五、移植过程中遇到的问题及解决方法 (28)一、移植平台搭建VMware Workstation v6.5版本的虚拟机RedHat9.0的Linux操作系统安装的文章多如牛毛,在这笔者就不再累述。
但还是想提醒一下读者,在选择安装路径时要特别注意,一般它是默认安装在C:\Program Files下,最好把它安装在自己工作的目录下。
RedHat9.0安装的文章网上比比皆是,在这不加累述了,还是那句老话,实在不会的读者自己上网问google大神。
读者应该注意的地方是在安装RedHat9.0是要选择完全安装,这样可以避免以后一些不必要的错误。
二、移植过程中所需资源包汇总/home/source/minigui/----→libminigui-gpl-1.6.3.tar.gz (开发库包)----→minigui-gpl-res-1.6.tar.gz (资源包)----→mg-samples-gpl-1.6.3.tar.gz (示例程序包)/opt/armlinux/----→skyeye0.8.6.tar.gz (模拟开发板的软件)----→linux-2.4.13-patched-for-EP7312.tar.gz (支持EP7312的内核压缩包)----→busybox-1.00.tar.gz (制作根文件系统的工具)----→genromfs-0.5.2.tar.gz (制作根文件系统镜像的工具)----→gtk+-2.2.1.tar.bz2 (支持LCD驱动)----→armlinux4skyeye-ep7312.tar.gz (LCD和触摸屏驱动程序)/usr/local/arm/----→cross-2.95.3.tar.gz (交叉编译工具)三、移植环境搭建详解1、编译安装SkyEyeSkyEye是一个用来学习嵌入式开发的非常有用的工具,下面就SkyEye对EP7312的模拟是如何构建和运行嵌入式Linux系统的加以阐述。
stm32 UCGUI 完美移植作者:Changing发表时间:09-16 04:13分类:电子相关1 Comment前一篇:stm32 DA 数模转换后一篇:Stm32 SWD 下载 调试配置UCGUI是一种嵌入式应用中的图形支持系统。
它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。
它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。
UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。
类似程序还有国产的一个MINIGUI (/zhcn/),MiniGUI 是一个自由软件项目。
其目标是提供一个快速、稳定、跨操作系统的图形用户界面(GUI)支持系统,尤其是基于 Li nux/uClinux、eCos 以及其他传统 RTOS(如 VxWorks、ThreadX、uC/OS-II、Nucleus 等)的实时嵌入式操作系统。
有机会尝试下,支持下国产,毕竟国内这样的公司不多。
这里移植的UCGUI3.90a版本,虽然已经有更新的版本,比如UCGUI3.98、甚至4.04版本。
但是目前来说只有这个版本的代码是最全的,包括了JPEG , MULTILAYER , MEMDEV ,AntiAlias等模块。
一直想尝试做一个数码相册,JEPG模块自然少不了,所以移植了这个版本。
UCGUI390a 下载整个移植过程,让LCD显示图案倒是没花多少时间,资料也比较多,但是在移植触摸屏的时候卡了好几天,然后又是 UCGUI 指针图标 移动有重影(LCD读取像素颜色函数有问题)。
总之移植是个累人的活首先需要保证你的LCD驱动和触摸屏驱动是有效的,如果你的LCD也是ili93xx 控制器 XPT2046控制器的触摸屏可以参考 stm32 驱动 T F T LCD stm32 驱动 触摸屏 两篇文章UCGUI的文件数量很大,主要用到UCGUI390a/Start/Con f ig 和 UCGUI390a/Start/GUI两个文件夹下文件,不过文件数量也已经很多了 。
MiniGUI 移植指南版本 2.0适用于 MiniGUI 版本 2.0.3/1.6.9及Linux/uClinux操作系统北京飞漫软件技术有限公司2006 年6 月版权声明《MiniGUI 移植指南》版本 2.0,适用于MiniGUI 版本 2.0.3/1.6.9及Linux/uClinux 操作系统。
版权所有 (C) 2003~2006,北京飞漫软件技术有限公司,保留所有权利。
无论您以何种方式获得该手册的全部或部分文字或图片资料,无论是普通印刷品还是电子文档,北京飞漫软件技术有限公司仅仅授权您阅读的权利,任何形式的格式转换、再次发布、传播以及复制其内容的全部或部分,或将其中的文字和图片未经书面许可而用于商业目的,均被视为侵权行为,并可能导致严重的民事或刑事处罚。
目录版权声明 (i)1 Linux/uClinux简介 (1)2 MiniGUI与Linux/uClinux (2)3在运行 Linux 的 PC 机上安装并运行 MiniGUI (4)3.1 MiniGUI对Linux内核的要求 (4)3.2 Linux下的软件维护和建立工具 (4)3.2.1 make 和 makefile (4)3.2.2 Autoconf/Automake (4)3.2.3 ldd 和 ldconfig (5)3.3 MiniGUI 的图形引擎 (6)3.3.1 MiniGUI 在字符控制台上的运行:配置 FrameBuffer (6)3.3.2 MiniGUI 在 X Window 上的运行:运行 QVFB (8)3.4 MiniGUI 的依赖库 (9)3.4.1 LibTTF 和 LibT1 (9)3.4.2 LibJPEG、LibPNG 等函数库 (9)3.5 编译并安装 MiniGUI (10)3.5.1 编译并安装 MiniGUI (10)3.5.2 安装MiniGUI的资源 (11)3.5.3 编译并安装MiniGUI的演示程序mde (11)3.6 运行MiniGUI示例程序 (11)4在SkyEye的EP7312模拟器上运行MiniGUI (13)4.1 安装交叉编译工具链 (13)4.2 安装SkyEye (13)4.3 配置、编译Linux (14)4.4 SkyEye EP7312模拟器的MiniGUI输入引擎 (14)4.5 交叉编译MiniGUI (15)4.6 交叉编译MiniGUI示例程序 (17)4.7 准备文件系统 (18)4.8 运行MiniGUI示例程序 (20)5在Xcopilot模拟器上运行MiniGUI (22)5.1 安装交叉编译工具链 (22)5.2 安装Xcopilot (22)5.3 配置、编译和运行uClinux (22)5.4 Xcopilot模拟器的MiniGUI输入引擎 (23)5.5 为Xcopilot模拟器交叉编译MiniGUI (27)5.6 交叉编译MiniGUI示例程序 (30)5.7 准备文件系统 (31)5.8 运行MiniGUI示例程序 (32)1 Linux/uClinux简介Linux操作系统核心最早是由芬兰的Linus Torvalds 1991年8月在芬兰赫尔辛基大学上学时发布的,经过众多世界顶尖的软件工程师的不断修改和完善,Linux得以在全球普及开来,在服务器领域及个人桌面版得到越来越多的应用,在嵌入式开发方面更是具有其它操作系统无可比拟的优势。
MiniGUI学习笔记关于操作系统和上层软件的关系,某些操作系统被称为内核空间(kernel space),而操作系统以上的部分被称为用户空间(user space)。
按照功能,操作系统以上的部分可以分为中间件和上层应用两个部分。
中间件一般提供了一些相对底层的软件层次的功能。
它的实现一般不包括应用程序的逻辑,而是向上层软件提供了各种方便的应用程序接口(API)。
GUI系统的移植实现基础包含输出设备和输入设备两个方面在学习一个嵌入式GUI特性和功能的时候,需要关注可移植性、稳定性和可靠性、系统开销、可配置性等几个方面的内容。
第二章.MiniGUI的特点和发展作为操作系统和应用程序之间的中间件,MiniGUI将底层操作系统及硬件平台差别隐藏了起来,并对上层应用程序提供了一致的功能特性,这些功能特性主要包括:1)支持不同的硬件开发平台2)跨操作系统支持3)多运行模式支持。
为了适应不同的操作系统运行环境,MiniGUI可配置成三种运行模式:MiniGUI-Threads(线程模式)、MiniGUI-Processes(进程模式)及MiniGUI-Standalone(独立模式) 4)内建资源支持。
可以将MiniGUI所使用的资源,诸如位图、图标和字体等编译到函数库中。
5)完备的多窗口机制和消息传递机制6)提供常用的控件类。
7)对话框和消息框支持8)其他GUI元素9)界面皮肤支持10)支持低端显示设备(比如单色LCD)和高端显示设备(8位色及以上显示设备)。
通过MiniGUI的图形抽象层及图形引擎技术,还可以支持特殊的显示设备,比如YUV显示设备。
11)提供增强GDI函数。
12) Windows的资源文件支持13)各种流行图像文件支持14)多字符集和多字体支持15)多种键盘布局的支持16)针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等17)副屏支持。
硬件适配性:可运行于各种含有MMU(内存管理单元)的32位处理器架构之上。
Minigui在uClinux 上的移植心得1、下载minigui源码1.3.31.3.3这两个包的下载需要你在上注册过才可以下载,免费注册的,自己去下吧1.3.0 图形界面程序1.3.0 一些小例子把源码文件复制到/home/liu/minigui目录下,解开源码[root@localhost minigui]#tar zxvf 1.3.3 minigui]#tar zxvf 1.3.3 minigui]#tar zxvf 1.3.0 minigui]#tar zxvf 1.3.0环境的搭建首先你需要一个Linux 环境,我安装的是RedHat 安装时记着选everything,这样可以避免到时候编译少了东西。
这里搭建的环境是让MiniGUI 在你的PC 上可以跑起来,这样以后你开发程序就可以只在PC 上开发,调试好,最后交叉编译一下放到板子上就行了。
把 1.3.3 解开[user]# tar zxf[user]# tar zxf编译libminigui ,这个是minigui 运行所必需的库文件,必须编译成功[user]# cd libminigui-1.3.3[user]# ./configure . yeschecking for pthread library... yeschecking for TT_FreeType_Version in -lttf... yeschecking for T1_InitLib in -lt1... nochecking for jpeg_std_error in -ljpeg... yeschecking for png_check_sig in -lpng... yes其中–lttf –lpng 必须是yes ,不然后面你的程序肯定会有问题,如果这里不是yes 的话,肯定是你的Redhat 9 安装不对,告诉过你安装时选everything ,你选了吗其中ttf 库是对TrueType 字体的支持,png 库是对png 图形的支持,MiniGui 里都需要这两个,在后面为板子交叉编译的时候也需要这两个,不然你的程序跑不起来,切记切记。
好了,现在通过了,下面是编译了[user]# make接来来就是漫长的等待了,让它慢慢的编译吧注:在make时,可能会出现如下错误::/usr/include/asm/:6:2: warning: #warning using private kernel header; include <> instead!:265:47: missing terminating " character:267:25: missing terminating " charactermake[3]: *** [] Error 1make[3]: Leaving directory `/opt/st2410/libminigui-1.3.3/src/newgal'make[2]: *** [install-recursive] Error 1make[2]: Leaving directory `/opt/st2410/libminigui-1.3.3/src/newgal'make[1]: *** [install-recursive] Error 1make[1]: Leaving directory `/opt/st2410/libminigui-1.3.3/src'make: *** [install-recursive] Error 1解决方法:修改文件,将265 line__asm__ __volatile__ ("call _copy_row": "=&D" (u1), "=&S" (u2): "0" (dstp), "1" (srcp): "memory" );修改为:__asm__ __volatile__ ("call _copy_row": "=&D" (u1), "=&S" (u2): "0" (dstp), "1" (srcp): "memory" );[user]# su 1.3.33.0.0] 好几个目录,里面有相应的文件检查/usr/local/include 里面是不是多了一个minigui 目录,/usr/local/include/minigui 时面好多的.h 文件,如下:如果这里检查没有这些东西的话,那你前面的步骤肯定有问题,自己检查一下吧。
首先,修改你的/etc/ 文件,在里面最后新加入一行/usr/local/lib然后执行[Root]# ldconfigOK !Libminigui 配置在System Wide Options 里如下:[*] Build MiniGUI-Lite configure[user]# make[user]# make install在这个过程中如果出现error while loading shared libraries: cannot open shared object file说明你的系统少了这个库,还是回去检查一下,你安装时Redhat 时是否选了everything ,或者在实际操作的过程中,这个库有可以被误删除掉,我就出现过,这时候你可以google 一下,输入redhat 9 ,应该就可以搜到相应的rpm 包,安装时[root]# rpm –i --force [你的包名] 就OK了这里有个下载地址,可以试试,我是用讯雷下载的,别的工具没试过注意:在你后面的操作过程中有可能会导致丢失,这时候只要重装一下就OK 了解决了这个问题后重复安装过程[user]# ./configure[user]# make[user]# make installOK ,环境搭建好了,下面是测试了:)还记得前面让你下载的 1.3.0 这个包吧,这个就是一些例子,现在试试吧:)[user]# tar zxf[user]# ./configure[user]# make[user]# cd src看看src 目录下是不是已经编译出可执行文件来了现在来执行一下吧,首先把qvfb 加到你的可执行路径中去[user]# cd $HOME[user]# vi .bashrc在.bashrc 最后面加上一句export PATH="$PATH:/sbin:/usr/local/arm/"保存退出,这里面有些路径是为以后用的,比如/usr/local/arm/ ,先加上吧:)[user]# source .bashrc 1.3.0hellowordOK ,这个时候你应该可以看到在qvfb 中的执行效果了吧,记住:一定要先运行qvfb ,并且设置qvfb ,然后再运行你的程序,而且qvfb 每重启一次就需要重新设置一下,真麻烦OK 你的PC 环境搭建完毕了,你现在可以在PC 上开发你的程序,并且编译,并在qvfb 中执行,等完全验证它是正确的了,把它交叉编译一下,放到板子上去就可以了,呵呵:)交叉编译minigui库修改scripts/mkconfig,找到#echo "CFLAGS=\"$CFLAGS\" \\" >> $CONFIG_MNU#echo "LDFLAGS=\"$LDFLAGS\" \\" >> $CONFIG_MNU用echo "CFLAGS=\"$CFLAGS\" \\" >> $CONFIG_MNUecho "LDFLAGS=\"$LDFLAGS\" \\" >> $CONFIG_MNU替换[root@localhost libminigui-1.3.3] make menuconfig保存退出,则生成config-mnu文件,编辑,将#!/bin/sh# Automatically generated by make menuconfig.rm -fCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \LDFLAGS="-Wl,-elf2flt -static -Wl,-move-rodata -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lc -lm -lpthread" \./configure --prefix=/usr/local/arm-elf \--build=i686-pc-linux-gnu \--host=arm-elf-linux \--target=arm-elf-linux \--disable-shared \--disable-lite \--disable-standalone \--enable-incoreres \--disable-flatstyle \--enable-newgal \--disable-nativegal \--disable-galcommlcd \--enable-galfbcon \--enable-adsial \--disable-micemoveable \--disable-cursor \--disable-fblin1r \--enable-fblin8 \--disable-fblin16 \--disable-fblin32 \--disable-textmode \--enable-dummyial \--disable-mc68x328ial \--disable-nativeial \--disable-qvfbial \--disable-qpfsupport \--disable-ttfsupport \--disable-type1support \--disable-latin9support \--disable-gbksupport \--disable-big5support \--disable-unicodesupport \--disable-savebitmap \--disable-imegb2312 \--disable-imegb2312py \--disable-aboutdlg \--disable-savescreen \--disable-grayscreen \--enable-tinyscreen \--enable-video-fbcon \--disable-video-qvfb \--disable-nativegalqvfb \--with-osname=uclinux覆盖原来内容[root@localhost libminigui-1.3.3] make[root@localhost libminigui-1.3.3] make install[root@localhost libminigui-1.3.3] ldconfig可以进入/usr/local/arm-elf目录中,你会看到新增加了etc和lib两个文件夹,这两个文件夹就是我们刚才用arm-elf-gcc交叉编译minigui的函数库所产生的结果,以后编译在目标板中运行的应用程序时,就会对这两个文件夹里的内容进行编译,从而产生适合于在arm开发板中运行的应用程序.交叉编译minigui-res-1.3.3进入minigui-res-1.3.3文件夹内,修改,在prefix = $(TOPDIR)/usr/local/后添加我们的交叉编译安装目录arm-elf,即prefix = $(TOPDIR)/usr/local/arm-elf.[root@localhost minigui-res-1.3.3] make install交叉编译mde-1.3.0[root@localhost minigui-res-1.3.3] cd 建立文件#! /bin/shCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -I/usr/include \-I/usr/local/arm-elf/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \ LDFLAGS="-Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lpthread -L/usr/lib -lc -lm" \./configure --prefix=/usr/local/arm-elf \--target=arm-elf-linux \--host=arm-elf-linux \-exec-prefix=/usr/local/arm-elf \--enable-static \--disable-lite执行文件[root@localhost minigui-res-1.3.3] sh修改各子目录下的Makefile文件将LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lpthread -L/usr/lib -lc -lm -lminiguiLIBS = -lm -lpthread –lminigui替换:LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lpthread -L/usr/lib -lc -lm LIBS = -lpthread –lminigui修改各子目录下的Makefile文件将:COMMON_SUBDIRS = notebook bomb housekeeper same russia controlpanel vacs \fontdemo dlgdemo ctrldemo picview替换:COMMON_SUBDIRS = notebook tools bomb housekeeper same russia controlpanel vacs \fontdemo dlgdemo ctrldemo picview注:之所以将tools去掉,因为tools编译有错误,暂时无法解决编译[root@localhost minigui-res-1.3.3]make交叉编译mg-samples-1.3.0建立文件#! /bin/shCC=arm-elf-gcc \CFLAGS="-I/home/liu/uClinux-040408/uClibc/include -I/usr/include \-I/usr/local/arm-elf/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \ LDFLAGS="-Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib \-L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib \-lc -lm" \./configure --prefix=/usr/local/arm-elf \--host=arm-elf-linux \--target=arm-elf-linux \-exec-prefix=/usr/local/arm-elf \--enable-static \--disable-lite执行文件[root@localhost mg-samples-1.3.0] sh修改src/目录下的Makefile文件将LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lc -lmLIBS = -lminigui -lm -lpthread –lc替换:LDFLAGS = -Wl,-elf2flt -static -L/home/liu/uClinux-040408/lib/uClibc/lib -L/home/liu/uClinux-040408/ -L/usr/local/arm-elf/lib -lc -lmLIBS = -lminigui -lpthread编译[root@localhost mg-samples-1.3.0]make移植结束,但还没有测试。