buildroot
参考
Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation.
Buildroot是一个简单、高效和易于使用的工具,通过交叉编译生成嵌入式Linux系统。
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_ 文件删除就行
自己实践流程
一、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
这里要确认内核源码版本
$ 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