buildroot(Making Embedded Linux Easy)编译环境它其实就是一个脚本和补丁的集合,简单来讲就是辅助编译嵌入式系统中的boot、kernel、rootfs、cross compiler等。
本篇主要讲如何使用buildroot编译根文件系统并且使用开发板用nfs方式挂载:
宿主机环境:虚拟机+ubuntu14.04 x86
交叉编译器: arm-linux-gcc 4.5.1
目标机环境:tiny4412
1、在http://git.buildroot.net/buildroot/下选择版本,在此选择buildroot-2014.08,
zxl@zxl:/work$ sudo wget http://git.buildroot.net/buildroot/snapshot/buildroot-2014.08.tar.gz
zxl@zxl:/work$ sudo tar xjf buildroot-2014.08.tar.bz2 -C ./tools/
zxl@zxl:/work/tools/buildroot-2014.08$ sudo make menuconfig
3、配置buildroot编译根文件系统
3.1、配置目标板:使用的是arm的cortex-a9,小端模式的
3.2、配置工具链:选择外部工具链的方式(也就是已经安装好的工具链),工具链的路径:/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/
3.3、配置根文件系统
配置完毕,开始编译。
4、编译
root@zxl:/work/tools/buildroot-2014.08# make
在output目录下有四个文件夹:
root@zxl:/work/buildroot-2014.08/output# ls
build host images staging target
build目录:所有源码的编译路径
host目录:存放交叉编译器,如果指定是外部编译器,会把外部编译器拷贝到此处。buildroot编译生成的也是存放在此。images目录:存放根文件系统的打包好的各个格式,比如:ext,yaffs等.....
target目录:编译出来的根文件系统存放的路径(也就是待会生成根文件系统的路径,用nfs挂载即可)
5、使用buildroot制作出来的根文件系统
root@zxl:/work/tools/buildroot-2014.08/output/target# ls
bin etc lib linuxrc mnt proc run sys tmp var
dev home lib32 media opt root sbin THIS_IS_NOT_YOUR_ROOT_FILESYSTEM usr
root@zxl:/work/tools/buildroot-2014.08/output/target#
6、使用开发板挂载根文件系统
6.1、在挂载根文件系统前,buildroot生成的在dev目录下的设备节点有问题,如下:
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# ls -l
总用量 4
-rw--w--w- 1 root root 0 8月 27 10:12 console
lrwxrwxrwx 1 root root 10 9月 1 2014 log -> ../tmp/log
drwxrwxr-x 2 root root 4096 9月 1 2014 pts
root@zxl:/work/tools/buildroot-2014.08/output/target/dev#
生成的console并不是一个设备节点,而是一个普通文件(本人就在此处被坑了一把,通过看log信息才知道打开终端一直失败才找到,有兴趣的可以自行查看)
在一个根文件系统中,需要两个设备节点,console和null设备节点,那么咱们直接仿照ubuntu的来创建
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# ls /dev/console -l
crw------- 1 root root 5, 1 8月 26 10:24 /dev/console
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# ls /dev/null -l
crw-rw-rw- 1 root root 1, 3 8月 25 16:11 /dev/null
root@zxl:/work/tools/buildroot-2014.08/output/target/dev#
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# mknod console c 5 1
mknod: "console": 文件已存在
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# rm console
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# mknod console c 5 1
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# mknod null c 1 3
root@zxl:/work/tools/buildroot-2014.08/output/target/dev# ls -l
总用量 4
crw-r--r-- 1 root root 5, 1 8月 27 10:21 console
lrwxrwxrwx 1 root root 10 9月 1 2014 log -> ../tmp/log
crw-r--r-- 1 root root 1, 3 8月 27 10:21 null
drwxrwxr-x 2 root root 4096 9月 1 2014 pts
root@zxl:/work/tools/buildroot-2014.08/output/target/dev#