【问题标题】:Yocto find the recipe or class that defines a taskYocto 查找定义任务的配方或类
【发布时间】:2018-11-13 19:17:21
【问题描述】:

我是一个 yocto 菜鸟,试图破译设备树是如何从 Xilinx 硬件定义 (.hdf) 文件构建的。但我的问题更笼统。

有没有 yocto 方法可以找到任务的来源? 给定任务名称是否可以找到任务源代码所在的位置? (大概在食谱或课程中)

例如,Python 任务 do_create_yaml 的源代码在哪里,该任务由编译设备树 blob 的 meta-xilinx-bsp 层中的配方调用?

bitbake -e device-tree

将转储 do_create_yaml 的 python 源代码(在其余的惊人输出中),但我怎样才能找到它的来源?

【问题讨论】:

    标签: yocto xilinx device-tree


    【解决方案1】:

    设备树是 Linux 内核的一部分。在 Yocto 中,这是从 KERNEL_DEVICETREE 变量值编译而来的,该变量值定义为 Linux 内核配方或机器配置的一部分。

    例如,对于定义为here 的cubieboard7,

    KERNEL_DEVICETREE = "s700_cb7_linux.dtb"
    

    指示编译使用thisdts 文件进行编译。这是 yocto 通过使用各种类来完成的。

    our example,我们inherit kernel.bbclass,然后inherits kernel-devicetree.bbclass,在这个类中(从kernel-devicetree.bbclass复制),

    do_compile_append() {
            for dtbf in ${KERNEL_DEVICETREE}; do
                    dtb=`normalize_dtb "$dtbf"`
                    oe_runmake $dtb
            done
    }
    
    do_install_append() {
            for dtbf in ${KERNEL_DEVICETREE}; do
                    dtb=`normalize_dtb "$dtbf"`
                    dtb_ext=${dtb##*.}
                    dtb_base_name=`basename $dtb .$dtb_ext`
                    dtb_path=`get_real_dtb_path_in_kernel "$dtb"`
                    install -m 0644 $dtb_path ${D}/${KERNEL_IMAGEDEST}/$dtb_base_name.$dtb_ext
            done
    }
    
    do_deploy_append() {
            for dtbf in ${KERNEL_DEVICETREE}; do
                    dtb=`normalize_dtb "$dtbf"`
    

    这会附加任务以编译、安装和部署任务。所以定义KERNEL_DEVICETREE可以自动构建dtb。

    【讨论】:

    • 感谢您的回复,我已更改问题的措辞,因为它将问题与与设备树相关的示例混为一谈。我的问题是“有没有办法找到任务的定义位置、源代码所在的位置?”顺便说一句:对于 Xilinx SoC,设备树的情况很复杂,因为设备可以在可编程逻辑 (PL) 中实现,blob (.dtb) 是从 .dtsi 片段构建的 .dts 编译的,其中一个片段包含信息来自 PL 的硬件定义 (.hdf)。
    • @Codemonkey:所以你想知道do_compiledo_configure和类似任务的位置?
    • 是的,虽然我对非 OE 默认的,自定义的更感兴趣。 bitbake 的 -e 标志为您提供了包含活动任务定义的配方的环境,但不知道定义的来源。我想知道是否有办法找出答案。
    【解决方案2】:

    我发现数据存储包含任务的文件名作为 VarFlag, 来自 devpyshell

    pydevshell> d.getVarFlags("do_create_yaml")
    

    给予

    {'filename': '.....yocto/sources/core/../meta-xilinx-tools/classes/xsctyaml.bbclass', 'lineno': '61', 'func': 1, 'task': 1, 'python': '1', 'deps':   ['do_prepare_recipe_sysroot']}
    

    因此,对于我的问题中的示例,do_create_yaml 任务的活动定义位于 xsctyaml.bbclass 中。

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2018-11-17
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多