1. 问题
Buildroot 的正常操作是下载一个压缩包,对它进行解压缩,然后配置、编译和安装该压缩包中的软件组件,源代码会被提取到 output/build/package-version中,这是一个临时目录,当使用“make clean”时,该目录将被完全删除。所以我们不应该直接修改output目录的源码,buildroot提供OVERRIDE_SRCDIR机制去解决这种问题,用于修改代码并同步。
2. 方法
2.1 分析
~/buildroot$ make menuconfig
→ Build options
($(CONFIG_DIR)/local.mk) location of a package override file
这里看出,配置文件默认为buildroot/loacal.mk。
2.2 实施
~/buildroot$ cp ./dl/linux/linux-5.15.18.tar.xz ./
~/buildroot$ tar -vxf linux-5.15.18.tar.xz
~/buildroot$ vim local.mk
LINUX_OVERRIDE_SRCDIR=$(CONFIG_DIR)/linux-5.15.18
~/buildroot$ make linux-rebuild
>>> linux custom Syncing from source dir /home/ubuntu20/buildroot/linux-5.15.18
make linux-rebuild all命令会将$(CONFIG_DIR)/linux-5.15.18修改过的文件复制同步到output/build/linux-custom。
2.3 测试
~/buildroot/linux-5.15.18$ vim ./init/calibrate.c
void calibrate_delay(void)
{
unsigned long lpj;
static bool printed;
int this_cpu = smp_processor_id();
// 添加内核打印,内核启动过程中会打印此信息
printk(KERN_INFO "*****Hello Buildroot Kernel*****\n");
......
}
~/buildroot$ make linux-rebuild
~/buildroot$ ./output/images/start-qemu.sh
# dmesg | grep -i hello
*****Hello Buildroot Kernel*****
可以看到,我在LINUX_OVERRIDE_SRCDIR指定路径下修改内核,启动时打印了我的结果。
3. 总结
这里演示了如何修改内核源码,其他软件包同样可以。