Быстрая перестройка дерева устройств только с помощью Yocto / bitbake?

Итак, каждый раз, когда я изменяю дерево устройств, я обычно изменяю dts в пользовательском рецепте и перестраиваю образ. Перестройка занимает много времени, так как она перестраивает все ядро, а затем необходимо построить образ и, наконец, развернуть его на целевом устройстве.

Есть ли какой-то трюк, который мне не хватает, который восстанавливает только дерево устройств?

ОБНОВЛЕНИЕ:

Я отметил ответ g0hl1n как правильный, так как это ответ на мой вопрос. Однако я обнаружил, что работать с ядром в Yocto очень громоздко: странные, длинные пути и риск перезаписи файлов при каждой перестройке, источник ядра в tmp / work-shared, пока ядро ​​собирается в tmp / work .

Вместо этого я перенес разработку ядра из Yocto. У Yocto есть хорошие инструменты для создания SDK (см. Задачу populate_sdk), и с их помощью легко настроить среду для разработки ядра с быстрыми перестройками и развертыванием вручную (или по сценарию). После завершения работы изменения можно перенести в рецепт с помощью git diff.

Инструкции на следующей странице были очень полезны: http://jumpnowtek.com/beaglebone/Working-on-the-BeagleBone-kernel.html


person Jonatan    schedule 12.08.2016    source источник
comment
Я думаю, что правильный ответ - нет, правильного пути нет. Пришлите, пожалуйста, патч.   -  person Jérôme Pouiller    schedule 26.03.2018


Ответы (2)


AFAIK есть два разных способа сделать это.

  1. Способ ядра: использование скриптов, предоставленных ядром
  • Перейдите в каталог исходного кода ядра (<build dir>/tmp/work/<machine>/<kernel-name>/<kernel-version>/git/)
  • Запустите компилятор дерева устройств: ./scripts/dtc/dtc -I dts -O dtb -o ./devicetree.dtb path/to/devicetree.dts
  1. способ bitbake: использование задания развертывания ядра
  • Позвоните $ bitbake <kernel-name> -f -c deploy
  • Сгенерированный блок-дерево-дерево-устройство затем можно найти в <build dir>/tmp/work/<machine>/<kernel-name>/<kernel-version>/build/arch/arm/boot/dts/)

По крайней мере, для меня обе версии работали в быстром тесте.

ОБНОВЛЕНИЕ. Я только что наткнулся на третью версию построения dtb с yocto в сети. Этот использует yocto devshell сборки ядра. Дополнительную информацию см. На странице исходных авторов по адресу https://splefty.blogspot.co.at/2015/09/compiling-device-tree-using-yocto.html.

person g0hl1n    schedule 16.08.2016
comment
Спасибо. Три хороших варианта. Я предпочитаю второй метод, поскольку он гарантированно работает так же, как и обычная сборка. И я не могу легко использовать devshell, потому что хочу автоматизировать его. Теперь, чтобы сделать его идеальным, я хотел бы запустить две задачи: bitbake ‹kernel-name› -f -c unpack, чтобы скопировать все dts и dtsi из рецепта, за которым следует 'bitbake ‹kernel-name› -f -c deploy' построить dtb. Но, к сожалению, команда unpack заставляет команду deploy перестраивать все ядро. Если бы можно было принудительно запустить "deploy" без перестройки ядра, это было бы идеально! - person Jonatan; 16.08.2016
comment
Изменение файлов из $TMPDIR не может рассматриваться как вариант. - person Jérôme Pouiller; 26.03.2018
comment
Для меня bitbake <kernel-name> -f -c deploy всегда заставляет перестраивать все ядро, что имеет тот же эффект, что и просто bitbake <kernel-name>. Я использую ядро ​​freescale, linux-fslc. Слой meta-xilinx действительно хорош тем, что предоставляет отдельный рецепт для построения только дерева устройств: github.com/Xilinx/meta-xilinx/tree/master/meta-xilinx-bsp/ - person Jetski S-type; 25.06.2018
comment
Или запустите bitbake virtual/kernel -f -c deploy - person User55412; 11.02.2020

Для меня использование bitbake для регенерации дерева устройств работало следующим образом:

Команда: $ bitbake <kernel-name> -f -c compile

Пример: $ bitbake linux-fslc -f -c compile

Протестировано с использованием йокто-сумо.

person Tobias Braune    schedule 06.09.2018
comment
Поправьте меня, если я ошибаюсь, но при этом перестраивается все ядро. Вопрос был в том, как сделать быструю компиляцию только дерева устройств. - person Jonatan; 07.09.2018
comment
Нет, он запускает make-файл ядра, но если исходное дерево не изменилось (за исключением дерева устройств), то двоичный файл ядра не регенерируется. - person Tobias Braune; 26.09.2018