buildroot官方教材
buildroot官方的教程training
初始化机制:
-
Buildroot支持多种的初始化的方式,包括如下几种:
- 默认的初始化的方式为Busybox init,这也是最简单的一种方式;
- sysvinit,这是一种旧的风格的初始化的方式;
- systemd,这是一种新的风格的初始化的方式。
-
初始化方式的选择:
- 通过System configuration菜单来选择初始化的方式。
/dev 设备文件夹的管理方式:
- Buildroot通过如下的四种方法来管理设备文件夹:
- 通过内核的devtmpfs来管理/dev,可以自动地创建设备文件,这也是Buildroot默认的一种方法;
- 使用静态的/dev,这是一种非常老土的方法,现在并不实用;
- 使用mdev,mdev是Busybox的一部分,在设备的添加和删除时可以运行一些自定义的操作。
- 使用eudev,该方法从systemd开始允许运行一些自定义的操作。
BusyBox:
这里对BusyBox进行一个简单的介绍,BusyBox可以理解为一个常用的Linux命令和工具集,包括:ls,echo,grep等等,并以单一的可执行的文件形式,提供完善的环境以适用于任何小的嵌入式系统。
其它的配置根文件系统的选项:
- getty,配置在串口或显示器运行登陆命令窗口;
- hostname、banner,显示主机名、起始标语;
- DHCP network,配置网络接口为DHCP;
- root password,设置root密码;
- timezone,时区;
- NLS,支持本地语言和消息信息的翻译;
- locale,只安装本地语言的翻译,或者不安装翻译。
部署映像文件:
- Buildroot默认将所有的映像文件保存在$(O)/images中。
针对以下的几种目标硬件不同的情况,有几种不同的部署映像文件的方法:
- 目标硬件使用的是SD卡或USB盘之类的移动存储,并且已经进行过格式化和分区,则可以直接将根文件系统的压缩包解压到合适的分区即可。当然也可以通过genimage来创建可移动存储器的整个映像,并建立好分区。
- 目标硬件使用的是NAND Flash,则可以将映像文件转化为相应格式的文件,并烧录。
- 目标硬件使用的是NFS,则可配置NFS服务器,并在NFS上启动。
- initramfs,是一种基于RAM内存的一种方式,在RAM的缓存建立文件系统。
genimage:
对于SD卡和USB等可移动存储来说,使用genimage工具可以很方便地建立好一个多分区的文件系统。
比如说,我们可以使用genimage工具来创建一个给bootloader和内核的FAT分区,并创建一个ext4的分区给根文件系统。
如下的示例中,通过指定生成映像文件后处理脚本为support/scripts/genimage.sh脚本,调用genimage。
-
在defconfig中添加如下的选项:
BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/raspberrypi/genimage-raspberrypi.cfg"
-
该示例用来生成了一个用于Raspberrypi的映像,其中需要配置genimage的参数来定义文件和分区。
-
genimage参数配置文件为board/raspberrypi/genimage-raspberrypi.cfg,内容如下:
image boot.vfat { vfat { files = { "bcm2708-rpi-b.dtb", "rpi-firmware/bootcode.bin", "rpi-firmware/cmdline.txt", "kernel-marked/zImage" [...] } } size = 32M } image sdcard.img { hdimage{ } partition boot { partition-type = 0xC bootable = "true" image = "boot.vfat" } partition rootfs { partition-type = 0x83 image = "rootfs.ext4" } }
可以将genimage生成的整个映像,烧录到Flash中:
dd if=output/images/sdcard.img of=/dev/sdb
使用NFS来部署映像
当然还有很多用户喜欢/习惯通过NFS来启动系统。
但是不能直接在$(O)/target中,使用NFS来启动,这是因为文件的权限和所有者并不适合进行NFS启动,我们首先需要为根文件系统生成一个压缩包,以便随后使用NFS启动。(参考THIS_IS_NOT_YOUR_ROOT_FILESYSTEM文件)
使用如下的命令生成根文件系统的压缩包:
sudo tar -C /nfs -xf output/images/rootfs.tar
使用initramfs来部署映像
这种方式非常适用于效得文件系统,它全部加载到RAM内存中,启动速度非常快。
BR2_TARGET_ROOTFS_CPIO=y,生成cpio存档文件,您可以从内核映像旁边的bootloader加载该文件。(cpio为一个能建立和还原备份文档的工具)
BR2_TARGET_ROOTFS_INITRAMFS=y,直接在内核映像中包含了initramfs。该方式只适用于Buildroot构建的内核。
转载请标注出处。