buildroot 是linux平台下的一种构建嵌入式Linux系统的框架,这个工具在刚开始接触的时候,觉得有点懵? 这玩意儿能够构建系统内核、u-boot、根文件系统?太夸张了吧,后来经过使用发现,这个工具还真 可以,只不过实现的方式比较意外。Buildroot是由Makefile脚本和Kconfig配置文件构成的,对于构建内核、u-boot,它是 需要 写好脚本,从芯片厂家提供的下载链接,下载 对应的内核、u-boot,然后按照Makefile脚本等配置文件来实现对内核、u-boot的移植。buildroot唯一通过自身代码实现的就是构建根文件系统, 所以这个工具的使用方式应该是这样的:
(1)内核的移植,最好单独进行,因为内核移植 太过复杂。除非厂家提供了可以直接使用的移植内核,这里的意思是,除非要移植的硬件与官网提供的开发板硬件完全相同,否则还是要单独移植内核。
(2)u-boot的移植,同内核,最好单独进行。
(3)既然内核、u-boot都是单独移植,剩下根文件系统肯定也不能单独了,再单独的话,这个工具也就没有任何意义了,事实也是如此,buildroot目前最常用的功能就是 构建根文件 系统。
小结:bulidroot 的主要功能是构建根文件系统,是busybox的 高级、自动化升级版。

先简单的说下根文件系统的作用,等到我对根文件系统理解的更加深刻的时候在专门分析,简单的说,linux是内核,就相当于是一个人的内功修为,根文件系统则是 手和脚,没有手和脚,内功修为再好,也是个废人,linux内核启动后,最重要的一步就是要挂载根文件系统,我们再移植内核的时候,会发现,如果不烧录根文件系统,内核会 报错:kernel panic - not syncing: No init found 根文件系统是内核与硬件之间的桥梁, 包含了各种shell工具、可执行工具、硬件设备、其他文件系统挂载等等。到这里有个疑问,不同的 硬件,是否要 对应不同的根文件系统呢?那么buildroot 也是要像上面说到的 要从芯片厂商官方提供的链接中下载,然后编译吗?答案是不需要,上面 说过,根文件除了包含各种工具外,更重要的是 硬件设备接口等框架接口, 既然是嵌入式linux,大家都是用linux,所以根文件系统的框架必然是一样的,要不然 linux 这个大哥也不会认的,可以稍微有点夸张的说,只要是相同框架的 硬件,A框架CPU的根文件系统,也是可以在B框架CPU上跑起来的,跑起来不代表全能用,区别就是 /dev目录下的设备 文件,所以我们通过buildroot 进行构建根文件系统,最重要的是 设备 文件的关联和创建。


1.1 什么是buildroot
  Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。