主题 : minigui1.6.10+tslib1.4到mini2440的移植问题 IAL解决不好 复制链接 | 浏览器收藏 | 打印
大笑笑大
级别: 骑士
UID: 25314
精华: 8
发帖: 184
金钱: 1320 两
威望: 264 点
综合积分: 528 分
注册时间: 2010-07-22
最后登录: 2014-10-11
楼主  发表于: 2010-09-10 16:57

 minigui1.6.10+tslib1.4到mini2440的移植问题 IAL解决不好

参考“最后的骑士”的帖子http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3496298
MiniGUI-1.6.10在mini2440上的移植
更新下自己的使用情况和问题。
2010年9月10日
一、编译前准备
1. 硬件环境
A. 主机
x86 系列PC 机。
B. 开发板
友善之臂mini2440 开发板。
C. 通讯连接
串口和网口。
2. 软件环境
A. 主机操作系统
VMware 虚拟机下的redora9 。
B. 开发板操作系统
嵌入式Linux,内核版本为linux-2.6.32.2-mini2440-20100728。
C. 交叉编译器
arm-linux-gcc-4.3.2(安装位置:/usr/local/arm/4.3.2)。
D. 通讯方式
虚拟机与主机(Windows XP)使用共享文件夹通讯,主机
与开发板使用minicom通讯。
3. 相关说明
A. 命令
所有以#开头的均为在shell 中执行的命令。
B. 交叉编译器位置
交叉编译器的安装位置为/usr/local/arm/4.3.2,进行交叉
编译产生的库都安装在/usr/local/arm/4.3.2/arm-linux目录
下,您可以根据你的交叉编译器的实际位置进行更改。
C. 工作目录
默认的工作目录为/root/minigui,绝大多数操作都在此目
录下进行。
D. 注释
对shell 脚本进行的注释均放在该命令下一行的圆括号内。
4. 下载MiniGUI图形库源码
地址:http://www.minigui.org/downloads
A. 开发库libminigui-1.6.10.tar.gz
编译完成后生成三个库:它们分别是libminigui、libmgext以及libvcongui。
libminigui 是提供窗口管理和图形接口的核心函数库,也提供了大量的标准控件;
libmgext 是libminigui 的一个扩展库,提供了一些高级控件以及“文件打开”、“颜色选择”对话框等;
libvcongui 则为Linux 操作系统提供了一个应用程序可用的虚拟控制台窗口,从而可以方便地在MiniGUI 环境中运行字符界面的应用程序。
B. 资源文件minigui-res-1.6.10.tar.gz
MiniGUI 所使用的资源, 包括基本字体、图标、位图和鼠标光标。
C. 示例程序mg-samples-str-1.6.10.tar.gz
《MiniGUI 编程指南》的配套示例程序。
D. 综合演示程序mde-1.6.10.tar.gz
MiniGUI 的综合演示程序包, 其中包含有一些较为复杂的示例程序。
5. 下载所依赖函数库源码
A. zlib库
这是编译后面的库的基础。地址:http://www.zlib.net/zlib-1.2.5.tar.gz
B. png库
png 图片支持库。地址:http://superbeast.
dl.sourceforge.net/sourceforge/libpng/libpng-1.0.10rc1.tar.gz
C. jpeg库
jpeg 图片支持库。地址:
http://www.minigui.org/downloads
D. ttf库
TrueType 字体的支持库。地址:
http://nchc.dl.sourceforge.net/sourceforge/freetype/freetype-1.3.1.tar.gz
E. popt库
编译mde 需要。地址:
http://gd.tuwien.ac.at/utils/rpm.org/dist/rpm-4.1.x/popt-1.7.tar.gz
6. 下载上位机仿真程序
Qt 虚拟缓冲帧qvfb-1.1.tar.gz,上位机仿真需要。
7. 复制根文件系统
复制mini2440 开发板自带的根文件系统root_default.tgz
到虚拟机中,并把yaffs 映像制作工具mkyaffsimage 复制到/bin 目录下。
8. 解压源码包
A. 建立工作目录及复制源码包
#mkdir /root/minigui
(创建工作目录,绝大部分相关的操作抖将在此目录下进
行)
#cd /root/minigui
(进入工作目录)
#mkdir source
(创建source 目录,所有的源码包都放在此目录)
#cp … source
(把所有下载的源码包复制到此目录)
#mkdir arm
(创建arm 目录,所有进行交叉编译所需的源码都放在此目
录)
#mkdir x86
(创建x86 目录,所有进行仿真所需的源码都放在此目录)
B. 解压上位机仿真所需源码
#cd /root/minigui/source
(进入源码包所在目录)
# tar zxvf libminigui-1.6.10.tar.gz –C ../x86
(解压MiniGUI 图形库源码到x86 目录,-C 选项的含义是
更改解压缩目录)
# tar zxvf minigui-res-1.6.10.tar.gz –C ../x86
(解压MiniGUI 资源文件到x86 目录)
# tar zxvf mg-samples-str-1.6.10.tar.gz –C ../x86
(解压MiniGUI 示例源码到x86 目录)
# tar zxvf mde-1.6.10.tar.gz –C ../x86
(解压MiniGUI 综合演示源码到x86 目录)
# tar zxvf qvfb-1.1.tar.gz –C ../x86
(解压qvfb 源码到x86 目录)
C. 解压交叉编译所需源码
#cd /root/minigui/source
(进入源码包所在目录)
#tar zxvf libminigui-1.6.10.tar.gz –C ../arm
(解压MiniGUI 图形库源码到arm 目录)
#tar zxvf minigui-res-1.6.10.tar.gz –C ../arm
(解压MiniGUI 资源文件到arm 目录)
#tar zxvf mg-samples-str-1.6.10.tar.gz –C ../arm
(解压MiniGUI 示例源码到arm 目录)
#tar zxvf mde-1.6.10.tar.gz –C ../arm
(解压MiniGUI 综合演示源码到arm 目录)
#tar zxvf zlib-1.2.5.tar.gz –C ../arm
(解压zlib 源码到arm 目录)
#tar zxvf libpng-1.0.10rc1.tar.gz –C ../arm
(解压png 源码到arm 目录)
#tar zxvf jpegsrc.v6b.tar.gz –C ../arm
(解压jpeg 源码到arm 目录)
#tar zxvf popt-1.7.tar.gz –C ../arm
(解压popt 源码到arm 目录)
D. 解压根文件系统
#tar zxvf root_default.tgz –C ../arm
(解压根文件系统root_default 到arm 目录)
9. 目录及源码分布总览
/root/minigui
|source
libminigui-1.6.10.tar.gz
minigui-res-1.6.10.tar.gz
mg-samples-str-1.6.10.tar.gz
mde-1.6.10.tar.gz
zlib-1.2.5.tar.gz
libpng-1.0.10rc1.tar.gz
jpegsrc.v6b.tar.gz
freetype-1.3.1.tar.gz
popt-1.7.tar.gz
qvfb-1.1.tar.gz
root_default.tgz
|x86
|libminigui-1.6.10.
|minigui-res-1.6.10
|mg-samples-str-1.6.10
|mde-1.6.10
|qvfb-1.1
|arm
|libminigui-1.6.10.
|minigui-res-1.6.10
|mg-samples-str-1.6.10
|mde-1.6.10
|zlib-1.2.5
|libpng-1.0.10rc1
|jpegsrc.v6b
|freetype-1.3.1
|popt-1.7
|root_default
二、建立仿真开发环境
1. 安装minigui-res-1.6.10
# cd /root/minigui/x86/minigui-res-1.6.10
# make install
这样MiniGUI 运行时所需的资源文件就被安装到
/usr/local/lib/minigui/res/目录下。
2. 编译libminigui-1.6.10
#cd /root/minigui/x86/libminigui-1.6.10
#./configure
#make
#make install
库文件被安装到系统中。
3. 编译mg-samples-str-1.6.10
#cd /root/minigui/x86/mg-samples-str-1.6.10
#./configure
#make
在src 目录下可以看到生成的可执行程序。
4. 编译mde-1.6.10
#cd /root/minigui/x86/mde-1.6.10
#./configure
#make
在各个子目录里可以看到相应的可执行演示程序。
5. 编译qvfb-1.1
#cd /root/minigui/x86/qvfb-1.1
#./configure
#make
在qvfb 子目录下可以看到可执行的qvfb 程序,复制到系
统目录即可运行。如果在先前按照mini2440 的用户手册搭建
过Qt/Embedded 开发环境,可能无法编译成功,主要是因为
修改了/etc/ld.so.config 文件。最简单的方法就是把搭建
Qt/Embedded 开发环境时生成的qvfb 复制到/bin 目录,直接
就可以运行。这里“编译qvfb-1.1”这一步就可以省略掉了。
6. 在上位机上仿真MiniGUI应用程序
#qvfb –width 640 –height 480 &
(由于前面把qvfb 复制到了/bin 目录,所以可以直接运行。
后面的参数制定了qvfb 的显示尺寸,因为在MiniGUI。cfg
里qvfb 的尺寸默认为640*480,所以如果不指定这个值会无
法运行,&选项指名这个程序在后台执行。)
# cd /root/minigui/x86/ mg-samples-str-1.6.10/src
#export D_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
#./helloworld
如果一切顺利的话现在就可以在qvfb 上面看到MiniGUI
的界面了。还有mde 子目录里面的程序,也可以直接执行。
三、交叉编译图形库
1. 编译zlib库
由于zlib 库的configure 脚本不支持交叉编译选项,所以
我们只好使用符号链接把gcc 指向我们的交叉编译器armlinux-
gcc,在编译完后再改回来即可。
A. 把gcc指向我们的交叉编译器arm-linux-gcc
# cd /usr/bin
# mv gcc gcc_back
(备份gcc)
# ln -s /usr/local/arm/3.4.1/bin/arm-linux-gcc ./gcc
(创建gcc 到arm-linux-gcc 的符号连接)
# mv ld ld_back
(备份ld)
# ln -s /usr/local/arm/3.4.1/bin/arm-linux-ld ./ld
(创建ld 到arm-linux-ld 的符号连接)
B. 交叉编译zlib库
#cd /root/minigui/arm/zlib-1.2.5
#./configure --prefix=/usr/local/arm/4.3.2/arm-linux/ --
shared
(prefix 选项把zlib 库安装在/usr/local/arm/4.3.2/armlinux/)
(shared 说明生成共享库)
#make
#make install
C. 改回gcc
# cd /usr/bin
# rm gcc
(删除gcc 到arm-linux-gcc 的符号连接)
# mv gcc_back gcc
(还原gcc)
# rm ld
(删除ld 到arm-linux-ld 的符号连接)
# mv ld_back ld
(还原ld)
2. 编译png库
这个是用来显示png 图形的,MiniGUI 里很多图都是
png 的,如果没有这个库,你的MiniGUI 将无法正常工作。
由于libpng 不提供有效的configure 脚本,所以只好自己动
手改写Makefile 文件了。
A. 改写Makefile
#cd /root/minigui/arm/libpng-1.0.10rc1/
# cp scripts/makefile.linux Makefile
(把Scripts 下的一个Makefile 拷出来自己动手改)
# vi Makefile
(自己动手改Makefile)
CC=arm-linux-gcc
prefix=/usr/local/arm/4.3.2/arm-linux
ZLIBLIB=/usr/local/arm/4.3.2/arm-linux/lib
ZLIBINC=/usr/local/arm/4.3.2/arm-linux/include
(保存)
B. 编译安装
# make
# make install
3. 编译jpeg库
由于jpeg 库的configure 文件设计的有问题,得先用gcc
编译一个dummy.c 的文件,然后才能后面编译,不然的话就
会出现libtool 找不到之类的错误。所以先本机编译,然后清
除后,最后交叉编译即可解决这个问题。
A. 本机编译jpeg库
# cd /root/minigui/arm/jpeg-6b
# ./configure --enable-shared --enable-static
# make
# make clean
B. 交叉编译jpeg库
# ./configure --prefix=/usr/local/arm/4.3.2/arm-linux/
CC=arm-linux-gcc --enable-shared --enable-static
# make
# mkdir –p /usr/local/arm/4.3.2/arm-linux/man/man1
(安装前需要在arm-linux 下建个目录,不然安装会出错)
# make install
4. 编译popt
# cd /root/minigui/arm/popt-1.7
# ./configure --prefix=/usr/local/arm/4.3.2/arm-linux/ --
host=arm-linux --enable-shared --enable-static
# make
# make install
5. 编译libttf库
libttf 库是TrueType 字体的支持库,当然可以支持也可以
不支持,这个库只能全手动安装和编译,先建立一个目录来
存放其有用的或者说是我们所用到的库的源文件。
A. 复制源文件
#mkdir -p /root/minigui/arm/libttf/extend
#cd /root/minigui/arm/
#cp freetype-1.3.1/lib/* freetype-1.3.1/lib/arch/ansi/* libtt
f/
#cp freetype-1.3.1/lib/extend/* libttf/extend/
B. 交叉编译
#cd libttf
#arm-linux-gcc -c -fPIC -O2 freetype.c
(这个C 源文件包括了其它所有的.c 文件)
#arm-linux-gcc -c -fPIC -O2 -I./ extend/*.c
(把extend 下所有的.c 文件全部编译)
#arm-linux-gcc --shared -o libttf.so *.o
(生成最后的动态链接库)
#cp libttf.so /usr/local/arm/4.3.2/arm-linux/lib
6. 编译libminigui
# cd /root/minigui/arm/libminigui-1.6.10
# ./configure \
--prefix=/root/minigui/arm/target \
--host=arm-linux \
--target=arm-linux \
--build=i386-linux \
--with-osname=linux \
--with-style=classic \
--with-targetname=fbcon \
--enable-autoial \
--enable-rbf16 \
--disable-vbfsupport \
CC=arm-linux-gcc
# make
# make install
(这样就会把交叉编译好的库文件和头文件安装在
/root/minigui/arm/target 目录)
#cp /root/minigui/arm/target/lib /*
/usr/local/arm/4.3.2/arm-linux/lib/
#cp /root/minigui/arm/target/include /*
/usr/local/arm/4.3.2/arm-linux/include/
(把交叉编译好的库文件和头文件复制到交叉编译器中,
便于使用)
7. 编译mg-samples
A. 修改配置文件
#cd /root/minigui/arm/mg-samples-1.6.10
修改configure 文件,
在文件的ac_ext=c前面加上交叉编译的工具
CC= arm-linux-gcc
CPP= arm-linux-cpp
LD= arm-linux-ld
AR= arm-linux-ar
RANLIB= arm-linux-ranlib
STRIP= arm-linux-strip
B. 配置
# ./configure --host=arm-linux --target=arm-linux
C. 修改src/Makefile
CC = arm-linux-gcc -I/usr/local/arm/4.3.2/arm-linux/include -L/usr/local/arm/4.3.2/arm-linux/lib
CFLAGS =-O2
LIBOBJS = -lminigui -lmgext -lm -lpthread
LIBS = -lminigui -lmgext -lm -lpthread
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -lminigui -lmgext –lm –lz –ljpeg -lpng -lpthread
D. 编译
# make
# make install
8. 编译mde
与编译mg-samples 方法相同。
四、部署图形库
1. 复制MiniGUI图形库到根文件系统
#cp /root/minigui/arm/target/lib/*
/root/minigui/arm/root_default/lib
2. 复制依赖库到根文件系统
#cp /usr/local/arm/4.3.2/arm-linux/lib/libjpeg*
/root/minigui/arm/root_default/lib
#cp /usr/local/arm/4.3.2/arm-linux/lib/libm*
/root/minigui/arm/root_default/lib
#cp /usr/local/arm/4.3.2/arm-linux/lib/libpng*
/root/minigui/arm/root_default/lib
#cp /usr/local/arm/4.3.2/arm-linux/lib/libpopt*
/root/minigui/arm/root_default/lib
#cp /usr/local/arm/4.3.2/arm-linux/lib/libttf*
/root/minigui/arm/root_default/lib
#cp /usr/local/arm/4.3.2/arm-linux/lib/libz*
/root/minigui/arm/root_default/lib
3. 缓存函数库
#cd /root/minigui/arm/root_default/etc
#vi ld.so.cfg
(添加)
/usr/local/lib
/usr/lib
/lib
(保存)
#ldconfig –r /root/minigui/arm/root_default
如果不这样做,在开发板上运行MiniGUI 应用程序时可能
会出现找不到库的情况。
4. 复制资源文件
#mkdir –p
/root/minigui/arm/root_default/usr/local/lib/minigui
#cp /usr/local/lib/minigui/res
/root/minigui/arm/root_default/usr/local/lib/minigui –r
(MiniGUI 应用程序在运行时可能会用到的一些位图,光
标等资源文件。)
5. 复制MiniGUI.cfg到根文件系统
#cp /root/minigui/arm/target/etc/MiniGUI.cfg
/root/minigui/arm/root_default/usr/local/etc
(这是MiniGUI 运行时配置文件,在MiniGUI 应用程序运行时会用到。)
6. 修改配置文件
#cd /root/minigui/arm/root_default/usr/local/etc
#vi MiniGUI.cfg
(修改)
[system]
gal_engine=fbcon
(设置图形引擎为帧缓冲控制台fbcon)
ial_engine=dummy
(设置输入引擎为控制台)
mdev=/dev/event0
(设置鼠标输入设备)
mtype=none
(设置输入法)
[fbcon]
Defaultmode=240x320-16bpp
(保存)
7. 修改启动脚本
#cd /root/minigui/arm/root_default/etc/init.d
#vi rcS
(在最后添加如下内容)
/bin/ln –s /dev/vc/0 /dev/tty0
(保存)
否则会出现如下问题:
NEWGAL>FBCON: Can't open /dev/tty0: No such file or
directory
NEWGAL: Set video mode failure.
InitGUI: Can not initialize graphics engine!
若出现
ln: /dev/tty0: File exists
不用理会,说明已经存在
8. nfs启动根文件系统
#gedit /etc/exports
内容为:
/opt/FriendlyARM/mini2440/roots_minigui/ *(rw,sync,no_root_squash)
/opt/FriendlyARM/mini2440/rootfs_qtopia_qt4/ *(rw,sync,no_root_squash)
备注:我的roots_minigui是重新解压rootfs_qtopia_qt4-20100816.tar.gz生成的。
注销再登陆
打开minicom
开发板上电进入vivi,
如下:
Boot the system
[s] Set the boot parameters
Backup NAND Flash to HOST through USB(upload)
[r] Restore NAND Flash from HOST through USB
[q] Goto shell of vivi
Version: 1026-2K
Enter your selection: q
Supervivi> param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.1
68.1.65:/opt/FriendlyARM/mini2440/roots_minigui ip=192.168.1.230:192.168.1.65:19
2.168.1.65:255.255.255.0:sbc2440.arm9.net:eth0:off"
Change linux command line to "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.65
:/opt/FriendlyARM/mini2440/roots_minigui ip=192.168.1.230:192.168.1.65:192.168.1
.65:255.255.255.0:sbc2440.arm9.net:eth0:off"
Supervivi>boot
9.执行MiniGUI应用程序
将/root/minigui/arm/mg-samples-1.6.10/src下的可执行程序copy至跟系统下,位置自己定,我是放在/opt/FriendlyARM/mini2440/roots_minigui/usr/local/minigui_code下
返回minicom,
[root@FriendlyARM /]# cd /usr/local/minigui_code/
[root@FriendlyARM minigui_code]# ls
button          capture         helloworld1
button1         helloworld      ts_harvest.out
[root@FriendlyARM minigui_code]#
先ps下kill qpe的进程
在执行./helloworld
如果一切顺利,就可以看到helloworld 的MiniGUI 图形界面了。



