buildroot工具的使用方法

一、buildroot简介

buildroot是一套简单的定制linux系统的工具,更高级的有Yocto,基于make实现构建系统。

二、buildroot目录和文件介绍

  1. Config.in,保存配置菜单的具体选项,类似Linux源码中的KConfig,其存在位置有./ ./package/ ./package/xx/
  2. xx_defconfig,保存有配置菜单的默认配置选项,Linux存在同样的defconfig,其存在位置在./configs/
  3. .config,保存配置后的最终配置选项,Linux同样存在,在根目录,来自defconfig+menuconfig综合配置得到
  4. xx.mk,保存软件包的名称、版本、位置、依赖关系、配置选项、编译参数、安装目录等等
  5. xx.hash,存在哈希值,用作校验包的正确性
  6. dl目录,存储下载好的包,同样可以手动copy包到此处
  7. output/build目录,下载的包在此处进行解压、配置和编译
  8. output/staging目录,存储中间文件,包括头文件、库文件
  9. output/target目录,嵌入式文件系统的安装目录
  10. output/host目录,主机编译工具的安装目录
  11. 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 = 0xC
		bootable = "true"
		image = "boot.vfat"
	}

	partition rootfs {
		partition-type = 0x83
		image = "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 linux
  kernel /uImage
  devicetree /system.dtb
  append console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait
最后dd if=output/images/sdcard.img of=/dev/sdX 将sdcard.img拷贝到sd卡
posted @ 2025-07-31 20:50  gramming  阅读(500)  评论(0)    收藏  举报