一、环境搭建。
X86环境:
平台: windows xp 下ubuntu10.10
QT版本:qt-everywhere-opensource-src-4.6.3.tar
交叉编译工具:arm-linux-gcc 4.4.3
arm环境:
开发板:OK6410A(飞凌嵌入)
boot版本:uboot1.1.6(开发板自带)
linux内核版本:linux-3.0.1
文件系统:使用busybox自制的文件系统。
二、QT软件包的编译与库文件的生成请参考《Ubuntu 下QT安装与移植》
在根据参考文件《Ubuntu 下QT安装与移植》做好Ubuntu 下QT安装后,即在PC机上已经能正常工作了,最后就是剩下如何移植到OK6410A的开发板上了。
三、在移植之前必需要明确几点:
1、文件系统的制作与运行是跟板子的型号及使用的内核版本是没有关系的。
2、想要板子能运行起QT软件,必须将其要使用到的库文件复制到文件系统的相应目录下。
四、按照《Ubuntu 下QT安装与移植》移植过程中出现的问题:
1、 终端打印 /bin/sh: Can't access tty;job control turned off;
也就是说串口没有打开,此时就需要修改文件系统/etc/inittab文件
::sysinit:/etc/init.d/rcS
ttySAC0::respawn:-/bin/sh
::askfirst:
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a
::restart:/sbin/init
为什么需要这样修改?
追逆原因:
a. 我们在通过boot给内核传递参数时有这么一小段“console=ttySAC0,115200” ,即终端设备是与串口0相联的,而console设备通常是在文件系统创建时,就在/dev/目录下创建了。
b. 此时也要需要看开发板是否提供了ttySAC0这个设备,有开发板提供了名字不同如tty0等。
c. 在修改inittab文件时,你需要明白该文件的作用,其是如何进行工作等一系列的关联问题,例如此次我使用文件系统1205_02project
其关联如下:
内核启动----------〉就会启动busybox的init进程(sbin/init)----------〉/etc/inittab (而init进行会展开对inittab文件的搜索)------->/etc/init.d/rcS(此时系统就会运行inittab文件中的内容)--------->/etc/init.d/rc.local(rcS中的内容)-----------〉/usr/bin/button(运行第一个应用程序button )。
2、-/bin/sh: button not found (没有找到该执行程序)
之前以为该文件系统中不支持“./”这条命令,后面考备了另一个可执行的应用程序,也使用了./test去执行test程序,是可以运行了,这样就否认了该假设。
后来通过网上查找,原来是文件系统中缺少执行该文件的库文件。
如何知道该文件系统中缺的库文件是什么?
通过在ubutun 下使用arm-linux-readelf -a 加应用程序名,就可得到该应用程序所需要使用的库文件。
将上面的库文件添加到文件系统的lib目录下就可以了。
五、最后移植成功,但效果不太好。
1、界面不能自适应屏幕大小。
2、无法显示中文。