Как записать новые MLO и u-boot.img на SD-карту, не стирая ОС - PullRequest
1 голос
/ 26 марта 2020

У меня есть SD-карта со стандартным образом Beaglebone Debian. У меня также есть файлы MLO и u-boot.img из сборки u-boot. Я хотел бы установить новый u-boot на SD-карту и затем изменить sh измененный образ на MM C на Beaglebone Black.

Я могу установить sh на борту MM C с SD-карты просто отлично. Я также могу подключиться к плате через последовательный порт и остановиться в u-boot.

Что я не знаю, как сделать, так это правильно записать новый u-boot на SD-карту. Я попробовал несколько вещей :

  1. Эти e linux инструкции предназначены для стирания SD-карты и создания нового загрузочного раздела. Я на самом деле не пробовал это, потому что я хочу установить новый U-boot в существующий образ.

    $ echo -e "o\nn\np\n1\n\n+64M\na\n1\nt\nc\nw\n" | sudo fdisk /dev/MYDISK ; sudo fdisk /dev/MYDISK -l
    $ sudo mount /dev/MYDISK /mnt
    $ sudo cp MLO /mnt
    $ sudo cp u-boot.img  /mnt
    $ sudo sync
    $ sudo umount  /mnt
    
  2. Эти инструкции digikey представляют собой другую версию того же самого. Я попытался написать MLO и u-boot.img таким образом, не стирая диск, но плата по-прежнему загружается с использованием исходного u-boot вместо нового.

    $ sudo dd if=/dev/zero of=${DISK} bs=1M count=10
    $ sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
    $ sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k
    
  3. Эти beyondlogi c инструкции содержат несколько другую пару команд dd. Я тоже это попробовал, но снова плата все еще загружается с исходной загрузкой.

    $ sudo dd if=MLO of=/dev/sdb bs=512 seek=256 count=256 conv=notrunc
    $ sudo dd if=u-boot.img of=/dev/sdb bs=512 seek=768 count=1024 conv=notrunc
    $ sudo blockdev --flushbufs /dev/sdb
    
  4. Кто-то предложил мне записать новую загрузку u в MM C, используя TFTP. Можно ли использовать ту же процедуру для записи на SD-карту? Если так, как я могу найти начальные адреса? А как мне загрузить и записать файлы? Я попытался найти, но я не нашел то, что мне нужно.

    - boot into u-boot
    - discover the existing MLO and uboot.img start addresses
    - load the new MLO and uboot.img into RAM using tftp
    - write the new MLO and uboot.img to the correct location in MMC
    

Дополнительные примечания

  • В идеале я хотел бы Как записать новый U-Boot на SD-карту и проверить его без перепрошивки. Предположительно, beaglebone загрузит SD-карту при загрузке (вместо MM C u-boot), если вы нажмете S2 при подаче питания, но я не уверен, что это работает. Как узнать, какая загрузка u-boot загружена?
  • Однако я могу записать образ MM C на SD-карту, чтобы он также работал чтобы записать новый u-boot в MM C и проверить это.
  • Наконец, я хочу стереть SD-карту, написать u-boot одним из описанных выше способов и вручную настроить / записать разделы, если мне нужно. Это единственный способ сделать это?

SD-карта / образ

SD-карта содержит образ прошивки Debian 7.9 2015-11-12 из последние изображения beagleboard .

Это таблица разделов.

Model: Generic- USB3.0 CRW -SD (scsi)
Disk /dev/sdb: 31.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  102MB   101MB   primary  fat16        boot, lba
 2      102MB   3565MB  3463MB  primary  ext4

Загрузочный раздел не содержит файлов MLO или u-boot.img для замены:

total 96
drwxr-xr-x 2 root root  2048 Nov 12  2015 App
-rwxr-xr-x 1 root root   288 Nov 12  2015 autorun.inf
drwxr-xr-x 4 root root  2048 Nov 12  2015 Docs
drwxr-xr-x 5 root root  2048 Nov 12  2015 Drivers
-rwxr-xr-x 1 root root    40 Nov 12  2015 ID.txt
-rwxr-xr-x 1 root root 41174 Nov 12  2015 LICENSE.txt
-rwxr-xr-x 1 root root  1008 Nov 12  2015 nfs-uEnv.txt
-rwxr-xr-x 1 root root 16838 Nov 12  2015 README.htm
-rwxr-xr-x 1 root root   428 Nov 12  2015 README.md
drwxr-xr-x 2 root root  2048 Nov 12  2015 scripts
-rwxr-xr-x 1 root root 16838 Nov 12  2015 START.htm
-rwxr-xr-x 1 root root  1179 Nov 12  2015 uEnv.txt

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Чего я не знаю, как это сделать, так это правильно записать новый u-boot на SD-карту.
...
SD-карта содержит Debian u have7.9 2015-11 -12 образ прошивки с последних изображений beagleboard.

Суть вашей проблемы в том, что загрузочный код ПЗУ AM335x Итак, C способен считывать MLO с SD-карта (или eMM C) либо в режиме сырого сектора, либо в режиме файла FAT. Кроме того, в необработанном режиме есть четыре возможных области для определения загрузочного образа, хотя, когда первый сектор носителя содержит MBR, существует только три области.

AM335x So C сначала проверит загрузочный образ, используя режим raw.
Так что, если вы хотите установить MLO в качестве файла в файловой системе FAT, тогда вы необходимо убедиться, что все предыдущие MLO , хранящиеся в сырых секторах, удалены.

IOW, существует несколько способов хранения MLO на карте eMMC / SD и порядок в котором они проверяются, определяет, какой образ используется для загрузки. Файл FAT будет последним образом в порядке загрузки.


На SD-карте с имеющимся у вас образом Debian хранятся MLO и u-boot.img. в качестве необработанных секторов (т. Е. Обратите внимание, что файловая система FAT начинается с сектора 2049 со смещением 0x100000, поэтому перед первым разделом имеются незанятые сектора).

[Обратите внимание, что нумерация секторов начинается с 1, а не с 0.]

Существующая MLO на вашей SD-карте хранится в секторе 257 (смещение 0x20000 или 128K), которое включает сектор для его TO C (оглавление) и восьмибайтовый заголовок GP.
Существующий u-boot.img на вашей SD-карте хранится в секторе 769 (смещение 0x60000) или 384К).

Вы можете заменить оба этих изображения, используя инструкции outslogi c, поскольку смещения seek= соответствуют тому, что уже существует на вашей SD-карте.
В инструкциях Digikey указаны аналогичные смещения seek= но используйте разные размеры блоков и количество. Первая команда также удалит MBR (и сделает файловые системы FAT и ext недоступными).

В качестве альтернативы вы можете обнулить TO C, чтобы сбой в режиме raw и затем загрузка ПЗУ вернулась в режим файла FAT.
После этого вы могли бы отказаться от dd команд и смещений секторов. и используйте обычные команды файловой системы.

Ваша SD-карта имеет только один TO C для устранения, поэтому достаточно одной команды:

dd if=/dev/zero bs=512 count=1 seek=256 of=/dev/sdX

Если вы не знаете, где находится изображение, очистите другой возможные области были бы необходимы:

dd if=/dev/zero bs=512 count=1 seek=512 of=/dev/sdX
dd if=/dev/zero bs=512 count=1 seek=768 of=/dev/sdX

Как я могу узнать, какой U-Boot загружен?

Вы имеете в виду, какой образ U-Boot Выполнено / загружено?
Разве строка версии (с меткой времени сборки), которую U-Boot отображает при запуске, не указывает, какое изображение было загружено?


Однако этот загрузчик не записывается в MM C предоставленным сценарием, поэтому фактически не решает проблему.

Единственная "проблема" , которую я прочитал, изложена в Ваш заголовок.


Уточнение

Хотя вы можете найти / сохранить MLO в сырых секторах или в виде файла FAT на eMM C или SD-карта, на которой вы храните образ u-boot.bin , определяется тем, как был сконфигурирован / собран U-Boot SPL. ( MLO - это просто SPL U-Boot, которому предшествуют 520 байтов для оглавления и заголовка GP.)
Например, конфигурация U-Boot по умолчанию для BBB создаст SPL / MLO, который будет ожидать, что u-boot.bin будет храниться в необработанном секторе 0x300 (или 769, если не считать нуля должным образом).
IE из .config file:

CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300

Это похоже на ту же конфигурацию, что и образ SD-карты Debian, который вы используете.

Если вы хотите сохранить u-boot. bin image как файл в файловой системе FAT SD-карты, тогда вам придется перенастроить U-Boot SPL (т.е. make menuconfig) и пересобрать, чтобы получить новый MLO .


Эту информацию я нигде не смог найти.

См. Главу 26.1.8.5 MMC/ SD Cards Технического описания процессоров AM335x и AMIC110 Sitara. Справочное руководство .

0 голосов
/ 27 марта 2020

Если вы используете init-eMMC-flasher-v3.sh для установки sh SD-карты в MM C, вы можете просто скопировать файлы MLO и u-boot.img в /opt/backup/uboot на SD-карте. В дополнение к настройке разделов и записи rootfs, скрипт записывает загрузчик MM C, используя эти файлы, если они присутствуют.

Нет необходимости устанавливать новую загрузку u-boot на SD-карту , Также нет необходимости загружать плату с помощью загрузчика SD-карты.

Возможно, вам потребуется обновить скрипты прошивки на SD-карте, запустив git pull в /opt/scripts.

Итак, предположим, что дисковод SD-карты /dev/sdb:

$ mount /dev/sdb2 /mnt/sd
$ cp MLO /mnt/sd/opt/backup/uboot
$ cp uboot.img /mnt/sd/opt/backup/uboot
$ cd /mnt/sd/opt/scripts
$ git pull
$ umount /mnt/sd

И, конечно, отредактируйте uEnv.txt, чтобы включить флешер eMM C.

Затем вы можете вставить SD-карту в биглебоне и включите. И новый загрузчик, и rootfs SD-карты будут записаны в MM C.

...