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位处理器架构之上。
几经艰辛,终于基本完成了u-boot在s3c44b0的移植工作,在些记录一下在移植过程中所碰到的困难和解决方法(一些心得),作为日后参考之用,也希望能够帮到其它有需要的人^_^。
1.来由:在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属个人意见),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的饼,这是后话。
2.准备:说是容易,做起来却挺难。
因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。
首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。
我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^:1)在网上下载一个u-boot源代码,我用的是1.1.2版本的,最新的应该是1.1.4的吧,其实差不多,那就像我那样下载一个1.1.2版本的吧。
把源文件解压,这个应该不用说了吧,学过linux的人应该会,不会的话我想你继续做下去也困难,那就先装个linux用下吧(我用的是RedHat的,哦对了,编译程序是需要gcc 编译器的,所以安装方式一定要选择工作站哦^_^)。
嵌入式系统移植+心得第一篇:嵌入式系统移植+心得嵌入式系统作为近年来新兴的且发展很快的学科,它的应用越来越受到广大技术人员的重视。
尤其起可移植性,显著的区别了通用操作系统。
一款嵌入式操作系统通常运行在不同体系结构的处理器和开发板上,极大的方便了开发者开发与应用,节约了成本。
嵌入式操作系统作为移植支持嵌入式系统应用的操作系统软件,被广泛的运用于不同应用领域。
纵观嵌入式系统40多年的历史,从无操作系统的嵌入式算法阶段到简单监控式的实时操作系统,一步又一步的到现在的以Internet为标志的嵌入式系统,一批又一批的先辈为其努力而奋斗。
科技的革新,带动着社会的发展,人类的进步。
大数据的时代必定属于我IT人。
以下我们聊一聊嵌入式系统及其移植性。
嵌入式操作系统大体分为商用型和免费型。
商用型主要是WindowsCE。
Psos.os-9.qnx等其价格较为昂贵,开发成本高,广泛运用于通信。
军事。
航天等高端技术领域免费型主要为Linux等主要运用于没有存储器管理单元的处理器而设置。
嵌入式基本操作共四步主机和目标机的连接方式;UARA最经典90%的板子上,都支持的方式叫异部串行接口,也就是我们所说的串口。
USB串行接口 TCP/IP网络接口 Debug Jtag调试接口补充说明1.对于串口,通常用的有串口调试助手,putty工具等,工具很多,功能都差不多,会用一两款就可以;2.对于USB线,当然必须要有USB的驱动才可以,一般芯片公司会提供,比如对于三星的芯片,USB下载主要由DNW软件来完成;3.对于网线,则必须要有网络协议支持才可以安装交叉编译器方法一:分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。
该方法相对比较困难,适合想深入学习构建交叉工具链的读者。
如果只是想使用交叉工具链,建议使用下列的方法二构建交叉工具链。
方法二:通过Crosstool-ng脚本工具来实现一次编译,生成交叉编译工具链,该方法相对于方法一要简单许多,并且出错的机会也非常少,建议大多数情况下使用该方法构建交叉编译工具链。
基于STM32单片机移植μcgui总结因为上一个题目的界面是自己一个一个点打到屏幕上去的,计算过程相当恶心,所以这两天赶紧弄了一下μCGUI,希望对后面的人机交互界面的设计有所帮助。
说实话,我对于人机交互界面的设计真心没什么的灵感,上次赵颖老师就委婉的表达了这个意思,我也深刻的意识到了这个问题,就是设计的界面相当普通,没有给人一种眼前一亮的感觉。
首先感谢队友王绥学给我提供的资料,因为自己电脑运行各种大型软件实在是太卡,所以这个暑假把女朋友电脑留下,不过资料都在另外一台电脑中,需要的资料就给队友要,十分的感谢啊!按照教程一步一步的做下来,前面几步关于GUI 的参数设置没什么问题,无非是用到的功能将其参数置1,用不到的功能将其参数置0,但是在最后一步中,就是将自己的LCD 底层驱动与μCGUI 连接起来,这里出现了问题,开始的时候编译总是出错,耗费了我一个上午的时间啊,以为是新版本的keil不兼容造成的,然后从4.72 版本直接降至3.8 版本,可是又出现了同样的问题,各种变量的undefined。
下午到了实验室,开始认真的阅读排查代码,然后终于一句话让我眼前一亮:#ifndef LCD_H(各种参数定义)#endif。
因为我自己的驱动文件中定义了一个LCD_H,所以造成上面的一部分代码在编译的时候就跳过没有编译,才造成了各种参数的未定义,删除了LCD_H 还有LCD_W 之后,果断的通过了编译,然后下载之后在屏幕上看到了显示的内容。
接下来就是优化代码,因为μCGUI 是一个通用的图形软件库,所以也就再所难免它还有可优化的地方,尤其是刷屏的速度上,如果是整屏刷新的话,可以很明显的看出来进度,很慢。
首先,是把自己驱动的TFT_Point()函数的代码直接复制到μCGUI 的画点函数中,因为如果是在μCGUI 的画点。
minigui linux 安装与运行1.首先,从飞漫的网站上下载相关的压缩包:/res.shtml虚拟frambuffer的应用程序,用来调试运行程序qvfb-1.1.tar.gz资源文件:minigui-res-1.6.10.tar.gz示例程序:mg-samples-1.6.10.tar.gz开发库:libminigui-1.6.10.tar.gz在home目录下创建一个minigui的目录# cd /home# mkdir minigui将这些压缩包拷贝到/home/minigui目录下2.安装下载的文件首先安装minigui的资源文件:[root@root minigui]# tar -xvzf minigui-res-1.6.10.tar.gz[root@root minigui]#cd minigui-res-1.6.10[root@root minigui-res-1.6.10]# make install安装minigui的库文件[root@root minigui]#tar -xvzf libminigui-1.6.10.tar.gz[root@root minigui]# cd libminigui-1.6.10[root@root libminigui-1.6.10]# ./configure[root@root libminigui-1.6.10]# make[root@root libminigui-1.6.10]#make install安装minigui的例子库[root@root minigui]# tar -xzvf mg-samples-1.6.10.tar.gz[root@root minigui]#cd mg-samples-1.6.10[root@root mg-samples-1.6.10]# ./configure[root@root mg-samples-1.6.10]# make[root@root mg-samples-1.6.10]# make install安装qvfb[root@root minigui]# tar -xzvf qvfb-1.1.tar.gz[root@root minigui]# cd qvfb-1.1[root@root qvfb-1.1]# ./configure[root@root qvfb-1.1]# make[root@root qvfb-1.1]# make install3.设置参数1.这步要进入#cd /etc/目录下, 修改#vi ld.so.conf文件,再最后一行加入/usr/local/lib 即在系统共享函数库中加入MiniGUI的函数库路径[root@root etc]# gedit /etc/ld.so.conf //注意:不是ld.so.c(至少fedora10下不是)/usr/kerberos/lib/usr/X11R6/lib/usr/lib/sane/usr/lib/qt-3.1/lib/usr/local/lib4、在修改并保存后,执行ldconfig命令,更新系统函数库缓存[root@root etc]#ldconfig5.然后就可以使用qvfb体验miniGUI了,进入qvfb1.1根目录下的qvfb文件夹:输入下面命令:[root@fedora7]# qvfb &//加上&符号使qvfb进程开启后shell立即返回,否则会阻塞shell进程,需要再开一个shell才可以运行minigui程序。
MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field ))<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包)sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version) exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minig ui修改Makefile第12行 all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not givea valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not giv e a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not gi ve a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not gi ve a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE #for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; th en :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \ --host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \ --host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccLD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include " CPPFLAGS="-g -I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include " CXXFLAGS="-g -I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./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-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include " CPPFLAGS="-g -I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include " CXXFLAGS="-g -I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff note booksame graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
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移植结束,但还没有测试。