一、buildroot简介
buildroot是一套简单的定制linux系统的工具,更高级的有Yocto,基于make实现构建系统。
二、buildroot目录和文件介绍
- Config.in,保存配置菜单的具体选项,类似Linux源码中的KConfig,其存在位置有
./ ./package/ ./package/xx/ - xx_defconfig,保存有配置菜单的默认配置选项,Linux存在同样的defconfig,其存在位置在
./configs/ - .config,保存配置后的最终配置选项,Linux同样存在,在根目录,来自
defconfig+menuconfig综合配置得到 - xx.mk,保存软件包的名称、版本、位置、依赖关系、配置选项、编译参数、安装目录等等
- xx.hash,存在哈希值,用作校验包的正确性
- dl目录,存储下载好的包,同样可以手动copy包到此处
- output/build目录,下载的包在此处进行解压、配置和编译
- output/staging目录,存储中间文件,包括头文件、库文件
- output/target目录,嵌入式文件系统的安装目录
- output/host目录,主机编译工具的安装目录
- output/images目录,最终生成的文件系统安装目录和镜像文件目录
三、编译过程
make xx_defconfig //使用默认的系统配置
make menuconfig //手工修改必要的配置选项
// 之后配置选项保存在.config中
make // 构建
1> 根据.config确定需要下载哪些包
2> 查看package/包/包.mk确定下载包的版本和链接
3> 下载完成后根据package/包/包.hash校验下载包的正确性
4> 下载完成的包存储在dl/包/包.tar.xx
5> 在output/build/包目录下解压
6> 根据package/包/包.mk进行config、build、install
7> 安装的包在output/target目录下
8> 根据配置选项BR2_ROOTFS_OEVRLAY指定的目录,将目录中的所有文件拷贝到output/target目录下
9> 打包output/target目录下的所有文件作为一个rootfs系统映像
10> 根据配置选项BR2_ROOTFS_POST_IMAGE_SCRIPT执行的脚本,运行此脚本,构建系统镜像
四、构建系统镜像的脚本介绍
genimage \--rootpath "${ROOTPATH_TMP}" \--tmppath "${GENIMAGE_TMP}" \--inputpath "${BINARIES_DIR}" \--outputpath "${BINARIES_DIR}" \--config "${GENIMAGE_CFG}"
image boot.vfat {vfat {files = {"boot.bin","u-boot.img","system.dtb","uImage"}file extlinux/extlinux.conf {image = extlinux.conf}}size = 32M
}image sdcard.img {hdimage {}partition boot {partition-type = 0xCbootable = "true"image = "boot.vfat"}partition rootfs {partition-type = 0x83image = "rootfs.ext4"}
}
定义了两个分区,分区一是FAT32系统(0xC),并使用bootable设置为可启动分区,存储的内容是boot.vfat,分区二是Linux系统(0x83),存储的内容是rootfs.ext4
启动映像boot.vfat,大小是32M,文件包含"boot.bin","u-boot.img","system.dtb","uImage",以及一个extlinux和extlinux.conf文件
extlinux.conf文件内容表内核是uImage、设备树是system.dtb并且uboot传递给kernel的参数指定了串口、波特率、根文件系统目录
label linuxkernel /uImagedevicetree /system.dtbappend console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait
最后dd if=output/images/sdcard.img of=/dev/sdX 将sdcard.img拷贝到sd卡
