如何在Yocto中同时为sama5d4-xplained-sd与自定义机型构建镜像?
问题:Yocto中同时为sama5d4-xplained-sd和sama5d4-custom-sd构建镜像的优化方案
我正在使用Yocto的meta-atmel层,已创建新机型sama5d4-custom-sd,其配置文件sama5d4-custom-sd.conf复制自sama5d4-xplained-sd.conf,内容如下:
#@TYPE: Machine #@Name: SAMA5D4 Custom SD #@DESCRIPTION: Machine configuration for SAMA5D4 Custom board require include/sama5d4.inc MACHINE_FEATURES = "apm alsa ext2 ext3 usbhost usbgadget screen touchscreen" KERNEL_DEVICETREE = " \ at91-sama5d4_xplained.dtb \ " IMAGE_FSTYPES += " tar.gz wic" do_image_wic[depends] += "u-boot-at91:do_deploy" WKS_FILE = "sdimage-bootpart.wks" IMAGE_BOOT_FILES = "BOOT.BIN u-boot.bin uboot.env sama5d4_xplained.itb" UBOOT_MACHINE ?= "sama5d4_xplained_mmc_defconfig" UBOOT_ENTRYPOINT = "0x20008000" UBOOT_LOADADDRESS = "0x20008000" UBOOT_ENV_SIZE = "0x4000" AT91BOOTSTRAP_MACHINE ?= "sama5d4_xplained" # Needed for FIT MACHINE_ESSENTIAL_EXTRA_RDEPENDS = " dt-overlay-at91" MACHINEOVERRIDES .= "sama5d4-xplained-sd:"
其中最后一行的MACHINEOVERRIDES用于适配内核配方中的COMPATIBLE_MACHINE规则(内核配方内容如下),否则BitBake会执行失败:
COMPATIBLE_MACHINE = "(sama5d2-xplained|sama5d2-xplained-sd|sama5d2-xplained-emmc|sama5d2-ptc-ek|sama5d2-ptc-ek-sd|sama5d27-som1-ek|sama5d27-som1-ek-sd|sama5d4-xplained|sama5d4-xplained-sd|sama5d4ek|sama5d3-xplained|sama5d3-xplained-sd|sama5d3xek|at91sam9x5ek|at91sam9m10g45ek|at91sam9rlek|sama5d2-icp-sd|sam9x60ek|sam9x60ek-sd|sama5d27-wlsom1-ek-sd)"
现需实现可选择性地同时为sama5d4-xplained-sd和sama5d4-custom-sd构建镜像,已知可修改各配方的COMPATIBLE_MACHINE字段,但希望找到更优方案。
优化方案
方案1:利用BitBake多MACHINE构建特性(快速实现)
无需修改任何配方的COMPATIBLE_MACHINE,直接借助Yocto原生的多机型构建能力:
- 保持自定义机型配置不变:现有
sama5d4-custom-sd.conf中的MACHINEOVERRIDES已经确保它能复用sama5d4-xplained-sd的所有配方兼容性,无需额外调整。 - 命令行指定多机型构建:执行构建时直接同时指定两个机型,BitBake会分别生成对应镜像:
将MACHINE="sama5d4-xplained-sd sama5d4-custom-sd" bitbake <镜像配方名><镜像配方名>替换为实际要构建的镜像(如core-image-minimal)。 - 可选:配置默认多机型:如果需要默认同时构建这两个机型,可在
build/conf/local.conf中添加:
之后直接执行MACHINE = "sama5d4-xplained-sd sama5d4-custom-sd"bitbake <镜像配方名>即可自动同时构建。
方案2:创建机型继承组(适合长期维护)
如果后续可能新增更多同系列自定义机型,可通过基础配置继承的方式统一管理:
创建基础机型配置文件:比如
sama5d4-sd-base.conf,存放两个机型的通用配置:#@TYPE: Machine #@Name: SAMA5D4 SD Base #@DESCRIPTION: Base machine configuration for SAMA5D4 SD-based boards require include/sama5d4.inc MACHINE_FEATURES = "apm alsa ext2 ext3 usbhost usbgadget screen touchscreen" IMAGE_FSTYPES += " tar.gz wic" do_image_wic[depends] += "u-boot-at91:do_deploy" WKS_FILE = "sdimage-bootpart.wks" UBOOT_ENTRYPOINT = "0x20008000" UBOOT_LOADADDRESS = "0x20008000" UBOOT_ENV_SIZE = "0x4000" # Needed for FIT MACHINE_ESSENTIAL_EXTRA_RDEPENDS = " dt-overlay-at91"修改原有机型配置:让
sama5d4-xplained-sd.conf继承基础配置,只保留专属设置:#@TYPE: Machine #@Name: SAMA5D4 Xplained SD #@DESCRIPTION: Machine configuration for SAMA5D4 Xplained SD board require sama5d4-sd-base.conf KERNEL_DEVICETREE = " \ at91-sama5d4_xplained.dtb \ " IMAGE_BOOT_FILES = "BOOT.BIN u-boot.bin uboot.env sama5d4_xplained.itb" UBOOT_MACHINE ?= "sama5d4_xplained_mmc_defconfig" AT91BOOTSTRAP_MACHINE ?= "sama5d4_xplained" MACHINEOVERRIDES .= "sama5d4-xplained-sd:"调整自定义机型配置:同样让
sama5d4-custom-sd.conf继承基础配置,按需覆盖专属设置:#@TYPE: Machine #@Name: SAMA5D4 Custom SD #@DESCRIPTION: Machine configuration for SAMA5D4 Custom board require sama5d4-sd-base.conf # 自定义机型的专属配置(如设备树、UBOOT配置等)在这里覆盖 KERNEL_DEVICETREE = " \ at91-sama5d4_xplained.dtb \ " IMAGE_BOOT_FILES = "BOOT.BIN u-boot.bin uboot.env sama5d4_xplained.itb" UBOOT_MACHINE ?= "sama5d4_xplained_mmc_defconfig" AT91BOOTSTRAP_MACHINE ?= "sama5d4_xplained" MACHINEOVERRIDES .= "sama5d4-xplained-sd:"多机型构建方式同方案1:使用命令行指定或
local.conf配置默认多机型即可同时构建。
这种方式的优势是:后续新增同系列SD机型时,只需继承基础配置,无需重复编写通用字段,同时依然复用原有sama5d4-xplained-sd的兼容性规则,避免修改大量配方。
内容的提问来源于stack exchange,提问作者leo8382
相关产品推荐
相关产品推荐

