Comments 13
Спасибо за статью - весьма интересно с точки зрения использования 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 под различные ситуации - возможно это вам пригодится.
Спасибо большое за ёмкий и полезный комментарий, надо будет поразбираться
А насчёт запоздалого ответа - вы правы, порой стоит отслеживать. Часто много дел и могу забыть ответить сразу, но рано или поздно отвечаю и стараюсь не оставлять без внимания ни один комментарий.
В логе XSCT есть уведомление о том, что он не рекомендован к дальнейшему использованию в виду наличия чего-то нового на Питоне.
Но, всё равно, - интересно.
Возможно я чего-то недопонял, но почему это все не делается через Vitis/Vivaldo? Туда же все эти утилиты и дебаггер встроены по умолчанию. Да и проекты там же менеджит легче.
Zynq 7000. Загрузка Embedded Linux на SoC через JTAG с помощью XSCT