10. 编写MiniGUI应用程序
#cd /root/minigui/arm
#mkdir helloworld
#cd helloworld
#cp ../ mg-samples-1.6.10/src/helloworld.c .
(复制源文件)
#vi Makefile
(编写Makefile,添加内容如下:)
TARGET=helloworld
CROSS_PATH=/usr/local/arm/4.3.2/arm-linux
#制定交叉编译函数库的位置
helloworld:$(TARGET).c
arm-linux-gcc -o $(TARGET) $(TARGET).c \
-L$(CROSS_PATH)/lib \
-I$(CROSS_PATH)/include \
-lpng -lminigui -lz –lpthread
#-L 选项后添加库文件路径,-I 选项后添加头文件搜索路
#径,后面的-lpng -lminigui -lz –lpthread 分别指名了编译
#时所依赖的函数库,如果使用了MiniGUI 的扩展功能,
#还要添加-lmgext。
clean :
rm $(TARGET) *.o -rf
(保存)
#make
把生成的helloworld 下载到开发板上执行,会发现和前面
的结果一样,这里只是为了说明如何编译自己编写的应用程
序,具体的编程方法参考MiniGUI 的用户手册,上面写的已
经十分详尽。


到此还有个问题,就是光标不能移动和点击!!
1、根据http://apps.hi.baidu.com/share/detail/10827924这个帖子的方法,有将光标激活成功!
2、晚上还有其他方法我一直试验不成功!!哎
用第一种方法的结果是:光标点击不能触发事件,要光标离开位置才能触发事件!如图为运行./button程序
  
