[菜鸟修炼]移植ok210,ok6410的QT界面到FL2440开发板上



刚刚到飞凌嵌入式公司实习,经验不足,现在处于学习阶段,每天都有机会向大神请教,感觉幸福满满的,记录下学习的点滴,希望可以帮到跟我一样的小菜鸟,加油吧!!! 

首先移植GPRS。
第一步直接将飞凌OK210的GPRS编译好的放入到FL2440对应位置之后上电,点击图标出现N多个警告。如下:


 
是bin文件下的二进制代码因编译环境不同而不一样。

按照qtopia-free-2.2.0搭建手册和ok6410手册中的qtopia安装移植安装qtopia2.2.0环境,刚开始的尝试在Ubuntu 12.04上安装,出现n多个报错,当时看到这么多错误都不知道怎么下手,现在知道大部分是因为1.gcc和g++版本,2.缺少库造成的,错误信息可以从当前目录下的
Qtopia2.2.0Makelog文件里面查看。具体可以参考飞凌OK6410和qtopia-free-2.2.0的使用手册进行修改。如果手册上没有,可以百度搜一下。http://blog.csdn.net/jszj/article/details/7589566


我一开始的时候,哇一看那么多错误,怎么修改啊,就郁闷了半天,哎 不过还是要继续的,总不能一个错误一个错误的改吧,那样感觉太浪费时间了,后来看着FL2440开发板linux手册部分说redhat9.0能一键安装,就尝试下载redhat9.0进行安装,
http://archive.download.redhat.com/pub/redhat/linux/9/en/iso/i386/
安装方法是按照结果选择的是个人桌面,redhat安装完成之后,按照飞凌FL2440的手册,一键./qt,发现安装报很多错误,跟之前Ubuntu12.04环境安装的错误大同小异,这怎么办呢?百度吧!发现有的人说因为没有完全安装redhat9.0,就查了一下怎么完全安装,结果再一键./qt 之后没有报错,原来就这么简单的一件事,居然困扰了我好几天,不值得不值得啊!

环境安装好了,下面开始qt界面的编辑了。
按照linux部分手册,hello实验部分的步骤:
 
在终端中输入designer,连击tab2次,发现redhat本身自带了designer,为designer3版本的,选择其中的designer2 或者采用/root/yizhi/qt2/bin/designer打开。
打开了designer2的界面如下:
 
菜单的字体很小,就想着怎么修改,又继续找百度吧,查找有
http://blog.chinaunix.net/uid-28382924-id-3492236.html
不过是Ubuntu下修改的方式试试看吧,结果没效果。现在看来在redhat9.0编译只能使用designer3界面了。将GPRS的程序拷入之后,修改slot connects等,编译,出现好多错误,像:parse error before‘::’之类的错误,查看是因为c语言的版本不一样造成的。这怎么办呢,尝试编写了一个hello world程序,将编译好的bin文件放到2440 /usr/bin文件下,在/usr/apps/目录下增加forlinx目录,hello.desktop放到/usr/apps/forlinx目录下,将hello.png放到目录/usr/pics目录下,用chmod修改程序权限,重新启动qtopia程序,在超级终端输入#qtopia &命令,如图多出forlinx目录,具体如图所示。


 
Hello world 程序成功了,而上述GPRS程序还是不行,应该就是采用designer2版本编译之后,应该不会报这么多错误。
后来找到前辈们已经编译好的ok6410环境,将GPRS程序移植进入,注意当前环境运行的编译器版本,程序编译成功。将./build中的编译器路径修改为2440的编译器,编译,又是N多个错误,如下:


将qtopia-free-2.2.0/qtopia/lib中的库移植到/usr/local/arm/2.95.3/arm-linux/lib中。这是因为缺少库造成的,之前FL2440linux部分安装环境的时候需要将这些库移植到交叉编译器中。
 
至此 将GPRS放到开发板上运行,测试是否能收到数据。如果成功,可以将gprs的可以执行程序分别放到文件系统usr目录下的bin、forlinx、pics中,制作文件系统。


GPS的移植

GPRS移植成功之后,小小兴奋了一下,开始移植GPS,之前OK210中是采用串口进行GPS数据采集的,串口移植跟GPRS移植差不多,这里就不多说了。
210中有一个qt4.7.1的qt界面(这是OK210手册中的图片,我直接粘过来了,只是时间不同。)AM335的界面跟这个差不多,不过下边的文本框多了一个小键盘可以输入。


 
之前因为Ubuntu9.10这个环境里有一个GPS文件夹以为是已经做好的程序,就只想着移植了,程序编译成功之后,移植到开发板,发现出现接收错误,肯定是程序出错了,开始看程序,发现程序中数据接收那部分的程序直接复制到serial的程序,可程序的界面变化了。好吧!既然程序本身有问题,那就把之前串口的程序修改一下,将210开发板或者335开发板中GPS返回的高度,经纬度等信息修改一下放到串口程序中就可以了吧。

最后定位到2440的void TMainForm::remoteDataIncoming() 函数。而210中的程序定位到void gps::read_sermios() 。将read_sermios()函数复制到remoteDataIncoming中,编译一下报错,根据错误一步步修改,注意qt4.7.1中使用了一些c++ 的函数,而在qtopia2.2.0中不能是识别需要将其修改为c语言的。
210中,最后程序的输出函数为这个。 
ui->tedit_output->setText(text + "\n\n\n" + ui->tedit_output->toPlainText() );
而2440中修改为 edit_output->setText(text + "\n\n\n" ); 将toPlainText()函数去掉了,使其只显示当前的gps采集的数据,之前的数据清除。另外删除这个函数,是因为这个函数是在qtopia中使用报错。不过不影响信息的显示。

第一次写没有经验,显得比较凌乱,大家多多包涵