Как стать автором
Обновить

Zynq 7000. Загрузка Embedded Linux на SoC через JTAG с помощью XSCT

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров4K
Всего голосов 45: ↑45 и ↓0+59
Комментарии12

Комментарии 12

Спасибо за статью - весьма интересно с точки зрения использования XSCT. Сколько по времени в итоге занимает загрузка - от загрузки первого компонента до промпта Linux ?

Почему использовали несжатые образы kernel и rootfs ?

В принципе если использовать FIT Image тогда не придется жестко прописывать адреса в скриптах, они будут браться из Device Tree FIT Image и U-Boot Proper будет сам распаковывать и размещать по адресам.

Поскольку видимо не в привычках автора, отвечать на вопросы, позволю себе некоторые ремарки:

Обычно эволючионный процесс разработки идет в обратную сторону, нежели описал автор - мы начинаем с загрузки файлов по JTAG и постепенно отказываемся от неё по следующим причинам:

  • загрузка может занимать колоссальное время от "Поковырялся в носу, попил кофе и забыл что делал" до "Два раза загрузил - рабочий день закончился";

  • по причинам выше мы не можем использовать нормальный rootfs, максимум маленький buildroot или даже просто busybox;

  • в любом случае нужна сеть, скопировать dmesg, log, perf data и прочее, это просто удобно;

Сжатые kernel и rootfs уже могут нам давать ускорение в несколько раз, замерить можно следующим образом:

  • инициализировать UART через OpenOCD (просто пишем всё, что необходимо, в соответсвующие регистры);

  • вывести привественную строку и начать загрузку компонентов;

  • померять время, например, с помощью grabserial;

Использование же FIT Image (https://docs.u-boot.org/en/latest/usage/fit/index.html) даёт нам некоторую независимость от жестко прописанных адресов в случае загрузки "по частям",
тогда нам, в большинстве случаев, потребуются два жестких адреса - U-Boot SPL и адрес загруженного в память FIT Image.

Но, конечно, всё это не сравнится по скорости и удобству с загрузкой по сети и использовании корневой файловой системы поверх NFS, поэтому я рекомендую направить усилия именно в эту сторону, вплоть до использования SPI Ethernet модуля, если по каким то причинам нет возможности использовать полноценный контроллер.

И конечно всегда интересно посмотреть на замеры времени загрузки.

Да, я с вами согласен. До реализации этого мне ещё расти и расти. Я тут всего лишь учусь и выкладываю то, что недавно освоил :)

Спасибо за приятный отзыв! Если честно не замерял по времени, но получается значительно быстрее, чем при подготовке загрузочного образа и закидывания его на microSD. В среднем, загрузка после сбора основных компонент около минуты через JTAG.

Образы сжатые lzma, cpio, точно не помню.

Да, но в случае если идёт отладка отдельных компонент, например, Device Tree - мой способ более предпочтителен, если нет автоматизации на TCL/Bash.

Об этой автоматизации хочу написать в следующий раз, что просто кормим XSA в скрипт и он собирает нам BOOT.BIN, да ещё и с загрузкой по TFTP черезтU-Boot.

В таком случае в первую очередь пожалуйста примите мои извинения за поспешный вывод:

Поскольку видимо не в привычках автора, отвечать на вопросы, позволю себе некоторые ремарки:

Что касается вашего ответа:

Да, но в случае если идёт отладка отдельных компонент, например, Device Tree

На самом деле на практике получается, что одно и то же время, поскольку все равно компоненты каждый раз загружать заново. Во-вторых можно распаковывать FIT в память и менять, допустим, только Device Tree т.е. записывать его поверх распакованного, хотя с ядром или rootfs это уже будет нецелесообразно.

Сборка FIT из готовых компонентов это ничтожная часть времени от затраченной на сборку всех частей.

UPD:

Получается, что образы несжатые:

Image Type: ARM Linux Kernel Image (uncompressed)

Image Type: ARM Linux RAMDisk Image (uncompressed)

И кстати говоря

Loading Environment from FAT... *** Error - No Valid Environment Area found

U-Boot поддерживает чтение ENV в том числе из памяти с указанием адреса, т.е. вы можете загружать заранее сформированные ENV под различные ситуации - возможно это вам пригодится.

Спасибо большое за ёмкий и полезный комментарий, надо будет поразбираться

А насчёт запоздалого ответа - вы правы, порой стоит отслеживать. Часто много дел и могу забыть ответить сразу, но рано или поздно отвечаю и стараюсь не оставлять без внимания ни один комментарий.

А как можно повторить шаги по вашей инструкции? Вы можете дать ссылку на упомянутые вами файлы?

Вы про загрузочные артефакты? Их надо руками самому собирать. Готовлю еще одну статью по этому поводу. Либо можете в списке моих статей найти how-to по сборке Linux для Zynq

В логе XSCT есть уведомление о том, что он не рекомендован к дальнейшему использованию в виду наличия чего-то нового на Питоне.

Но, всё равно, - интересно.

Хм. Любопытно, надо будет почитать)

Возможно я чего-то недопонял, но почему это все не делается через Vitis/Vivaldo? Туда же все эти утилиты и дебаггер встроены по умолчанию. Да и проекты там же менеджит легче.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий