У меня нет прямого опыта работы с ZyBo, однако мне случалось быть в подобной ситуации в разное время, и я научился собирать информацию из Интернета (даже до Интернета) и заполнить пробелы бит обратной инженерии, а затем проб и ошибок.
Я собрал то, что я считаю полезной информацией, но у меня никогда не было ZyBo, поэтому возьмите это с солью.
Кроме того, потребуется время, чтобы прочитать связанный документ, если вы не понимаете какую-либо терминологию.
кажется, что вы можете избежать часть Vivado SDK и IDE, то Zynq 7000 Software Developer guide в Приложении А описывает использование bootgen
и BIF
файлов для создания загрузочного образа.
В терминологии Zybo загрузочный образ содержит заголовок BootROM и загрузчик первой ступени (этап 1 этапа процесса начальной загрузки, он также содержит код пользователя).
Обратите внимание, что сам BootROM не доступен для записи, поэтому вы не можете изменить этап 0, если не найдете способ взломать его (это не отличная идея, но этап 0 делает минимальный объем работы и делает плату пригодной для использования) ,
Пример из этого ручного
// A simple BIF file example.
the_ROM_image:
{
[init]init_data.int
[bootloader]myDesign.elf
Partition1.bit
Partition1.rbt
Partition2.elf
}
И руководство явно говорит, что ELF является поддерживаемый формат файла (по крайней мере, я надеюсь, что это что ELF).
Таким образом, вы можете использовать GCC для создания ARM ELF, а не bootgen
, чтобы создать загрузочный образ (конечно, не C Runtime).
Бинарные файлы также поддерживаются, поэтому любой ARM-ассемблер будет работать.
Это должно избегать любого кода инициализации SDK, оставив только этап 0, выполняемый перед вашим кодом.
Zynq 7000 Technical Reference Manual подробно описывает формат заголовка BootROM.
Он также объясняет различные аппаратные компоненты и принятые архитектурные решения, включая процесс загрузки и различные варианты голого металла.
Так что вы можете даже избавиться от bootgen
и сделать свой собственный инструмент.
В заголовке BootROM есть поле для определения таблицы прерываний, когда в режиме XIP, однако, как сказано, это BootROM, первый код выполнен, поэтому вы не начинаете с вектора сброса ARM.
Я не знакомы с SDK, но я уверен, что если вы шпионить вокруг папки SDK бен вы найдете много обычных GNU инструментов для ARM набора инструментов (в значительной степени как это происходит для Android NDK).
XILINX утверждает, что в одном из своих документов (увы, я не помню, какой) они использовали стандартные инструменты GNU с небольшими дополнениями.
Как для избежания архивов XILINX вы можете попытаться прочитать их источник если имеющийся или дизассемблировать их двоичные файлы.
С помощью Технического справочника вы должны быть в состоянии избежать их в первую очередь.
XILINX делает большую работу, описывающую ее совет по двум документам, связанных (а shorter one is here), чтение и объяснит много вещей происходит под капотом.
Обычно продавцы повторно используют существующие инструменты, поэтому, если XILINX не разработал свои собственные, вы должны найти инструменты командной строки, используемые знакомой средой.
И вы можете даже полюбить Vivado SDK, зная, как он работает в глубине!
Большое спасибо за информацию. Я очень хорошо выкопал оба этих документа, и он отлично справляется с архитектурой и «чем», но у них мало информации о том, «как» (в частности, «как» получить бинарный на darn вещь), чтобы делать что-либо вне среды SDK. – Brett
не могли бы вы прояснить, что вы подразумеваете под «no C runtime» в своем заявлении: «Таким образом, вы можете использовать GCC для генерации ARM ELF, а не bootgen, чтобы сделать загрузочный образ (конечно, не C Runtime)». – Brett
@ В то время как среда выполнения C (например, 'printf' и др.) Привязана к определенной архитектуре. Если у вас нет C lib для ZyBo, вы не можете их использовать. –