鉴于本身制做根文件系统太麻烦了,因此想用buildroot管理uboot,kernel,另外还能够自动生产rootfs,因而花了两天研究了下buildroot的框架和使用,在本身的2440开发板上也跑起来了,故整理成文档,以便本身未来忘记的时候能参考下:linux
源码下载,我下载的是2018.02.3版本,官方下载地址:http://buildroot.org/downloads/git
因为我是玩的JZ2440的板子,故我就以这个板子做为蓝本说明:github
1.cd到buildroot根目录下。框架
2.首先查看当前buildroot支持哪些单板:less
a.去configs/目录下直接查看。工具
b.在根目录下执行make list-defconfigs。ui
3. 因为个人板子是比较老的s3c2440的板子,因而只好我本身建立了,执行make menuconfig,一项一项的去设置:blog
a.Target options:开发
b.Build options:文档
暂时保持默认便可。
Toolchain:
Toolchain type --------> External toolchain #由于我使用本身安装的toolchain
Toolchain --------> Custom toolchain #客户定制的工具链
Toolchain origin --------> Pre-installed toolchain #事先安装的工具链
Toolchain path --------> ****/toolschain/4.4.3/ #填上本身工具链的绝对路径便可,注意这里只是到bin的上一级目录便可,好比我举例的,知道4.4.3目录
Toolchain prefix --------> $(ARCH)-linux #工具链的前缀,通常就是arm-linux
External toolchain gcc version --------> 4.4.x #gcc版本,跟实际保持一致便可
External toolchain kernel headers series --------> 4.15.x #不清楚这个是干吗的,但我选择跟将使用的kernel版本一致,个人kernel版本是4.15.1,这里后面编译的时候会报错,后面再说明。
External toolchain C library --------> glibc/eglibc #彷佛通常都是用这个库
c.System configuration:
System hostname --------> smdk2440 #随便设置一个名称,不重要
System banner --------> welcome to smdk2440 #设置一个欢迎词,当挂在上根文件系统以后就会打印这个字符串
[*]Enable root login with password --------> #开启密码,这样在登陆linux的时候就会出现询问密码的界面
Root password --------> #设置一个密码
d.Kernel:
Kernel version --------> Custom Git repository #个人代码是在github上,因此我选择了这个
URL of custom repository --------> #填上github上的地址,这里有点说明,若是是开发阶段,确定不但愿每次修改都往girhub上推,那么这里就能够填上本身本地git仓库的绝对地址。
Custom repository version --------> #填上须要克隆的版本,就是用git log|less看到的那个哈希值,这样buildroot就会去克隆相应的linux版本,我猜想能够直接写成master也能够,这样不须要每次都是人为的修改 版本号,保证每次拉下来的都是最新的,这个还有待确认。
Kernel configuration --------> Using a custom (def)config file #kernel须要一个config文件,这里就是选择使用defconfig,这样下一个选择路径的选项就会出现
Configuration file path --------> $(TOPDIR)/board/arm/smdk2440/smdk2440_linux_defconfig) #填上本身将使用的config文件,这个路径是本身建立的,保持buildroot规范
在linux下使用s3c2410_defconfig直接拷贝过来修更名字,若是后期linux的config还须要改动,那么就要将新的拷贝到这个目录下。
e.Filesystem images:
[*] jffs2 root filesystem --------> #我先使用jffs2吧,使用yaffs2编译的时候报错了,我不知道怎么修改。
f.Bootloaders:
跟kernel相似,再也不重复介绍。
4. 通过上述操做就会在根目录下生产一个.config文件,而后make,这样buildroot就会根据相应的设置去编译uboot,kernel,以及自动制做rootfs。
通过漫长的下载,编译,最后生成的文件位于:output/images/下。
5.遇到的问题就是那个linux header跟linux不相符,由于Toolchain-> kernel headers series选的是4.15.x,而个人工具链是4.4.3,有一个宏不匹配,暂时不记得了,这篇帖子是写的第二次了,第一次弄丢了,博客园的草稿箱里也找不到了,真是奇怪。