最近这段时间学习QT的最终目的是要在嵌入式(我购买的开发板)上使用QT。如果想在嵌入式使用QT,那么在开发板上跑的系统就要支持QT,这一部分就开始学习一下制作支持QT的文件系统。这一部分是根据迅为提供的开发板手册做的,记录一下遇到的问题以及解决方法,也希望能帮助到需要帮助的人。
第一步:准备源码
根文件系统的制作使用的是busybox工具,它是集成和压缩了Linux的很多命令和工具,就像是一个大工具箱。将“busybox-1.29.0.tar.bz2”通过 ssh 工具拷贝到ubuntu下的/home/topeet/minilinux目录下,然后解压。
第二步:编译环境
跟着迅为教程一步一步进行的,个人认为仅有一点需要特别注意,就是编译器的选择,这里要修改环境变量。所需要的交叉编译器为arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,这里给一下我找到的资源链接。(不太容易上传资源,如果有需要的伙伴可以私聊我)
这里我将交叉编译的压缩包放在了ubuntu下的/usr/local/arm文件夹下,然后解压,如下图所示。
解压完成之后,先要修改环境变量,然后再开始编译工作。
回顾一下修改环境变量的知识,修改环境变量有两种方法:第一种是直接使用命令设置;第二种是修改.bashrc文件。
先来说一下第一种方法,命令格式为:export 变量=新增的变量值:$变量
举个例子,如下所示:
export PATH=/home/topeet/test:$PATH
如此一来,使用命令echo $PATH
(“显示当前环境变量”)就可以看到/home/topeet/test/被添加到了环境变量里面。这种添加环境变量的方法是立刻生效的,但是却是临时改变了环境变量,当我们重新打开终端的时候去查看环境变量就会发现刚才新添加的环境变量没了。还有一点需要说明,这种添加换将变量的方法只对当前用户有效。
下面再来回顾一下第二种方法:修改.bashrc文件。直接在这个配置文件的最底行加上需要增加的环境变量。
这种修改办法需要先进入到root目录下,然后使用命令:vim .bashrc
,使用正确的命令格式将需要的环境变量所在路径给写进去,针对目前所需的编译环境去写,由于所在路径为:/usr/local/arm/arm-2014.05/bin
,故有如下命令:
export PATH=$PATH:/usr/local/arm/arm-2014.05/bin
将该条语句增加到配置文件中之后,保存退出。由于这种方法修改环境变量不会立刻生效,所以需要使用source .bashrc
来使得环境变量生效。(或者不使用命令来使得增加的环境变量生效,直接关闭终端,然后再打开终端的时候,环境变量就生效了。这种增加环境变量的方式对于ubuntu来说是永久生效的,但是同样也是只对当前用户有效。)之后,再使用arm
命令可以看到编译器出现了gcc-4.8.3,说明编译路径设置正确。
我的之前是gcc-4.3.2,然后编译了两次总失败,后来终于给我逮住了失败的原因。
环境变量设置好以后,使用命令“apt-get install libncurses5-dev”确认是否安装 ncurses 库,没有安装的话后面编译会报错。
第三步:修改配置文件使得ls命令支持中文
我把修改过后的配置文件放在了资源里面,链接如下,不要积分(libbb/printable_string.c以及libbb/unicode.c),可以直接将原来的这两个文件删掉,用SSH软件把链接里这两个文件拷贝到libbb文件夹下,也可以根据手册去修改一下。
第四步:配置 busybox
跟着手册一步一步来就行。
第五步:编译 busybox
依次使用命令make
和make install
。编译好之后,用file busybox
查看一下属性,发现这里是x86,所以肯定不能在开发板上编译成功,给它重新编译一下。(出现这种情况是因为当时我没修改环境变量,然后编译成功之后显示的属性是这样。但是按道理来说,环境不对,应该编译不成功的,不知道它怎么还成功了。就写出来给人们做个参考吧,就是说万一有人哪儿都跟手册一样的,还出现了这种问题应该怎么做)
root@ubuntu:/home/topeet/minilinux/system/bin# file busybox
busybox: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b97b69f50ba4bfb13277fa8d32375d6d410d0fd4, stripped
root@ubuntu:/home/topeet/minilinux/system/bin# cd ..
root@ubuntu:/home/topeet/minilinux/system# ls
bin dev etc lib linuxrc mnt proc rootfs.tar.bz2 sbin sys system.img tmp usr var
root@ubuntu:/home/topeet/minilinux/system# rm -rf ./bin/ sbin/ usr/ linuxrc
root@ubuntu:/home/topeet/minilinux/system# ls
dev etc lib mnt proc rootfs.tar.bz2 sys system.img tmp var
root@ubuntu:/home/topeet/minilinux/system# cd ..
root@ubuntu:/home/topeet/minilinux# ls
busybox-1.29.0 busybox-1.29.0.tar.bz2 system system.img
root@ubuntu:/home/topeet/minilinux# export ARCH=arm
root@ubuntu:/home/topeet/minilinux# export CROSS_CPMPILE=/usr/local/arm/arm-
arm-2009q3/ arm-2009q3.tar.bz2 arm-linux-gcc-4.3.2.tar.gz
root@ubuntu:/home/topeet/minilinux# export CROSS_CPMPILE=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
root@ubuntu:/home/topeet/minilinux# ls
busybox-1.29.0 busybox-1.29.0.tar.bz2 system system.img
root@ubuntu:/home/topeet/minilinux# cd busybox-1.29.0
root@ubuntu:/home/topeet/minilinux/busybox-1.29.0# ls
applets configs _install Makefile.help runit
applets_sh console-tools INSTALL make_single_applets.sh scripts
arch coreutils klibc-utils miscutils selinux
archival debianutils libbb modutils shell
AUTHORS docs libpwdgrp networking size_single_applets.sh
busybox e2fsprogs LICENSE NOFORK_NOEXEC.lst sysklogd
busybox.links editors loginutils NOFORK_NOEXEC.sh testsuite
busybox_unstripped examples mailutils printutils TODO
busybox_unstripped.map findutils Makefile procps TODO_unicode
busybox_unstripped.out include Makefile.custom qemu_multiarch_testing util-linux
Config.in init Makefile.flags README
root@ubuntu:/home/topeet/minilinux/busybox-1.29.0# make clean
CLEAN applets
CLEAN .tmp_versions _install
CLEAN busybox busybox_unstripped busybox_unstripped.map busybox_unstripped.out busybox.links .kernelrelease
执行完这些之后,再执行命令“make”以及“make install”就会变成下面的样子:
root@ubuntu:/home/topeet/minilinux/busybox-1.29.0# file busybox
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
第六步:整理最小文件系统
跟着手册来做,不会错的。
最后:验证最小文件系统是否可用
文件系统打包成功之后,能不能用还不清楚,所以还需要把它烧写到开发板里面看是否能启动。将打包好的rootfs.tar.bz2拷贝到烧写器里面,然后给开发板上电看是否开发板可以成功启动。