Заменить загрузчик на sama5d3 из работающей системы linux

Я хотел бы заменить загрузчик первого этапа во флэш-памяти nand в системе на базе sama5d36, работающей под управлением 4.1.0-linux4sam_5.1 и buildroot-2016.02.

Я вполне могу заменить образ ядра на flashcp, но когда я пробую это с загрузчиком, flashcp работает без ошибок, но после этого система не загружается, остается на приглашении ROMBOOT.

buildroot:~# flashcp -v at91bootstrap.bin /dev/mtd0
Erasing block: 1/1 (100%) 
Writing kb: 14/14 (100%) 
Verifying kb: 14/14 (100%) 
buildroot:~# reboot
[...]
Sent SIGKILL to all processes
Requesting system reboot
�RomBOOTRestarting system

Тогда я могу написать тот же образ загрузчика с sam-ba, и он загрузится, так что образ хороший. Как его можно прошить в линуксе, без вмешательства пользователя?


person followed Monica to Codidact    schedule 21.02.2019    source источник


Ответы (1)


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

Из таблицы данных SAMA5D3 (которую я должен был прочитать перед публикацией вопроса)

После команды Initialization and Reset программа загрузки считывает первую страницу без проверки ECC, чтобы определить, присутствует ли заголовок параметра NAND. Заголовок состоит из 52 одинаковых 32-битных слов (из соображений избыточности), которые должны содержать параметры NAND и PMECC, используемые для правильного выполнения чтения остальных данных в NAND.

Заголовок конечно есть когда я сбрасываю содержимое загрузочного сектора

buildroot:~# hd < /dev/mtd0 | head -4
00000000  05 24 90 c0 05 24 90 c0  05 24 90 c0 05 24 90 c0  |.$...$...$...$..|
*
000000d0  0e 00 00 ea 05 00 00 ea  05 00 00 ea 05 00 00 ea  |................|
000000e0  05 00 00 ea cc 3b 00 00  06 00 00 ea 06 00 00 ea  |.....;..........|

первые четыре байта повторяются снова и снова, а таблица переходов ARM начинается со смещения 0xD0 (=208=52 * 4)

sam-ba позаботится об этом заголовке, когда записывает загрузочный сектор, но драйвер Linux mtd и flashcp обрабатывают его как обычные данные, поэтому я должен предоставить его.

person followed Monica to Codidact    schedule 22.02.2019