Перейти к содержанию
    

Как происходит hand off при boot'е Zynq Ultrascale?

Добрый день! 
Пытаюсь то конца разобраться как же происходит передача управления твоему коду(bare metal) после загрузки на Zynq Ultrascale.
Итак как я понимаю процесс загрузки, к примеру с SD. После подтверждения качества питания  разными POR, опрашиваются ножки откуда идет загрузка. Допустим там стоит SD. Теперь в PMU выполняет некий заранее прописаный производителем в ROM код для поиска boot на SD, находит валидный FSBL, в котором прописано на каком проце он будет исполняться (APU, RPU), PMU ROM загружает его в OCM. Исполняет выбранный проц. Происходит настройка разных конфигураций, переферии ну и т.д.  (паралельно загружая пользовательский код для PMU в OCM)
А вот с этого момента у меня начинается туман. В своем фирменном пространно-водяном стиле написания даташитов, Xilinx вещает - после того как ваш FSBL выполнится, PMU сделает hand off и передаст управление целевому процессору, в сама перейдет в следующий partition(если он есть) для продолжения boot'а ... замечательно но нифига не понятно...

Вопрос номер раз: Как начинается выполнение твоего кода?
Если мы допустим грузимся с QSPI, то тут я могу предположить (так как адресов на 512Мб для QSPI, есть в адресном пространстве самого ZU), что после выполнения последней FSBL команды, линкер ставит указатель на первый адрес твоей проги в QSPI - да и всё - с нее начинаем работать и полетели... (кстати прав ли я в своих догадках, поправьте если что)...

А если не с QSPI, а с SD? Ее адресов нет в адресном пространстве. Я сначала был уверен, что сам FSBL копирует(ну то есть фактически ручками) твой код с SD на DDR или OCM по указанному адресу. И далее после последней команды FSBL линкер дает указание на первый адрес твоей проги но уже в DDR или OCM. Но внимательно проанализировав FSBL из нескольких примеров, я не нашел что бы он сам это делал. Т.е. я не могу влезть или увидеть какой конкретный код это делает, потому что его попросту нет.
Т.е. после его окончания опять вступает в ход некий производительский ROM который копирует твою прогу по целевому адресу, и линкует на нее проц? Или при создании бутлодера, сам Vitis дописывает после твоего кода FSBL(или partition), некий свой код который делает эту загрузку? Ну т.е. само ядро загружает в DDR для себя пользовательскую программу.

Вопрос номер два: 

Допустим мы выполнили FSBL RPU и начали выполнять пользовательскую программу. НО! В это время происходит загрузка своих partition на другие ядра! Т.е. мы начинаем исполнять код на ядре, когда еще не вся система сконфигурировалась... и мы в своем коде должны руками какие то реперы прописывать, что бы ядро ждало пока все другие откликнуться и подтвердят, что они загрузились? Я верно понимаю? Или линкер передает адрес пользовательской программы ядрам, только после обработки всех partition и завершения boot?


Подскажите пожалуйста. Просто привык если, что то делать понимать досконально что происходит.

Изменено пользователем Quantum1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 02.04.2023 в 14:31, Quantum1 сказал:

Как начинается выполнение твоего кода?

 

После загрузки пользовательской программы, FSBL передает управление ей - переходом по адресу Entry point.

Вроде бы доки в сети доступны, курите их и закрепляйте практикой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/13/2023 at 9:17 PM, sonycman said:

После загрузки пользовательской программы, FSBL передает управление ей - переходом по адресу Entry point.

Вроде бы доки в сети доступны, курите их и закрепляйте практикой.

Это понятно, но кто и как выполняет загрузку пользовательской программы?

Изменено пользователем Quantum1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

применительно к zynq --- FSBL  загружает и запускает программу пользователя и прошивку плисы докучи. По идее это всё прописано в документации...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/16/2023 at 8:44 PM, Alex77 said:

применительно к zynq --- FSBL  загружает и запускает программу пользователя и прошивку плисы докучи. По идее это всё прописано в документации...

Сгенерированный код FSBL смотриться в Vitis, и его спокойно можно разобрать на конкретные этапы - настройка тактирования, периферии, памяти, изоляции ну итд... Но в нем !нет куска! который брал бы и к примеру копировал пользовательскую программу по выбранному адресу, FSBL обрывается на настройках.... отсюда и вопрос, при создании бутлодеров Vitis сам дописывает эту загрузку? Т.е. пользователю ее код просмотреть и проконтролировать невозможно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спросим по другому : Какие UG были прочитаны (или хотя бы просмотрены) на тему загрузки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 24.04.2023 в 15:05, Quantum1 сказал:

Сгенерированный код FSBL смотриться в Vitis, и его спокойно можно разобрать на конкретные этапы - настройка тактирования, периферии, памяти, изоляции ну итд... Но в нем !нет куска! который брал бы и к примеру копировал пользовательскую программу по выбранному адресу, FSBL обрывается на настройках.... отсюда и вопрос, при создании бутлодеров Vitis сам дописывает эту загрузку? Т.е. пользователю ее код просмотреть и проконтролировать невозможно?

Как это нет? 

Да в том-же xfsbl_main.c функция main:

XFSBL_STAGE3: Load the partitions: XFsbl_PartitionLoad - загрузка пользовательской программы.

XFSBL_STAGE4: Handoff to the applications: XFsbl_Handoff - запуск программы.

 

Всё это находится за 5 минут 👀

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/26/2023 at 1:01 PM, sonycman said:

Как это нет? 

Да в том-же xfsbl_main.c функция main:

XFSBL_STAGE3: Load the partitions: XFsbl_PartitionLoad - загрузка пользовательской программы.

XFSBL_STAGE4: Handoff to the applications: XFsbl_Handoff - запуск программы.

 

Всё это находится за 5 минут 👀

 

 

У меня в этих кусках нет никакой загрузки. Больше скажу там даже нет никакой работы с DDR.

может у меня сами куски эти какие-то кривые, почему то.

Изменено пользователем Quantum1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...