搭建最简单的Linux文件系统,方法有很多种,其中使用busybox来搭建是比较传统的,也是很旧的一种方法。据说这种方法很落后了,如果要移植多一点给第三方文件进去如busybox, tslib, qt, vim,交叉编译工具等,
就需要自己手动一个一个移植进去,很花很花时间。然而buildroot可以说是很方便的解决了这个问题,
只需要在menuconfig中配置相关的功能即可,执行make时buildroot会从指定的服务器上下载源码包,自动编译,不需要自己手动移植。
下面结合x4418开发板来用buildroot搭建最简单的Linux文件系统。
一、从 buildroot 官网 获取 buildroot 源码包,我这里下的最新的是buildroot-2015.05.tar.gz二、把它拷贝到Ubuntu系统下的用户目录并解压,
解压命令:tar xvf buildroot-2015.05.tar.gz
得到目录 :buildroot-2015.05
进入这个目录,执行 make menuconfig命令,进入配置界面:
这个跟配置内核的时候的界面是一样的。
进入第一个目录Target options
将 Target Architecture 配置为 ARM(littlt endian),将 Target Architecture Variant 配置为cortex-A9,
将 Target ABI 配置为 EABI,将 ARM instruction set 配置为 ARM,
再退回上一界面后,进入 Toolchain 目录:
将 Toolchain type 配置为 External toolchain,然后在 Toolchain 中选择交叉编译工具的版本,
这里我选 ARM 2014.05,在 Toolchain origin 中选择 Toolchain to be downloaded and installed,
后面编译时, buildroot 将会自动下载对应的工具链并自动安装。选中 Enable MMU support。
退回上一界面后,进入 System configuration 界面,在 System hostname 一栏中输入开发板的名称,
如 x4418,在 Init system 中选择 BusyBox,在/dev management 中选择 Dynamic using mdev,
即使用 mdev 动态加载设备节点的方式,然后在Path to the permission tables 中选择设备节点的配置表,
这里我们一定要选择system/device_table_dev.txt,否则后面在 dev 目录下将不会生成各种设备节点。
当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。
Root password 为配置进入linux 控制台终端后的密码这里设为:123456,为空则登录时不需要密码,默认登录用户名为 root。
选中 Run agetty(login prompt)after boot,再进入下面的 getty options 选项:将 TTY port 配置为 ttyAMA0,
将 baudrate 配置为 115200,对应 x4412&ibox 开发板的打印串口。
返回上一层,再继续返回上一界面,进入 Filesystem images 目录:
选中 ext2/3/4 root filesystem,然后在 ext2/3/4 variant 中选择 ext4,
选中 tar the rootfilesystem,最后保存当前的配置并退出,配置完成。 用户也可以根据自己的实际需要进行配置。
最后保存退出。其实还有很多选项可以选的,可以根据自己的需求来配置。
三、编译buildroot,在buildroot根目录下直接执行make就可以完成了。可能会出现一些错误,所以最好先预装一些工具包:
sudo apt-get install g++
sudo apt-get install git
sudo apt-get install mercurial python-iniparse tortoisehg tortoisehg-nautilus python-nautilus
装完之后再执行make 完成编译,由于在编译的过程中需要自动下载一些工具,所以要保持Ubuntu系统联网。
编译成功,在buildroot根目录下的output/image目录下就会生成我们需要的文件系统文件 :
这里我有个疑惑,rootfs.ext4其实是个连接,直接指向rootfs.ext2?
这样可以?
难道是一样的?
先不管。把这个文件系统文件rootfs.ext4拷出来。
四、验证下能不能用。
用fastboot工具烧写这个rootfs.ext4到x4418开发板。
fastboot flash system rootfs.ext4
(注意开发板原来是烧有uboot、boot.img、system.img的,其实这只是更新了文件系统。
能成功烧写。启动时发现无法启动,原来启动参数没设置好,Android4.4系统的时候启动参数如下图:
执行修改:
setenv bootargs "root=/dev/mmcblk0p2 rw rootfstype=ext4"
setenv bootcmd "ext4load mmc 2:1 0x48000000 uImage;bootm 0x48000000"
save
修改之后查看环境变量 pri:
重启之后起来了:
但是发现个问题,到启动内核的时候一点信息都没有打印出来!
出现这个问题应该是原来boot.img的原因。进入Android4.4源码包,
去到内核源码目录,执行make menuconfig ,
进入内核配置界面,进入Boot options,在Kernel command line type 下
选择第二个选项Extend bootloader kernel arguments,
原来是是第一个Use bootloader kernel arguments if available。
重新编译boot.ime。
用fastboot工具重新烧写boot.img到 x4418开发板,
这个时候重启开发板,正常启动,启动内核时也有信息打印出来了:
|