首先,制作一个由 busybox 制作成的文本文件系统
1、编译 busybox,注意,不要选择“use /usr”选项,编译后产生 bin sbin linuxrc 三个目
录,其中 linuxrc 不需要用,可以根据自己需要自己写一个 linuxrc 脚本,把这
2 个 目 录 复 制 到 目 标 文 件 夹 下 , 并 添 加
dev、lib、etc、proc、tmp、var、usr、mnt 目录。
2、 在 etc 目录下建立 fstab、profile、figo.lqt 脚本文件,其中后面 2 个是可执行的脚本
文件,再建一个 init.d 目录,下面建一个 rcS 可执行脚本。fstab 是描述要挂载
的文件系统,profile 主要是说明一些环境变量,此文件被 figo.lqt 调用执行,
figo.lqt 是主要的执行脚本,整个脚本文件的中心所在, rcS 的工作只是调用
figo.lqt 脚本,之所以需要使用 figo.lqt 而不是用 rcS 执行完所有的工作是因为
rcS 不能执行这些工作,只能转到另一个脚本上执行!
3、如果 busybox 是静态编译的那么就这样完成了一个文本的文件系统,如果是动态编
译的就要往 lib 目录复制需要的动态库,一般从交叉编译器复制,可以用一下
命令查看 busybox 需要用到的链接库 arm-linux-readelf -a filename |grep "Shared
library"
4、要注意的一个问题是要在 linuxrc 这个文本中挂载 var、tmp 这 2 个目录是 ramfs 格式,
下面还要加的一个 Settings 目录也要挂为 ramfs,否则 qt 启动时将出现以下的
错误:
could not open for writing ` Sttings/qpe_new.conf'
QCopChannel::send: Must construct a QApplication before using QcopChannel
当然如果使用的是 ya"s 系统这个文件系统也是可写的,但是多次的读写可能
产生坏块,所以这里挂为 ramfs,在用 nfs 调试时就一定要挂为 ramfs,否
则必然有上述提示。
其次,编译、安装 qtopia,并把安装后产生的所有文件目录放在一个文件夹并把这个文件
夹拷贝到文本文件系统中的一个目录下。
第三,从编译器的 lib 目录下拷贝一些 qt 用到的函数库到文件系统的 lib 目录下
具体需要哪些可以参考现有的文件系统,也可以用上面查看链接库的命令查看。函数库
的影响很大,如果选择不正确的函数库或者没有把某些函数库包含进来可能导致某
些程序甚至系统无法正常运行,这时程序无法运行而并没有任何提示。
第四,qt 的运行除了需要交叉编译器的函数库还要有一些其他的的函数库的支持,
如 libpng 和 libz、libjpeg 函数库等,这些函数库编译器的 lib 中可能没有,
这就要下载相应的源代码包并交叉编译出这些函数库
第五,以上的文件路径系统是无法识别的,所以需要在 profile 脚本文件中添加这些
目录的路径,如 qt 的 bin、lib 目录都是必要的,还有 QPEDIR QTDIR 也是必要的,
此外,还要定义输入设备、屏幕的尺寸、语言等宏,这些都是 qt 运行的必要设置.
这里提一个非常重要的环境变量:HOME。这个变量是 qt 用来寻找 Settings、
Document 目录的路径,那么这 2 个目录又有甚么用处呢?前者是 qt 运行时需要读写
的一些读写文件的存放目录,没有这个目录 qt 无法运行;后者是存放文件的目录,
就是 qt 主界面上的 Document 的目录!一般都用 ramfs 系统来挂载这 2 个目录,但是如
果这个目录的文件太大那么意味着占用较多的 RAM 资源,这对系统可能是不利的,
反过来如果是以 yaffs 挂载那么经常性的写操作将使 flash 很快出现坏块
第六,正如上一点所提到的,还要建 Settings、Document 文件目录,两者可以空,后者也
可以放想要在 QT 的 Document 目录下能看到的文件。
第七,qtopia 的运行还需要一个 usr/share/zoneinfo 文件夹,目录下面需要很多的配置文件,
评论3
最新资源