загрузка u-Boot в память вместо перепрошивки - PullRequest
7 голосов
/ 07 марта 2011

На моей плате, основанной на ARM, я перезагружаю U-Boot в NAND всякий раз, когда я изменяю это.(положить некоторые отладочные операторы / модификации).Есть ли способ напрямую загружать образ uboot в оперативную память вместо того, чтобы каждый раз его перепрошивать?

Для образа ядра Linux я загружаю его в память и использую bootm для загрузки этого образа.Точно так же для U-Boot я пытаюсь.Пожалуйста, предоставьте ваши предложения.

Ответы [ 10 ]

6 голосов
/ 02 августа 2011

Кто-то из Freescale сделал это для своей системы оценки P1022DS (и некоторых других).Они предоставили несколько полезный документ о процессе в файле $ {UBOOTROOT} /doc/README.ramboot-ppc8500 (в U-Boot V2010.12).Этот документ довольно лаконичен и оставляет много вопросов без ответа, но я нашел разумное место для начала, когда мне нужно было отладить U-Boot для новой платы, до того, как флэш-память для этой платы заработала правильно.

Фактически, наличие нефункциональной флэш-памяти является одной из причин, по которой вы можете отлаживать U-Boot в оперативной памяти.(Есть несколько причин, перечисленных в README, и все они звучат довольно разумно для меня, в отличие от некоторых других советов, доступных по этому вопросу)

В нашей ситуации было обнаружено, что цель раннего прототипаАппаратное обеспечение платы включило ошибку в соединение шины адреса с флэш-памятью, что не позволило нам использовать эту флэш-память.В то время как оборудование было переработано и повторно изготовлено, мы хотели продолжить тестирование / отладку тех частей нашей конфигурации U-Boot, которые не зависели от флэш-памяти, например, I2C, Ethernet, конфигурация FPGA, PCIe и т. Д. (ТамЕсть множество вещей, которые не зависят от того, откуда берется образ U-Boot.

Запуск U-Boot после загрузки его в ОЗУ через интерфейс JTAG (с использованием Codewarrior и USB TAP) позволил нам продолжить нашЗадачи по загрузке U-Boot, хотя у нас не было функциональной флэш-памяти.Получив более новую версию целевой платы с правильно работающей флеш-памятью, мы вернулись к отладке тех частей U-Boot, которые раньше не могли протестировать.После этого U-Boot стал полностью функциональным, и нам не нужно было ждать вращения доски, чтобы добиться какого-либо прогресса.

3 голосов
/ 25 марта 2011

Отладка загрузчика немного сложна, но с правильными инструментами это должно быть относительно безболезненно.

Я имею дело с архитектурой PowerPC, а с BDI-3000 я могу загружать и отлаживать непосредственно в ОЗУ (изКонечно, после инициализации контроллера DDR).

Один из вариантов - если у вас есть встроенная SRAM или кэш-память L2, которую можно настроить как встроенную SRAM.BDI может сначала скопировать в область SRAM, u-boot делает свое дело (например, инициализировать контроллер DDR), а затем переместиться в оперативную память DDR.Определенно быстрее, чем переписывание, чтобы все время замедлять Flash.

2 голосов
/ 07 марта 2011

Это должно быть возможно, если образ U-Boot, который вы хотите запустить, имеет код запуска, который позволяет запускать его с произвольных адресов. Так ли это для вашей доски, я не могу сказать.

Если код запуска начинается с копирования раздела кода с текущего (относительного к ПК) адреса на конечный адрес выполнения (обычно этому предшествует проверка того, что эти области не перекрываются), вы можете загрузить. bin-файл на любой адрес в оперативной памяти и вызовите его, используя go.

Вторым препятствием, которое я мог видеть, был бы безусловный код настройки ОЗУ в начале, который есть у нескольких плат.

2 голосов
/ 07 марта 2011

Это было невозможно в 2004 году , по крайней мере.

0 голосов
/ 08 января 2019

Да, возможно, большая часть структуры компиляции в конце U-Boot предоставляет файл u-boot.bin, который является сплющенным двоичным файлом, если ваша цель поддерживает USB / TFTP или любой другой носитель, который может использовать текущая U-boot определить в вашей целевой среде, затем мы можем загрузить файл u-boot.bin в область статической памяти. Этот адрес является точкой входа в код U-Boot, и U-boot может выполнить распрямленные двоичные файлы на go 0x<memory_address>. Область адреса статической памяти может быть выведена из файла u-boot.map. Эта точка входа в основном является адресом области .text скомпилированной программы, которую обычно можно искать в файле .map со строкой «Address of section .text, установленной в 0x». «. Ниже приведен пример этого с USB.

usb start
load usb 0x<memory_address> u-boot.bin
go 0x<memory_address>

Это должно запустить U-Boot с USB без использования текущего кода.

0 голосов
/ 25 декабря 2016

Это то, что можно прочитать в FAQ по документации по u-boot:

Вопрос: я не хочу стирать флэш-память, потому что я не уверен, что мой новый U-Bootизображение будет работать.Можно ли настроить U-Boot таким образом, чтобы я мог загружать его в оперативную память вместо флэш-памяти и запускать из моего старого загрузчика?

Ответ: Нет. (Если вы не используете процессор Blackfin или плату Socfpga, но, вероятно, это не так.)

Вопрос: Но мне сказали, что это возможно??

Ответ: Ну да.Конечно, это возможно.Это программное обеспечение, так что все возможно.Но это сложно, без поддержки и чревато опасностями.Вы по своему усмотрению, если вы решите это сделать.И это не поможет вам решить вашу проблему.

источник: http://www.denx.de/wiki/view/DULG/CanUBootBeConfiguredSuchThatItCanBeStartedInRAM

0 голосов
/ 27 октября 2015

Вы можете использовать загрузочный USB. TI и Freescale предоставляют свои утилиты загрузки USB. Я не знаю о других продавцах.

0 голосов
/ 19 апреля 2013

Если ваша целевая плата поддерживает загрузку по сети, вы можете загрузить образ загрузки с хост-машины в оперативную память через сеть.

0 голосов
/ 21 марта 2011

Просто имейте в виду (будьте осторожны) оборудование, которое вы конфигурируете в своем модифицированном U-Boot. U Boot предназначен для инициализации критических модулей, некоторые из них не могут быть перенастроены на лету или могут не работать, как если бы они были инициализированы / настроены при запуске.

0 голосов
/ 10 марта 2011

Проблема в том, что то, что вы пытаетесь сделать, идет вразрез с философией того, что такое загрузчик.Большинство процессоров требуют, чтобы код начинался с Flash.Этот код называется загрузчиком. То, что - это и есть U-boot.

Однако, если вы хотите изменить U-boot так, чтобы он не был настоящим загрузчиком, вы можете делать все, что захотите.Это просто программное обеспечение.Но не ожидайте никакой основной поддержки по вышеуказанным причинам.

...