点击到changsha…..,但没有触发焦点,相当于鼠标左键按下没有放开!!
  
光标移到其他地方,事件产生!
  
移到OK按钮,不会关闭窗口,要再次移动才会关闭窗口!
这个问题有点头大,搞了两天,研究了下tlib程序,还是没搞出来,今天星期五,先放下先,开始应用程序编写学习!
有知道的麻烦告知下,谢谢!
附件: minigui-1.6.10在mini2440上的移植.doc.zip (32 K) 下载次数:78
大笑笑大
级别: 骑士
UID: 25314
精华: 8
发帖: 184
金钱: 1320 两
威望: 264 点
综合积分: 528 分
注册时间: 2010-07-22
最后登录: 2014-10-11
1楼  发表于: 2010-09-10 17:00
求高手和解决过的赐教下,谢谢咯
级别: 新手上路
UID: 30327
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2010-10-14
最后登录: 2010-10-24
2楼  发表于: 2010-10-18 21:06
LZ还在吗。。。。想求助几个问题。。。。
级别: 新手上路
UID: 2468
精华: 0
发帖: 16
金钱: 115 两
威望: 16 点
综合积分: 32 分
注册时间: 2008-11-19
最后登录: 2012-12-03
3楼  发表于: 2010-12-16 13:59
有兄弟发了一个关于  小分析->minigui+tslib的触摸屏输入引擎毛病  的帖可能有用,你看看
级别: 新手上路
UID: 63177
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2012-02-15
最后登录: 2012-02-18
4楼  发表于: 2012-02-15 16:59
我也遇到这样的问题,那个帖子却是能解决