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. 总结

这里演示了如何修改内核源码,其他软件包同样可以。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