上一章节我们讲述了最简单的文件系统的搭建方式,在实际应用场景中,我们需要添加很多第三方文件,比如busybox,tslib,qt,vim,交叉编译工具等,如果我们手动移植里面的任何一个源码包,都会花费我们少则半个小时,多则半天,甚至一天,大大的浪费了我们宝贵的时间。buildroot可以很方便的解决这些问题。我们只需要通过menuconfig配置我们需要的功能,不需要的功能去掉,再执行make指令编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建成我们所需要的嵌入式根文件系统。使用传统的文件系统的搭建方式,对于老手至少需要两三天,对于新手,很可能两三个星期,而使用buildroot,并不在乎老手新手,只要正确的配置buildroot,所有事情交给buildroot来完成,下载,编译整个时间不超过3个小时。下面我们将结合开发板实例解说buildroot的搭建过程。
1.1.1 获取buildroot
我们可以从buildroot官网( http://buildroot.uclibc.org/download.html)获取buildroot源码包,buildroot基本上三个月更新一次,这里我们我们以实际下载的源码包buildroot-2014.08.tar.gz讲解,不同的版本命名方式仅仅是后面的日期不同而已。
1.1.2 配置buildroot
将buildroot-2014.08.tar.gz拷贝到ubuntu的samba目录,使用如下指令解压源码包:
- tar xvf buildroot-2014.08.tar.gz
复制代码
进入解压的目录buildroot-2014.08,执行如下指令配置buildroot:
配置界面如下:
进入Target options目录:
将Target Architecture配置为ARM(littlt endian),将Target Architecture Variant配置为cortex-A9,将Target ABI配置为EABI,将ARM instruction set配置为ARM,再退回上一界面后,进入Toolchain目录:
将Toolchaintype配置为Externaltoolchain,然后在Toolchain中选择交叉编译工具的版本,如ARM 2013.11,在Toolchain origin中选择Toolchain to be downloaded andinstalled,后面编译时,buildroot将会自动下载对应的工具链并自动安装。选中Enable MMUsupport,退回上一界面后,进入Systemconfiguration界面:
在Systemhostname一栏中输入开发板的名称,如x4412,在Init system中选择BusyBox,在/dev management中选择Dynamic using mdev,即使用mdev动态加载设备节点的方式,然后 在Path to thepermission tables中选择设备节点的配置表,这里我们一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。Root password为配置进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。选中Run agetty(login prompt)after boot,再进入下面的getty options选项:
将TTY port
配置为ttySAC3
,将baudrate
配置为115200
,对应x4412&ibox
开发板的打印串口。再返回上一界面,将Root filesystemoverlay direc…
设置为board/9tripod/x4412/rootfs-overlay
,这里表示该路径下的所有文件将会无条件覆盖buildroot
默认的相关路径文件。配置这一步的同时,我们一并将开发板光盘中的相关文件拷贝到buildroot
对应的board
目录。
继续返回上一界面,进入Filesystem images
目录:
选中ext2/3/4root filesystem
,然后在ext2/3/4variant
中选择ext4
,选中tar the root filesystem
,最后保存当前的配置并退出,配置完成。用户也可以根据自己的实际需要进行配置。
1.1.1 编译buildroot
我们只需在buildroot的根目录下执行make指令即可编译整个buildroot。值得注意的是,第一次编译肯定会弹出一些错误,这基本上是没有安装一些第三方工具造成的。我们预先安装一些必备的工具包:
- sudo apt-get install g++
- sudo apt-get install git
- sudo apt-get install mercurial python-iniparse tortoisehg tortoisehg-nautilus python-nautilus
复制代码
再执行make指令编译,这时buildroot会自动下载所需要的相关源码包,自动编译安装。下载的源码包在buildroot根目录的dl目录下,如下图所示:
编译完成后,编译出来的各种文件会放在buildroot目录下面的output目录下,如下图所示:
我们需要烧写的最终的映像文件在images目录下:
在target
目录下为对应未打包的文件系统,在调试时可借助于该目录下的文件分析原因。
1.1.1 验证buildroot
使用fastboot命令将我们新制作的文件系统烧写到开发板:
- fastboot flash system rootfs.ext4
复制代码
启动开发板,观察是否有异常情况出现。比如弹出如下打印信息:
- Starting mdev...
- /etc/init.d/S10mdev: line 9: /proc/sys/kernel/hotplug: No such file or directory
- mdev: /sys/class: No such file or directory
复制代码
我们找到对应的S10mdev
文件,将第9
行删除,重新编译即可。如还有其他错误信息,具体情况具体分析,一般只要配置没有问题,后面也不会出现太大问题。
到此,一个基本的含有
busybox
,
vim
,
qt
等的根文件系统就制作完成了,回顾
buildroot
,它确实不失为嵌入式开发工程师一个利器,我们可以省去根文件系统制作的烦恼,直接进入主题,进行驱动及应用的开发工作。