我在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,执行
[Copy to clipboard] [ - ]
CODE:
make PREFIX=~/minitest/romfs install
将文件系统目录安装到romfs目录下,然后其他的操作按照minigui试验指导书做,这个过程中还要几点不一样的地方需要说明:
(1).在根文件下的/dev建立设备文件时候与指导书有所不同,具体的按照下面的建立:
[img][/img](2).inittab文件的第66行
[Copy to clipboard] [ - ]
CODE:
::askfirst:-/bin/sh
前面添加ttyAM0,否则启动后会提示无法打开tty(不是什么大碍,也不会影响使用,但看起来总是不爽),改后为
[Copy to clipboard] [ - ]
CODE:
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自动完成也要选上。
所有工作搞定后,可以执行如下命令
[Copy to clipboard] [ - ]
CODE:
genromfs -d romfs -f romfs.img
制做根文件系统镜像,更改skyeye.conf文件,将原来开启LCD的那行代码注释掉,重新写一行(为了和0.8.6的skyeye兼容),将文件镜像那一栏的size该为0x00800000,我本机的skyeye.conf内容如下:
[Copy to clipboard] [ - ]
CODE:
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
如果这一切都没有问题,就可以执行引导我们的系统了:
[Copy to clipboard] [ - ]
CODE:
skyeye vmlinux
target sim
load
run
好了,相信以上的步骤都是比较简单的,很多人都可以搞定,这里就不多说了,下面进入我认为是最难搞的一个阶段:移植minigui到skyeye,这里,我们分为两个阶段来进行:
第一个阶段,测试个最简单的helloworld的移植,看能否出来窗口;
第二个阶段,移植复杂的窗口程序(如果有项目的例子更好)
在进入这两个阶段之前,需要先配置minigui,下面是我的libminigui的配置文件build-ep7312:
[Copy to clipboard] [ - ]
CODE:
#!/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库配置的人,请告诉我一声,谢谢!)
执行上面的配置文件
[Copy to clipboard] [ - ]
CODE:
./build-ep7312
make
sudo make insall
同时把在mg-res里面的config.linux 的res的安装目录也改成/usr/local/arm/2.95.3/arm-linux/ ,执行
[Copy to clipboard] [ - ]
CODE:
sudo make install
编辑/etc/ld.so.conf文件添加一行
[Copy to clipboard] [ - ]
CODE:
/usr/local/arm/2.95.3/arm-linux/lib
执行
[Copy to clipboard] [ - ]
CODE:
sudo ldconfig
刷新库文件目录,这样就配置好了minigui的库。
为了测试这个库是否安装成功,我们开始编译helloworld例子程序。在用户目录下建立目录minitest/src 将minigui自带的例子程序里面的 helloworld.c 拷贝到其目录下,将里面的如下代码
[Copy to clipboard] [ - ]
CODE:
#ifdef _LITE_VERSION
SetDesktopRect(0, 0, 1024, 768
#endif
更改为:
[Copy to clipboard] [ - ]
CODE:
#ifdef _LITE_VERSION
SetDesktopRect(0, 0, 320, 240);
#endif
执行:
[Copy to clipboard] [ - ]
CODE:
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配置改为:
[Copy to clipboard] [ - ]
CODE:
[fbcon]
defaultmode=320x240-8bpp
然后将我们刚才编译好的helloworld程序拷贝到bin/目录下,重新打包生成romfs.img文件,运行skyeye,进入系统后执行
[Copy to clipboard] [ - ]
CODE:
./bin/hellowolrd
如果前面配置正确的话,会成功看到lcd里面出来一个窗口,如图所示:
[img][/img]针对这个移植有有要补充下:
minigui我们选择的是静态编译,我开始也是安装minigui指导书上说的动态编译,可以放到文件系统里面,启动执行后,总是提示:
./bin/helloworld No such file,改了权限也没用,后来怀疑是没有找到该文件运行需要的动态库,于是我将其依赖的库拷到lib/下面,还建立一个指向其的链接(这都是照指导书上做的),最后还是不行,于是我就估计可能是选的这个内核对动态编译的文件不感冒,所以改成了静态编译。
如果你能够看到上面的界面的话,那么恭喜你,你已经掌握了本实验中的8成的知识了,你也在本实验中基本成功了,你下面要做的就是,把你自己写的minigui程序(记住:一定要在pc环境下编译通过的)移植到skyeye上面的,当然硬件平台目前只能是ep7312的,其他的我没有试过。
我下面的工作是将项目中写的minigui程序移植到了skyeye下面,这里有个技巧与大家分享下:那就是在本机上如果有图片需要加载的话,你可以用相对路径,比如"bkgnd.bmp",可是在嵌入式linux里面似乎不行,调试了几次总是打不开bmp文件,后来把路径改成绝对路径“/bin/autopro/ bkgnd.bmp”就可以了,下面是我最终的GUI界面:
[img][/img]
[img][/img]以上是我移植minigui到skyeye上的一点经验,第一次写这种东西,可能语言组织的不太好。
我的邮箱是chhou1983@gmail.com,欢迎搞嵌入成的朋友一起来交流经验!!

最新回复
fujinggui (2008-10-05 15:44:55)
jxsd0915 (2008-11-02 22:14:40)
xiejunyang (2008-11-29 12:19:47)
wang810 (2008-12-02 18:30:06)
tkwin (2008-12-11 05:00:32)
yaerna (2009-1-05 09:18:03)
菩提玉是个已过30的少妇,因为母亲信佛给她取了此名,在学生时代她一直是朵校花,高贵清雅、纯洁灵动,同学们都叫她菩提仙子。
玉的生活一直很顺利,大学、工作、结婚、生子,一般女人想要零陈的小博客的她都有了。可玉有一个别人不知道的心结----中学时代曾有过一个让她心仪的男生,他们是同桌,有过含蓄的互表爱慕,有过快乐的青涩岁月,后来他们没有道别就分开了而且分的很远很远......
男生叫骁,帅气、忧郁像极了陈百强。玉喜欢偷偷地欣赏他,就象看一幅动人的画。他们一起看过电影、喝过咖啡,牵过手。骁也曾羞涩地表白过,玉笑笑什么也没说,可心底觉得自己很幸福。
大学玉和骁到了不同的城市读书,这时玉的身边走来了钧,钧爱玉爱到了极至,玉的生活里再互联网也装不下别的,从此失去了和骁的一切联系,这些日子里发生过什么玉不知道。
这一别就是十六年,人海两茫茫。三十多岁的玉也说不清为什么,这些年来一直会在失意的时候想起骁,想知道他的情况。可通过同学和朋友都试过了,骁象人间蒸发了一样,与所有的人失去了联系,唯一的线索就是他后来留在了上海。
玉的工作是和电脑打交道,大概已经有三年了,她一直疯狂的在QQ里寻找骁,好友里加的除了工作Q,几乎全是上海的好友。这样做她说不清是为什么,每当坐在南阳市金帆工程咖啡厅时都会想起骁,依旧是当年的样子,那么帅气、那么温润,玉可以记起骁所有的爱好,最爱唱的歌,最爱吃的零食,最喜欢的颜色,最喜欢她的哪一根手指......
单位只要是去上海的差事,玉都会抢过来。每次办完事就会多待几天,在上海的街头和人群中逗留,等待奇迹地发生,等待上天对她的眷顾。玉已经北京生活资讯不知道如今的骁是胖是瘦,她寻找的依旧是当年那个英俊的骁。玉会独自坐在咖啡厅临街的位置上直到很晚,玉也会整晚在酒吧里喝着苦酒,可她与骁依旧无缘。
越是找不到,那种思念也就越强烈。玉开始失眠,骁会经常出现在她的梦里,梦境里骁总是那么绝望,每次醒来玉都心惊肉跳。
玉下定决心要找到骁,只有见到他才能放下这颗悬着的心,不管他现在在做什么,不管他现在过的有多好,只有见到他,玉的心里才会踏实。
玉找到骁和他父母16年北京修德浩电脑科技前住的地方,问遍了几乎所有的邻居。终于老天被感动了,给了玉一点线索,有位阿姨也是上海人,以前骁的父母回上海经常帮阿姨给家人带些东西,有一个骁父母在上海的电话,但这几年一直没有再打过,也不知号码变了没有。阿姨从一个小本子上把号码抄给了玉,玉终于有了新的希望--骁父母的电话。
晚上玉告诉丈夫自己加班,把自己锁在办公室里,转椅来来回回不知转了多少圈,手心里攥着那号码冒汗,打过去会是什么结果,玉心里突然害怕了…自己这样做合适吗?自己怎么以前从来就没想过这些,也许骁早已把她遗忘,正过着自己平静幸福的生活,有着自己的爱妻和孩子。不过自己从来就没有过什么非分之想,只是对骁有种说不清的不安,玉挣扎着做着最后的思想斗争,终于拿起了话筒。
“喂,你好。”接电话的是位阿姨。
“哦,是骁的家吗?”玉颤声问道。
“是,您是哪位?”玉心里一喜,是骁的家,就要找到她的骁了。
“哦,我是骁在X市的同学,很多年没见到他了,这些年几次同学聚会也没他的消息,最近我出差要去上海,想去看看他。”玉一口气说了很多,自己也不知道为什么。
“哦,您是?”电话那边疑惑地问。
“哦,我是菩提玉。”
“什么,菩提玉?”阿姨的声音有点打颤。
“哦,对,阿姨,骁现在和您在一起吗?”
“哦,他不在。”玉一听,好失望。
“那您可以给我他的电话吗?”玉急切地问。
“哦,这样吧,留你的电话,让他回头打给你。”玉再一次失望。
“哦,那就这样吧,再见。嘟嘟…”电话那头已经挂断了。
玉拿着电话足足愣了有五分钟,这是怎么了,一个普通的同学,难道连电话号码都不能告吗?还是有什么其它原因?这一夜,玉翻来覆去怎么也睡不着,那熟悉的梦境又一次出现,骁痛苦地挣扎,她无能为力。
一周后,上海街头。玉穿着骁最喜欢的绣花中式盘扣上衣,一头褐色卷发,前额处斜卡着一只小蜻蜓,这是学生时代骁送的,玉一直珍藏着。上海的夜是那样璀璨寂静,妩媚的令人陶醉, 玉却无心看这风景,她心里在盘算着怎么和骁的父母询问骁的情况。
朋友们帮忙,通过电信公司查到了骁父母居住的大致街区,玉就站在这附近拨通了电话。
“喂,您好!我是骁的老同学,他在吗?”
“哦,他出国了。”
“什么,出国了。上一次打电话没听您说起啊?”
“阿姨,您可以告诉我他的电话吗?”
“你是菩提玉吗?”
“恩,是。”
“哎,他…”
“我已经到了街口,能让我上楼看看您二老吗?好不容易来上海一趟。”
“啊,哦,孩子你在上海?”
“是的,我就在附近,能告诉我门牌号吗?”
“.......”电话那端一直沉默。
“阿姨,我办完事就回X市了,只想看望一下骁和你们。我是玉,您一点儿也想不起来吗?上学是经常去你们家玩......”
“哦,#座##365,你上来吧”
“啊,好!”玉的心脏激动的快要承受不了了。
玉终于问到了,终于离骁近在咫尺,玉难掩激动的心情,急冲冲朝骁的父母家跑去,站在大门前迟疑了一下,还是敲了,门应声开了。开门的是阿姨,骁的妈妈,玉还能认的出来。“阿姨您好,这些年身体还好吧?还记得我吗?我是玉,小时候常去您家玩。”玉礼貌地问着,愣在那的老人这才想起让玉进屋,玉发现骁妈妈的眼里竟然充满了泪水。玉的心里一紧,拉着老人的手没敢问什么,但直觉告诉她骁就在这里,没有出国,没有不在家。
寒暄了半天,玉还是忍不住,急切地问:“骁这些年为什么和所有的同学失去了联系?上学的时候他那么优秀,现在在做什么啊?您抱孙子了吧?......”
骁妈妈再也控制不住,失声哭了起来,说:“骁这些年一直很苦,他太要强了所以才和所有以前的朋友断了联系,大学二年级的一个暑假,他跑到一家外企玩具工厂打工,由于一场事故车间失火了,骁救了好几个女工出来,但他由于吸入了太多有毒的气体,后来一直昏迷,导致了肾脏衰竭,一直靠做血液透析维持生命。就在今年初的一个早晨突然心脏衰竭,走了。”
“走了”,走了是什么意思?玉的心被纠扯着、撕裂着,那痛深入骨髓,快要晕过去了一样。这些年她以为是骁把自己忘了,万万没想到,会是骁出事了。那些梦出现的时候她就应该来找他而不是等到现在,玉在心里怨恨着自己,她的骁,她这么多年来忘不掉的骁就这样走了,谁也没见,谁也不知道的走了,怎么可能?十六年前的那一次再见竟然成了永别,玉怎么能承受的起啊! 心仿佛裂成了碎片,泪如断线的珍珠落了下来。
“骁这些年里念叨最多的就是你,玉。”骁妈妈抹着眼泪说。
“骁总说他好想娶你,从小他就喜欢你。可惜他没机会和你讲,他说过,失去一切联系也许是让你忘掉他的最好办法。他并不确定你有多爱他,可他爱你,不想你看到他那个样子。他总说:“曾经想要给你一生的幸福,可再也做不到了,那就让更好的人去爱你吧”。玉听着骁妈妈在说,几乎晕厥 。
“这是骁的日记,他说也许有机会,就交给你。” 骁妈妈说着把一个精致的雕花锡银盒子放在了玉的手里。
“孩子,菩提玉这个名字是骁这些年提到做多的,也只有提到曾经和你在一起的时光时他才是快乐的,我能看到他想起你时的幸福……有机会去看看他吧,看到你还这样惦记他,泉下有知他一定会很开心的!”
骁妈妈又说了些什么,玉已经听不到了,怎么离开骁家的玉已经不清楚了,她站在黄浦江边失声痛哭着,那声音肝肠寸断、撕心裂肺。她最终没有见到她的骁,所有的记忆定格在了十六年前。那梦境开始的几年也是骁病情开始恶化的几年,冥冥中他在寻找他的玉,他想见到他的玉,他的灵魂托梦给他的玉。可......这是玉最不能原谅自己的,她怀里揣着那本日记,就仿佛骁轻轻拥着她,她不敢动,怕那感觉失去……她开始恨自己。
接连几个夜晚在酒吧里,都能看到一个眉眼动人却失魂落魄的女人,喝的越多她的心越痛,想醉她却醉不了,那痛楚、那遗憾、那悔恨、那心底的一切她挥之不去。即使烂醉她的心还在痛,仿佛刀割。
她躺在酒店的软床上终于睡着了,一缕阳光透过窗帘洒进屋里,她睁开眼看到了她的骁,温润如玉的骁,微笑着拉着她的双手说:“你还是那么固执,固执地让人怜爱。能放的就放下吧,搁在心里太累了,好好的生活,为了你的骁,也为了钧,别让爱你的人担忧。”她不想听,把自己的头依偎在骁的肩上,紧紧的拉着他的手,不放,那怕是到了下一世她再也不想放开……
几天后上海--天马山公墓,一袭黑色对开襟立领提花上衣的玉,长发上斜卡着那只轻盈的蜻蜓,捧着一束风信子站在骁的墓碑前......
这正是
十年生死两茫茫。
不思量,自难忘。
千里孤坟,无处话凄凉。
纵使相逢应不识,尘满面、鬓如霜。
夜来幽梦忽还乡。
小轩窗,正梳妆。
相顾无言,惟有泪千行。
料得年年肠断处:明月夜,短松冈。
后记:骁 -- 上海交大92届高才生
94年发生事故导致肾脏衰竭
血液透析6年后
2001年进行肾脏移植手术
2003年合并症发生
2005进入病灶晚期
2007年离世
菩提玉-- 读完骁留下的日记,去墓地看望了骁,虽然依骁遗言她要为他好好活着,可因自己没能早些去寻找骁而悔恨成疾,染上吸烟的恶习。
钧 -- 后来知道一切,并没有怪玉,反而更加疼爱玉,一直在帮助玉忘掉这段回忆。