如何在自定义meta层中覆盖orange-pi-zero.conf的KERNEL_IMAGETYPE变量?
问题
我希望使用orange-pi-zero.conf构建内核zImage,该配置文件中指定了:
KERNEL_IMAGETYPE = "uImage"
请问如何在我的meta层中,让特定镜像配方使用orange-pi-zero.conf的同时,将KERNEL_IMAGETYPE变量覆盖为"zImage"?以下是我设想的示例代码:
custome-image.bb
IMAGE_INSTALL += "..." KERNEL_IMAGETYPE = "zImage" IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}" COMPATIBLE_MACHINE = "orange-pi-zero"
解决方案
直接在镜像配方中设置KERNEL_IMAGETYPE大概率不会生效,因为机器配置文件的变量优先级高于镜像配方。推荐三种可靠的实现方式:
方式一:创建自定义机器配置文件
在你的meta层中新建conf/machine/orange-pi-zero-custom.conf,内容如下:
# 继承原orange-pi-zero的配置 require conf/machine/orange-pi-zero.conf # 覆盖内核镜像类型 KERNEL_IMAGETYPE = "zImage"
构建时指定MACHINE=orange-pi-zero-custom,或者在你的custome-image.bb里修改兼容机器:
COMPATIBLE_MACHINE = "orange-pi-zero-custom"
方式二:通过内核配方BBappend覆盖
在你的meta层中新建recipes-kernel/linux/linux-%_bbappend(匹配对应内核配方),内容如下:
# 仅对orange-pi-zero生效 COMPATIBLE_MACHINE = "orange-pi-zero" # 覆盖内核镜像类型 KERNEL_IMAGETYPE = "zImage"
这种方式不需要修改机器配置,直接针对目标机器的内核配方做变量覆盖,只要你的镜像配方依赖该内核,就会自动应用这个覆盖。
方式三:在镜像配方中用机器override强制设置
如果坚持要在原镜像配方里调整,可利用机器override提升变量优先级:
IMAGE_INSTALL += "..." IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}" COMPATIBLE_MACHINE = "orange-pi-zero" # 仅在orange-pi-zero机器下生效,优先级高于机器配置默认值 KERNEL_IMAGETYPE_orange-pi-zero = "zImage"
内容的提问来源于stack exchange,提问作者BlameCapitalism
相关产品推荐
相关产品推荐

