注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

deisp的博客

 
 
 

日志

 
 

Ace of the ACES: MiniGUI配置攻略  

2008-07-13 21:12:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
6月1日
MiniGUI配置攻略

这么写的话好像现在目标就明确了似的等等,想一下,好像有点眉目但是又不太确定总之,已经确定Linux是自己学习大方向了

从上一次的日期来看已经有一个半月了在这期间,熟悉Linux操作系统的任务基本完成,对其中一些较深入的东西也有了一定的理解Windows和Linux的各有所长,对比它们的优缺点,可以加深对操作系统各个方面的理解比如文件系统,熟悉Windows的人都知道,从Dos时代以来,C: D:等盘符就早已深入人心;而Linux/Unix则大相径庭在Linux中,文件系统是一棵树而非Windows那样的森林不管怎样进行分区有多少个分区,所有的分区都是被挂载在一个目录树的结构上,而Windows的结构则像是每个逻辑盘都是一棵独立的目录树在比如文件的权限问题,Linux继承Unix的优良传统,每个文件/目录都有一个9位的2进制数来代表其权限:头3位代表建立者自身,中间3位代表与建立者同一组的用户,最后三位代表其他用户;每3位的每个数从左到右依次代表可读可写和可执行这样系统管理员便可以有效地管理系统上每个用户的访问权限范围

关键字:如题

前端时间俱乐部内部有一次讲座,请一位研一的师兄来讲讲他在微软作实习生的见闻和经历我觉得他最后谈到的学些什么对自己触动挺大的那时我一心想做些实用的东西出来,像什么Win32下的应用程序漂亮的图形界面,对课堂上的东西(计算机组成原理等)基础课一度觉得没啥意思,学了没啥用,又不能帮助搞开发但是当我听到师兄讲起开发和研发两个词的时候才发现自己是多么幼稚!何谓开发,看看满大街的计算机软件工程师培训广告就知道了,什么叫3个月学成Java软件工程师等等乱其八糟的东西,不得不让人感到搞开发的门槛是如此之低啊 也正因为如此,才体现出研发的高人一等,学习一个IDE开发东西是如此之简单,但试想一下研究出一套行之有效的计算机语言呢?优化一个语言的编译器呢?或者说分析一个计算机体系的优劣呢?这显然不是几个月之内就可以速成的这也就是那位师兄提到的为什么外面的速成班没有教计算机体系结构,没有教汇编语言,没有教编译原理的原因了,因为这些东西是不可能速成的!必须要有扎实的计算机基础才行冰冻三日非一日之寒啊软件学院和计算机学院的差别也就在此处

关键字:Intel开发板Linux 嵌入式系统 交叉编译 MiniGUI Windowsx.h

从3月份开始就接手一个Linux嵌入式系统上的开发工作这个项目本来是我们俱乐部大四和大三的几个师兄在作,去年的暑假他们在这个系统下开发的基于无线射频标识(RFID)技术的物流管理系统参加全国比赛获得三等奖这个比赛是由Intel公司赞助的,每两年一次,由于是在暑假的缘故,只能是当时大三的参加,而我现在大二正好赶上这个时机,当然不能错过了

前期的工作是熟悉这套系统,至于参赛的具体课题则待定由于是Intel赞助的,自然开发板也由Intel提供,名字叫Intel Sitsang/PAX255从大四一师兄手上接过这个开发板的时候,第一感觉就是好cool的电路板啊!的确是块电路板,大部分线路都暴露在外面,上下用两个塑料板固定起来,内嵌一个触摸屏整个大概是20cm*15cm*7cm,别看它小,但是五脏俱全,什么网卡声卡USB接口甚至红外线都一应俱全,据说还能支持无限网络技术,简直就是一个微型的PC机嘛!

但是在上面开发程序,特别是图形界面的程序就远没有其灵巧的外观所显示的那么轻松了首先,目标板的指令系统也PC机是不同的,所以,用普通的8x86编译器(比如gcc)生成的可执行文件在目标板上就不能执行,即使是都采用一个版本的内核的Linux因此就需要按目标板所用的系统使用相应的编译器生成目标代码理论上说可以在目标板上安装自身的C/C++编译器及相应的库文件,将源代码传到目标板上进行编译但是既然身为嵌入式操作系统,顾名思义,系统本身所在的环境通常有一定的局限性,比如存储空间小,CPU的处理速度慢等等所以直接目标板上进行编译是不合适的解决的办法就是在PC机上开发源程序,并在PC上运行并调试,保证源代码级的正确性通过之后,再利用专用的编译工具,在PC上生成目标板可以执行的代码,下载到目标板上就可以运行了以上就是我对这种称为交叉编译的理解,由于还没学编译原理,可能还欠深入

