Yocto найти рецепт или класс, который определяет задачу - PullRequest
0 голосов
/ 13 ноября 2018

Я - ньюс-нуб, пытаюсь расшифровать, как строится дерево устройств, из файла определения оборудования Xilinx (.hdf).Но мой вопрос более общий.

Есть ли способ поиска источника задачи?По названию задачи можно ли найти, где находится исходный код задачи?(предположительно в рецепте или классе)

В качестве примера, где находится источник задачи Python do_create_yaml, который вызывается по рецептам в слое meta-xilinx-bsp, которые компилируют блоб дерева устройств?

bitbake -e device-tree

Выводит исходный код Python для do_create_yaml (среди остального этого потрясающего вывода), но как я могу найти, откуда это приходит?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я обнаружил, что хранилище данных содержит имя файла для задач в виде 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.

0 голосов
/ 13 ноября 2018

Дерево устройств является частью ядра Linux. В Yocto это скомпилировано из KERNEL_DEVICETREE значения переменной, определенного как часть рецепта ядра Linux или конфигурации компьютера.

Например, для cubieboard7, как определено здесь ,

KERNEL_DEVICETREE = "s700_cb7_linux.dtb"

указывает компиляции использовать этот dts файл для компиляции. Это делается с помощью различных классов.

В нашем примере мы 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.

...