Quantum1 0 2 апреля, 2023 Опубликовано 2 апреля, 2023 (изменено) · Жалоба Добрый день! Пытаюсь то конца разобраться как же происходит передача управления твоему коду(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? Подскажите пожалуйста. Просто привык если, что то делать понимать досконально что происходит. Изменено 2 апреля, 2023 пользователем Quantum1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 13 апреля, 2023 Опубликовано 13 апреля, 2023 · Жалоба В 02.04.2023 в 14:31, Quantum1 сказал: Как начинается выполнение твоего кода? После загрузки пользовательской программы, FSBL передает управление ей - переходом по адресу Entry point. Вроде бы доки в сети доступны, курите их и закрепляйте практикой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quantum1 0 16 апреля, 2023 Опубликовано 16 апреля, 2023 (изменено) · Жалоба On 4/13/2023 at 9:17 PM, sonycman said: После загрузки пользовательской программы, FSBL передает управление ей - переходом по адресу Entry point. Вроде бы доки в сети доступны, курите их и закрепляйте практикой. Это понятно, но кто и как выполняет загрузку пользовательской программы? Изменено 16 апреля, 2023 пользователем Quantum1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 16 апреля, 2023 Опубликовано 16 апреля, 2023 · Жалоба применительно к zynq --- FSBL загружает и запускает программу пользователя и прошивку плисы докучи. По идее это всё прописано в документации... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quantum1 0 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба On 4/16/2023 at 8:44 PM, Alex77 said: применительно к zynq --- FSBL загружает и запускает программу пользователя и прошивку плисы докучи. По идее это всё прописано в документации... Сгенерированный код FSBL смотриться в Vitis, и его спокойно можно разобрать на конкретные этапы - настройка тактирования, периферии, памяти, изоляции ну итд... Но в нем !нет куска! который брал бы и к примеру копировал пользовательскую программу по выбранному адресу, FSBL обрывается на настройках.... отсюда и вопрос, при создании бутлодеров Vitis сам дописывает эту загрузку? Т.е. пользователю ее код просмотреть и проконтролировать невозможно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 24 апреля, 2023 Опубликовано 24 апреля, 2023 · Жалоба Спросим по другому : Какие UG были прочитаны (или хотя бы просмотрены) на тему загрузки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 1 26 апреля, 2023 Опубликовано 26 апреля, 2023 · Жалоба В 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 минут 👀 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quantum1 0 23 декабря, 2023 Опубликовано 23 декабря, 2023 (изменено) · Жалоба 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. может у меня сами куски эти какие-то кривые, почему то. Изменено 23 декабря, 2023 пользователем Quantum1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться