hoarywolf 发表于 2007-12-4 18:08:42

[分享]我在skyeye下成功移植minigui的经历

经过几天的痛苦挣扎,我终于在skyeye下看到了我们项目的开发的软件的GUI界面,秉承GPL精神,在此将我这几天移植的经历简述一下。
所用试验平台:
skyeye 0.8.6 + testsuit 2.3 + minigui 1.3.3 + busybox 1.1.3
虚拟硬件平台为EP7312
解释下:
1. 为什么用 0.8.6,因为刚开始我用最近的版本,发现编译出来的ep7312的armlinux内核没法跑,总是停留在一个set start addrees to 。。。的地方就不动了,这个问题搞我很恼火,网上也没人给出解决的办法,于是我就是索性退回去,选择了在minigui指导书上推荐的0.8.6版本。奇怪的是,我的内核竟然在这个版本上面可以跑,于是我就一直用这个旧的版本。(后面,实际上,我自己的内核由于遇到添加LCD和TS驱动无法编译的问题,就直接拿了testsuit中的ep7312的内核,该内核与我的配置是一致的)
2.为什么用busybox,干嘛不直接更改testsuit中现成的romfs,我开始就是这个方法,可是我把它挂载在一个目录,然后把该目录下所有东西拷到另一个目录,再将该目录打包成romfs.img,可以同样的一套根文件系统,我用这个新的img去引导,系统起来后,却总是提示找不到console,很是邪门。于是我就索性按照minigui指导书上的用了busybox,我选的是 1.1.3,不要选1.00, bug太多。
3.第一次配置时,最好去minigui网站上下一本学习指导,可以对照的写一些配置文件。

下面切入正题………………
第一步:安装skyeye,网上有0.8.6的下载,注意这个版本的安装方法和新版的不同,具体的看它的readme。

第二步:准备linux系统,安装arm-linux交叉编译工具,去skyeye的网上下载linux-2.4.13-patched-for-EP7312以及armlinux4skyeye-v0.2.3,前者是armlinx内核源码,后者是针对minigui试验指导书上提到的ep7312的LCD和TS的驱动程序,在本试验中,我们也是选用的这个平台。

第三步:准备系统内核,我开始选择的是自己编译,后面发现一旦加入了虚拟终端和fb后,编译总是过不去,其实testsuit里面有一个带lcd支持的ep7312的内核,就在其根目录下的linux/ep7312/目录下,在用户目录下新建一个minitest的目录,将内核vmlinux,skyeye.conf拷贝到里面。

第四步:准备根文件系统,下载busybox 1.1.3,编译完后,在用户目录下建立目录minitest/romfs,执行make PREFIX=~/minitest/romfs install将文件系统目录安装到romfs目录下,然后其他的操作按照minigui试验指导书做,这个过程中还要几点不一样的地方需要说明:
(1).在根文件下的/dev建立设备文件时候与指导书有所不同,具体的按照下面的建立:

(2).inittab文件的第66行::askfirst:-/bin/sh前面添加ttyAM0,否则启动后会提示无法打开tty(不是什么大碍,也不会影响使用,但看起来总是不爽),改后为ttyAM0::askfirst:-/bin/sh。(3)在编译busybox时候在build options里面的CFLAGS option里面要添加你的armlinux的头文件目录,如-I/usr/src/armlinux/include/,否则在编译如mount这样一些命令的时候会报错。
(4)编译时候,ls,cat,mount,mkdir,umount,hostname这几个命令是必须选的,因为在启动rcS文件中会用到这些命令,shell的格式建议选ash,还有在shell选项中把tab自动完成也要选上。
所有工作搞定后,可以执行如下命令genromfs -d romfs -f romfs.img制做根文件系统镜像,更改skyeye.conf文件,将原来开启LCD的那行代码注释掉,重新写一行(为了和0.8.6的skyeye兼容),将文件镜像那一栏的size该为0x00800000,我本机的skyeye.conf内容如下:
cpu: arm720t

mach: ep7312

lcd: state=on <------这行自己加
mem_bank: map=M, type=R,addr=0x0, size=0xC0000
mem_bank: map=M, type=R,addr=0x000C0000, size=0x00800000, file=./romfs.img <----size大小要更改
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x01000000
mem_bank: map=I, type=RW, addr=0x80000000, size=0x00010000

如果这一切都没有问题,就可以执行引导我们的系统了:skyeye vmlinux
target sim
load
run好了,相信以上的步骤都是比较简单的,很多人都可以搞定,这里就不多说了,下面进入我认为是最难搞的一个阶段:移植minigui到skyeye,这里,我们分为两个阶段来进行:
第一个阶段,测试个最简单的helloworld的移植,看能否出来窗口;
第二个阶段,移植复杂的窗口程序(如果有项目的例子更好)

在进入这两个阶段之前,需要先配置minigui,下面是我的libminigui的配置文件build-ep7312:#!/bin/sh

rm config.cache config.status -f
CC=arm-linux-gcc \
CFLAGS=-I/home/wolf/embeded/linux-2.4.13/include/\
./configure --prefix=/usr/local/arm/2.95.3/arm-linux/\
--build=i686-linux\
--host=arm-unknown-linux \
--target=arm-unknown-linux \
--enable-static \
--disable-jpgsupport \
--disable-cursor \
--disable-micemoveable \
--disable-galqvfb \
--enable-nativegal \
--enable-mc68x328ial \ <-----此处的ial是针对testsuit的ep7312的,一定要选择
--enable-dummyial \
--disable-qvfbial \
--disable--nativeial \
--disable-latin9support \
--disable-big5support \
--disable-imegb2312 \
--disable-savebitmap \由于开始配置jpeg程序总是出错,有一次还把我的系统搞崩了,于是我关掉了jpeg支持(呵呵我就是这样的人,遇到困难不会面对,如果有搞定这个jpeg库配置的人,请告诉我一声,谢谢!)
执行上面的配置文件./build-ep7312
make
sudo make insall同时把在mg-res里面的config.linux 的res的安装目录也改成/usr/local/arm/2.95.3/arm-linux/ ,执行sudo make install编辑/etc/ld.so.conf文件添加一行/usr/local/arm/2.95.3/arm-linux/lib执行sudo ldconfig刷新库文件目录,这样就配置好了minigui的库。
为了测试这个库是否安装成功,我们开始编译helloworld例子程序。在用户目录下建立目录minitest/src 将minigui自带的例子程序里面的 helloworld.c 拷贝到其目录下,将里面的如下代码#ifdef _LITE_VERSION
    SetDesktopRect(0, 0, 1024, 768
#endif更改为:#ifdef _LITE_VERSION
    SetDesktopRect(0, 0, 320, 240);
#endif执行:arm-linux-gcc -O2 -o helloworld helloworld.c -lminigui -pthread -lm -static如果成功,则说明前面的libminigui配置成功。

下面配置在根文件系统里面的minigui配置和资源文件。
在minitest下建立目录tmp,将testsuit对于我们用的内核的根文件系统镜像挂载到这个目录下,然后将里面的etc/MiniGUI.cfg, ur/拷贝到romfs目录下,更改MiniGUI.cfg里面的fbcon配置改为:
defaultmode=320x240-8bpp然后将我们刚才编译好的helloworld程序拷贝到bin/目录下,重新打包生成romfs.img文件,运行skyeye,进入系统后执行./bin/hellowolrd如果前面配置正确的话,会成功看到lcd里面出来一个窗口,如图所示:


针对这个移植有有要补充下:
minigui我们选择的是静态编译,我开始也是安装minigui指导书上说的动态编译,可以放到文件系统里面,启动执行后,总是提示:
./bin/helloworld No such file,改了权限也没用,后来怀疑是没有找到该文件运行需要的动态库,于是我将其依赖的库拷到lib/下面,还建立一个指向其的链接(这都是照指导书上做的),最后还是不行,于是我就估计可能是选的这个内核对动态编译的文件不感冒,所以改成了静态编译。

如果你能够看到上面的界面的话,那么恭喜你,你已经掌握了本实验中的8成的知识了,你也在本实验中基本成功了,你下面要做的就是,把你自己写的minigui程序(记住:一定要在pc环境下编译通过的)移植到skyeye上面的,当然硬件平台目前只能是ep7312的,其他的我没有试过。

我下面的工作是将项目中写的minigui程序移植到了skyeye下面,这里有个技巧与大家分享下:那就是在本机上如果有图片需要加载的话,你可以用相对路径,比如"bkgnd.bmp",可是在嵌入式linux里面似乎不行,调试了几次总是打不开bmp文件,后来把路径改成绝对路径“/bin/autopro/ bkgnd.bmp”就可以了,下面是我最终的GUI界面:




以上是我移植minigui到skyeye上的一点经验,第一次写这种东西,可能语言组织的不太好。
我的邮箱是[email protected],欢迎搞嵌入成的朋友一起来交流经验!!

[ 本帖最后由 hoarywolf 于 2007-12-5 08:59 编辑 ]

hoarywolf 发表于 2007-12-4 18:09:31

占了个坐准备发帖子用的,不想没有用上,浪费了自己的沙发,汗!

[ 本帖最后由 hoarywolf 于 2007-12-4 21:50 编辑 ]

lvcoffee 发表于 2007-12-6 16:57:26

去skyeye的网上下载linux-2.4.13-patched-for-EP7312以及armlinux4skyeye-v0.2.3

请问这是到哪里下啊,没找到喔,麻烦把地址帖一下

hoarywolf 发表于 2007-12-6 20:55:06

http://gro.clinux.org/frs/?group_id=327&release_id=490

lvcoffee 发表于 2007-12-7 11:33:28

原来是这里啊

下下来了,来过这个网站很多次,竟然没发现.谢谢版主

bshawk 发表于 2007-12-17 17:36:31

GOOD, THANKS!~~~

duzhig 发表于 2007-12-19 07:05:42

楼主能给个文件系统吗 我也想试试但是编译glibc等太麻烦了先试试编译好的吧 你给给我一份吗谢谢
msn [email protected]
qq 11646301
mail [email protected]

albert198511 发表于 2008-3-4 12:29:25

这几天我都在按照您的步骤调试minigui,有很多问题,比如您在帖子中提到的“minigui学习指导”、busybox的配置、交叉编译环境的设置、各个安装包的具体安装路径等,都很模糊,感觉您在帖子中,有些要更改或者注意的问题都是在出现问题之后才写出来,而不是在问题出现前就改正。。。所以需要很多次的返工。。。。

       想恳请您是否可以从机器的运行环境开始,包括busybox、minigui、skyeye、交叉编译环境等所需的安装、配置都按照顺序的写出来?需要更改的地方,在编译之前就给列出,可以吗?谢谢!o(∩_∩)o...

a3730463 发表于 2008-3-12 13:50:23

好贴~~狂顶要

ksh 发表于 2008-3-29 11:15:39

回复 #1 hoarywolf 的帖子

Could you sent your rootfs to my emailbox?That is very helpful for us.
[email protected]
Thanks

albert198511 发表于 2008-3-29 15:00:18

回复 #10 ksh 的帖子

您有halfyear大侠的常用联系方式吗? 可否告诉我一下,谢谢!
页: [1]
查看完整版本: [分享]我在skyeye下成功移植minigui的经历