这样的步骤完成之后,普通的字符程序就没有问题了但是图形界面的程序本身是需要一定的库支持的,在目标板上执行也不例外他们上次采用的图形库是Qt/Embody,但是有诸多的不便和缺点比如Qt是基于C++的,不可避免会产生代码臃肿的问题,etc. 这次他们决定采用一种新的图形库MiniGUI来重写程序MiniGUI是国内一家公司基于Linux开发的嵌入式系统图形库,可以运行在多种嵌入式系统上,Intel这款板子用的StrongARMS就是其中所支持的一例官方文档上说了MiniGUI很多好处,但是我认为最吸引我的地方是MiniGUI的整体代码风格和体系是兼容Win32的!这样的好处就像雨轩所说的一举两得Win32下的编程是非常热门的,看看Windows所占有的市场分额就知道了这样子学MiniGUI的API就不会觉得浪费,可以一举把Win32编程也学了,了了我一大心愿!再说市场上那么多讲解Win32编程的书中的代码只要更改少许就可以立即放到MiniGUI中编译通过,大大扩充了资料来源很典型的一个例子就是,微软为Win32下的编程开发了windowsx.h,这个头文件包含了大量的宏定义(Macro),这些宏被设计用来处理Windows的消息,可以有效改善以往代码的可阅读性因为窗体处理函数要处理大量的Windows消息,不可避免地会产生十分冗长的switch-case语句,严重的影响了程序的阅读Windows.h把这些swith-case分别封装成一个个短小的宏,并使具体消息处理过程独立于主switch之外,使代码的可阅读性大为改观(Windowsx.h的详细讲解参看SAMS公司出版的Teach Yourself Windows 95 Programming in 21 Days)但是MiniGUI的头文件中并不包含这个优雅的设计于是本人分析MiniGUI和Win32代码的差异,发现在消息处理过程中只有唯一一个差别就是消息的定义Win32是WM_打头,而前者是以MSG_打头于是很容易将这个头文件移植成MiniGUI可以接受的格式而我确实是这么做的而且在目标板上运行也通过了小有点成就感,哈哈哈

4.3 Building the Environment of Cross Compile for MiniGUI

其实整个过程到现在,编写程序代码并不苦难,难点也不多最困难的地方在于在PC机上建立交叉编译环境和MiniGUI的开发环境及交叉编译环境虽说手头上有官方文档,但是其中也有令人恼火的错误而且这方面我一点基础一点概念都没有,可以说是白手起家,直到今天晚上之前一度非常郁闷

Learn where error occurs, improve where mistake happens.

Learn where error occurs, improve where mistake happens.

这个过程完全按照Manual中的步骤进行建立时一切正常,可是编译它提供的第一个例子就出问题了,不论如何都没法通过后来上他们的官方论坛上查询了才知道,免费下载的版本中某些头文件并不包含,而这份Manual又是基于商业版的,其中的例子也是学要商业版中提供的头文件才能编译无语了

根据论坛上的提示,找到一个供免费版使用的示例,这次编译通过了接下来要提供MiniGUI的运行环境,一个工具叫qvfb,按照文档上的说法也是没法通过,后来我发现其中一个同名的目录中有可执行的文件,居然可以运行,考,那还干吗费心去编译它,直接用就行了其间尝试了另外一种方法,打开了Linux对Framebuffer的支持Ok, 第一步完成

这步比较顺利不过在测试时遇到点问题,是关于目标板的由于采用网络进行文件下载,而目标板的网卡有个毛病是对干扰非常敏感,在插上交流电源时几乎无法进行网络传输,这是我一开始完全没有想到于是我试遍了所有可能的文件传输方法,ftp, nfs等,都是现学现用的解决了文件传输的问题后,测试还是比较顺利,大概是这块板子上应经建立好了字符界面下的运行环境了吧

这是所有步骤中最头疼的一步了!源于MiniGUI文档中一个致命的错误,使第一个操作就无法进行为这个问题我冥思苦想了一个晚上(昨天),今天上午突然有了灵感:文档上的命令是

CC=arm-linux-gcc ./configure target=arm-linux prefix=/usr/local/arm-linux/arm-linux

这个命令只是指出了目标为arm-linux,而参看configure的帮助信息发现还有两个参数build, --host又是一番冥思,经过若干失败之后发现正确的命令应该是

CC=arm-linux-gcc ./configure target=arm-linux prefix=/usr/local/arm-linux/arm-linux build=arm-linux host=i686-pc-linux-gnu

这次算是通过configure了,紧接着make, make install. Ok pass.

用arm-linux-gcc工具交叉编译一个最简单的图形界面程序(指含一个MessageBox函数),

arm-linux-gcc -o hello test.c lminigui -lpthread

将其缺少的库从PC上拷贝过去,还是不行还来问了师兄,原来库有一个默认的搜索路径设置完搜索路径(/etc/ld.so.conf),运行,缺少MiniGUI的配置文件,赶紧再拷过去,运行,缺少资源文件,没辙,拷吧,运行-----------哇,居然开始有现实了,噢,我亲爱的MessageBox!!!!

当然心情的激动现在仍然记忆犹新不过好景不长,虽然可以运行了,但是输入是个问题------程序没法接受输入!在分析文档,尝试,键盘弄出来了,但是鼠标动不了这个地方特殊之处在于MiniGUI的配置文件中要指出鼠标的设备名称,但是目标板是采用的触摸屏,并没有鼠标,ft 再来研究一下硬件文档,原来/dev/input下有几个设备文件可能会对应鼠标,按文档上说的event0~event3试过了都不行,这在郁闷中的时候突然眼睛一亮,这个目录下不是还有一个叫mice的文件吗?mice?那不就是mouse吗?!晕,找了半天的mouse居然常在这么个地方,真是·#%!改完之后的结果是屏幕上用触摸板可以移动鼠标了,但是定位极不准确,而且还没有点击的功能

以上就是到今天为止的进展情况总体上来说的进展还是比较快的,前后在一个星期左右吧,如果能把鼠标定位和点击的问题完全解决了,再把适当的库拷到目标板上,交叉编译环境就基本上建立好了剩下的工作就是用高级语言来实现图形界面了这块相对比较熟悉

若要添加评论,您必须使用 Windows Live ID 登录(HotmailMessenger 或 MSN 之类的 Microsoft 帐户) 登录
添加评论




引文来源  Ace of the ACES: MiniGUI配置攻略

----------------------------
一键转贴,快速捕捉生活精彩,赢每周好礼!查看活动首页>>

  评论这张
 
阅读(97)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017