参考

官网

Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation.

Buildroot是一个简单、高效和易于使用的工具,通过交叉编译生成嵌入式Linux系统。

—— Buildroot - Making Embedded Linux Easy

buildroot使用介绍

buildroot使用详解

buildroot构建项目(一)—buildroot介绍

官方手册

buildroot-工具链

如何在现有项目加入自己的APP

OrangePi PC 玩Linux主线内核踩坑之旅(一)之制作第一个镜像

Buildroot笔记 提到如何产生 sdcard.img

Buildroot 用户手册 中文 !!!

buildroot 在编译之前会根据 .config 文件来检查 output/build/package 的6个文件,做相应的步骤:

.stamp_configured,  此文件表示已经配置过
.stamp_downloaded, 此文件表示源码已经下载过,没有此文件会重新下载
.stamp_patched, 此文件表示已经打过补丁
.stamp_extracted  此文件表示已经压过
.stamp_builted 此文件表示源码已经编译过  
.stamp_target_installed  此文件表示软件已经安装过

想要重新执行哪一步,就把对应的 .stamp_ 文件删除就行

buildroot makefile文件理解笔记(一)

在buildroot中添加驱动

自己实践流程

一、clone buildroot 仓库到 gitee

https://gitee.com/lyndon2/buildroot

二、clone 源码到 workspace

三、make menuconfig

make raspberrypi3_defconfig O=RPi3 menuconfig

不要直接使用 override 替换 kernel,因为你选择的内核版本可能和 raspberrypi3_defconfig 产生的 .config 文件不匹配,导致编译失败。最好的办法是让buildroot 自动选择下载编译,完事后再把内核源码拷贝到override

四、拷贝之前的 dl 到当前目录

cp ../buildroot-2022.05-rc1/dl ./ -rf

利用之前的下载结果,减少编译时下载时间

五、编译

make O=RPi3/

六、创建 override 目录

七、将 linux 内核源码解压到 override

这里要确认内核源码版本

buildroot_kernel_version

$ cp dl/linux/linux-0b54dbda3cca2beb51e236a25738784e90853b64.tar.gz override/
$ cd override/
$ tar -zxvf linux-0b54dbda3cca2beb51e236a25738784e90853b64.tar.gz
$ head linux-0b54dbda3cca2beb51e236a25738784e90853b64/Makefile 
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 10
SUBLEVEL = 92
EXTRAVERSION =
NAME = Dare mighty things

# *DOCUMENTATION*
# To see a list of typical targets execute "make help"
# More info can be located in ./README
$ mv linux-0b54dbda3cca2beb51e236a25738784e90853b64 linux-5.10.92

八、make menuconfig

修改 Kernel –> Linux Kernel –> Kernel version = Custom version

修改 Kernel –> Linux Kernel –> Kernel version Kernel version = 5.10.92

注:5.10.92 是 linux-5.10.92 的后缀

注意:以后执行 make 都不要带 raspberrypi3_defconfig 了,不然 RPi3/.config 会被重置

可以执行 make O=RPi3 menuconfig 检查 kernel 版本配置是否修改生效

九、修改 RPi3/local.mk

$ cat RPi3/local.mk 
LINUX_OVERRIDE_SRCDIR = /home/liyongjun/project/board/buildroot/override/linux-5.10.92
#BUSYBOX_OVERRIDE_SRCDIR = /home/liyongjun/project/board/buildroot/override/busybox-1.33.0
#IW_OVERRIDE_SRCDIR = /home/liyongjun/project/board/buildroot/override/iw-5.16

十、编译

$ make O=RPi3/

十一、树莓派 dts

1.确定需要的dts:bcm2710-rpi-3-b-plus。多余的可以删掉(通过 make menuconfig 修改)。

十二、修改dts

&leds {
	act_led: led-act {
		label = "led0";
		linux,default-trigger = "mmc0";
		gpios = <&gpio 29 0>;
	};

	lyj_led: led-lyj {
		label = "led_lyj";
		linux,default-trigger = "default-on";
		gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
	};

	pwr_led: led-pwr {
		label = "led1";
		linux,default-trigger = "default-on";
		gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
	};
};

注:新增的 gpio 4 为 B

十二、重新编译 dts

$ make O=RPi3/ linux-rebuild