代码之家  ›  专栏  ›  技术社区  ›  Mark

Yocto变量未定义,但用u2;运算符设置

  •  0
  • Mark  · 技术社区  · 5 年前

    我正在努力解决一些我不确定的问题。

    在Yocto环境中(顺便说一下,对于STM32MP1),我必须配置一个新的目标。 meta-st/meta-st-stm32mp/conf/machine/include/st-machine-extlinux-config-stm32mp.inc 此部分看起来像其他可用部分:

    EXTLINUX_BOOTDEVICE_EMMC      = "mmc1"
    EXTLINUX_BOOTDEVICE_SDCARD    = "mmc0"
    
    EXTLINUX_ROOT_EMMC         = "${@bb.utils.contains('ST_VENDORFS','1','root=/dev/mmcblk1p4','root=/dev/mmcblk1p3',d)}"
    EXTLINUX_ROOT_NAND         = "ubi.mtd=UBI rootfstype=ubifs root=ubi0:rootfs"
    
    # Define available targets to use
    UBOOT_EXTLINUX_CONFIGURED_TARGETS += "mp151a_sdcard"
    UBOOT_EXTLINUX_CONFIGURED_TARGETS += "mp151a_emmc"
    
    # Define bootprefix for each target
    UBOOT_EXTLINUX_BOOTPREFIXES_mp151a_sdcard       = "${EXTLINUX_BOOTDEVICE_SDCARD}_stm32mp151a_"
    UBOOT_EXTLINUX_BOOTPREFIXES_mp151a_emcc       = "${EXTLINUX_BOOTDEVICE_EMCC}_stm32mp151a_"
    
    # Define labels for each target
    UBOOT_EXTLINUX_LABELS_mp151a_sdcard       = "stm32mp151a-sdcard"
    UBOOT_EXTLINUX_LABELS_mp151a_emcc       = "stm32mp151a-emcc"
    
    # Define default boot config for each target
    UBOOT_EXTLINUX_DEFAULT_LABEL_mp151a_sdcard       ?= "stm32mp151a-sdcard"
    UBOOT_EXTLINUX_DEFAULT_LABEL_mp151a_emcc       ?= "stm32mp151a-emcc"
    
    # Define FDT overrides for all labels
    UBOOT_EXTLINUX_FDT_stm32mp151a-sdcard       = "/stm32mp151a.dtb"
    UBOOT_EXTLINUX_FDT_stm32mp151a-emcc       = "/stm32mp151a.dtb"
    
    # Define ROOT overrides for all labels
    UBOOT_EXTLINUX_ROOT_stm32mp151a-sdcard       = "${EXTLINUX_ROOT_SDCARD}"
    UBOOT_EXTLINUX_ROOT_stm32mp151a-emcc       = "${EXTLINUX_ROOT_EMCC}"
    

    但是当我 bitbake <image> (包括上面的文件)我得到以下输出:

    DEBUG: Executing python function update_extlinuxconf_targets
    NOTE: UBOOT_EXTLINUX_CONFIGURED_TARGETS:  mp157a-dk1_sdcard mp157a-dk1_sdcard-optee mp157c-dk2_sdcard mp157c-dk2_sdcard-optee mp157c-ed1_emmc mp157c-ed1_emmc-optee mp157c-ed1_sdcard mp157c-ed1_sdcard-optee mp157c-ev1_emmc mp157c-ev1_emmc-optee mp157c-ev1_nand mp157c-ev1_nor-sdcard mp157c-ev1_nor-emmc mp157c-ev1_sdcard mp157c-ev1_sdcard-optee mp151a_sdcard mp151a_emmc
    NOTE: UBOOT_EXTLINUX_CONFIG_FLAGS:  emmc    sdcard
    NOTE: *** Loop for config_label: emmc
    NOTE: *** Loop for devicetree: stm32mp151a
    NOTE: >>> New target label: mp151a_emmc
    NOTE: >>> Append mp151a_emmc to UBOOT_EXTLINUX_TARGETS
    NOTE: *** Loop for config_label: sdcard
    NOTE: *** Loop for devicetree: stm32mp151a
    NOTE: >>> New target label: mp151a_sdcard
    NOTE: >>> Append mp151a_sdcard to UBOOT_EXTLINUX_TARGETS
    NOTE: >>> UBOOT_EXTLINUX_TARGETS (updated):  mp151a_emmc mp151a_sdcard
    DEBUG: Python function update_extlinuxconf_targets finished
    DEBUG: Executing python function do_create_multiextlinux_config
    ERROR: UBOOT_EXTLINUX_ROOT not defined
    DEBUG: Python function do_create_multiextlinux_config finished
    ERROR: Function failed: do_create_multiextlinux_config
    

    但它找不到 UBOOT_EXTLINUX_ROOT 即使是“设定”了 _ 操作员:

    UBOOT_EXTLINUX_ROOT_stm32mp151a-sdcard       = "${EXTLINUX_ROOT_SDCARD}"
    UBOOT_EXTLINUX_ROOT_stm32mp151a-emcc       = "${EXTLINUX_ROOT_EMCC}"
    

    UBOOT_EXTLINUX_ROOT = ""
    

    UBOOT_EXTLINUX_ROOT = "root=/dev/mmcblk1p4"
    

    看看是不是有问题,但这并不能改变什么。 meta-st ) ?

    上面的错误应该由 this 文件:

    root = localdata.getVar('UBOOT_EXTLINUX_ROOT')
    if not root:
        bb.fatal('UBOOT_EXTLINUX_ROOT not defined')
    

    更新

    我检查了(巨大的)产量 bitbake -e 在我看到的其他目标中:

    # $UBOOT_EXTLINUX_ROOT [41 operations]
    [...]
    #     "${EXTLINUX_ROOT_NOREMMC}"
    #   override[stm32mp157c-ev1-m4-examples-sdcard]:set /local/STM32MP15-Ecosystem-v1.1.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-10-09/layers/meta-st/meta-st-stm32mp/conf/machine/include/st-machine-extlinux-config-stm32mp.inc:274
    #     "${EXTLINUX_ROOT_SDCARD}"
    #   override[stm32mp157c-ev1-m4-examples-sdcard-optee]:set /local/STM32MP15-Ecosystem-v1.1.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-10-09/layers/meta-st/meta-st-stm32mp/conf/machine/include/st-machine-extlinux-config-stm32mp.inc:275
    #     "${EXTLINUX_ROOT_SDCARD_OPTEE}"
    #   override[stm32mp151a-sdcard]:set /local/STM32MP15-Ecosystem-v1.1.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-10-09/layers/meta-st/meta-st-stm32mp/conf/machine/include/st-machine-extlinux-config-stm32mp.inc:296
    #     "${EXTLINUX_ROOT_SDCARD}"
    #   override[stm32mp151a-emcc]:set /local/STM32MP15-Ecosystem-v1.1.0/Distribution-Package/openstlinux-4.19-thud-mp1-19-10-09/layers/meta-st/meta-st-stm32mp/conf/machine/include/st-machine-extlinux-config-stm32mp.inc:297
    [...]
    # pre-expansion value:
    #   ""
    UBOOT_EXTLINUX_ROOT=""
    
    # $UBOOT_EXTLINUX_ROOT_cubemx-nor-sdcard
    UBOOT_EXTLINUX_ROOT_cubemx-nor-sdcard="root=/dev/mmcblk0p3"
    # $UBOOT_EXTLINUX_ROOT_cubemx-sdcard
    UBOOT_EXTLINUX_ROOT_cubemx-sdcard="root=/dev/mmcblk0p6"
    # $UBOOT_EXTLINUX_ROOT_stm32mp151a-emcc
    UBOOT_EXTLINUX_ROOT_stm32mp151a-emcc="\${EXTLINUX_ROOT_EMCC}"
    # $UBOOT_EXTLINUX_ROOT_stm32mp151a-sdcard
    UBOOT_EXTLINUX_ROOT_stm32mp151a-sdcard="root=/dev/mmcblk0p6"
    

    ${EXTLINUX_ROOT_EMCC} -我不明白你在哪儿 \ 来自) 但是主变量仍然是空的。

    UBOOT_EXTLINUX_ROOT = "root=/dev/mmcblk1p4" 在上面文件的开头,似乎是这样做的(即使在我写相反的东西之前,也许我忘记清除缓存了?),但我认为这不是正确的方法。

    0 回复  |  直到 5 年前
        1
  •  0
  •   MrCryo    3 年前

    您应该指定所需的计算机名称作为要生成的目标,即:

    MACHINE=stm32mp151a-sdcard bitbake <image>
    

    这样,UBOOT\u EXTLINUX\u ROOT获取非空值“ROOT=/dev/mmcblk0p6”(来自变量的UBOOT\u EXTLINUX\u ROOT\u stm32mp151a-sdcard变量)。