2016-01-19 2 views
2

Я хочу знать, если есть возможность создать машину конкретных рецепты только по имени файла для того, чтобы у меня есть такая же слоистая структура, как это:Как я могу создать конкретные рецепты для машины?

\-> recipes-example 
    \-> example 
     \-> example_1.0.bb_machine1 
     \-> example_1.0.bb_machine2 

Я прочитал почти полное Yocto Documentation некоторого время назад подумал, что однажды наткнулся на эту возможность, чтобы создать конкретные рецепты машины, но не мог ее переделать.

Альтернативы также ценится, однако я знаю о Баше решениях, как этот пример:

do_install() { 
    case ${MACHINE} in 
     < case statements [...] > 
} 

ответ

9

Нет, нет никакого способа, чтобы создать рецепт машинно-зависимый только по имени.

Предполагая, что есть только несколько файлов/патчи, которые отличаются, наиболее распространенным способом сделать это было бы добавить различные файлы в определенном каталоге машины смотри, например:

\-> recipes-example 
    \-> example 
    \-> example 
     \-> machine1 
     \-> defconfig 
     \-> mach1.patch 
     \-> machine2 
     \-> defconfig 
    \-> defconfig 

Это позволит вам писать такие вещи, как: (. Обратите внимание, что в моем примере, есть общий файл defconfig, и две машины конкретных из них правильный один будет автоматически выбран из-за MACHINEOVERRIDES)

SRC_URI += "file://defconfig" 
SRC_URI_machine1 += "file://mach1.patch" 

в этом примере mach1.patch будет применяться только за machine1.

Если вам нужно сделать что-то особенное для машины, например. do_install, вы можете использовать:

do_install_append_machine1() { 
    do something here 
} 

UPDATE: (после того, как graugans комментарий)

Да, COMPATIBLE_MACHINE также могут быть использованы. Одним из способов было бы создать example-mach1.bb, example-mach2.bb и exampe-machs.bb который включал бы пару строк, таких как:

PROVIDES += "virtual/example" 
COMPATIBLE_MACHINE = "machine1" 

и `example-machs.bb»

PROVIDES += "virtual/example" 
COMPATIBLE_MACHINE = "(machine3|machine4)" 

В рецепте изображения, вы затем добавляете IMAGE_INSTALL += "virtual/example".

+0

Хорошо спасибо за ответ, последняя часть мне очень помогла, могу ли я также использовать 'do_install_append_machine1_machine2', чтобы использовать ту же функцию для двух машин, или мне нужно создать функцию дважды, тогда – h0ch5tr4355

+0

Нет, это невозможно. Хотя вы можете использовать что-то похожее на SOC_FAMILY в http://git.openembedded.org/openembedded-core/tree/meta/conf/machine/include/soc-family.inc, чтобы создать семейство ваших машин. – Anders

+0

Хорошо, но я могу создать несколько методов 'do_install()' для разных машин в одном рецепте, не так ли? 'do_install()', 'do_install_mach1()' и 'do_install_mach2()' как пример – h0ch5tr4355

Смежные вопросы