Копирование ядра и загрузки в SDCard
У меня есть плата ARM Freescale I.MX, для которой я готовлю загрузчик, ядро и корневую файловую систему на SD-карте. Я немного запутался в том порядке, в котором я делю и копирую свои файлы в SDCard. Допустим, у меня есть пустой SDCard размером 4 ГБ. Я использовал gparted, чтобы сначала разделить его на:
Первый раздел размером 400 МБ как система FAT32. это мой загрузочный раздел Второй раздел - это остальная часть карты как ext3. Это мой корневой раздел файловой системы.
Допустим, моя SD-карта находится в /dev/sdb.
Теперь я видел много документов, немного отличающихся по способу копирования загрузочных файлов.
Какой правильный путь?
Способ 1:
(без монтирования разделов sdb: sudo dd if=u-boot.bin of=/dev/sdb bs=512 seek=2 sudo dd if=uImage of=/dev/sdb bs=512 seek=2
Смонтируйте sdb2 для копирования rootfs: mount /dev/sdb2 /mnt/rootfs скопируйте rootfs: tar -xf tarfile /mnt/rootfs
Способ 2: Смонтируйте загрузочный раздел sdb1: mount /dev/sdb1 /mnt/ загрузочная копия uboot и ядро: cp u-boot.bin /mnt/boot/ cp uImage /mnt/boot/
Затем скопируйте rootfs как указано выше!
Какой правильный. Я пробовал два, но SDCard даже не загружается. Когда я попробовал способ 1, карта загружалась до тех пор, пока не говорилось, что rootfs не найден в разделе. Я вытащил карту и вставил и обнаружил, что первый толстый раздел 32 каким-то образом "уничтожен", так как он говорит "нераспределенный" в gparted.
Пожалуйста помоги.
3 ответа
Ниже приведен скрипт для прошивки бинарных файлов на SD-карту для моей платы Arndale OCTA. Вы можете увидеть размещение двоичных файлов загрузчика:
BL1
dd iflag = dsync oflag = dsync if = arndale_octa.bl1.bin of = / dev / sde bs = 512 seek = 1
НД2
dd iflag = dsync oflag = dsync if =.. / arndale_octa.bl2.bin of = / dev / sde bs = 512 seek = 31
UBoot
dd iflag = dsync oflag = dsync if = u-boot.bin of = / dev / sde bs = 512 seek = 63
ядро и программное обеспечение доверия, ....
Обратите внимание: 1) Таблица разделов имеет смещение SD card 0 (поиск 0), затем вы должны выполнить:fdisk /dev/sde и создать параметры, которые не перекрываются с блоками, открытыми ядром или программным обеспечением доверия. 2) добавьте опцию "dsync" в команду dd, чтобы гарантировать, что все записанные данные немедленно сбрасываются на SD-карту
Вы должны пометить первый раздел как загрузочный. Проверьте информацию о первом разделе в утилите gparted или disk.
Из дисковой утилиты вы можете пометить раздел как загрузочный. выбрав конкретный раздел и перейдя к опции "дополнительные действия" -> "изменить тип раздела".
В большинстве случаев для процессора imx требуется загрузчик со смещением 0x400. Поэтому, что бы вы ни делали для u-boot, это правильно, для этого вам нужно использовать команду dd.
sudo dd if=u-boot.bin of=/dev/sdb bs=512 seek=2
Разделяя SD-карту, убедитесь, что у вас достаточно места для образа загрузки. Итак, начните свой первый загрузочный раздел со смещения, скажем, 1 МБ.
Вы можете просто скопировать свои переменные uImage и окружения (uEnv.txt или boot.scr) через cp
команда.
Также для rootfs вы можете выполнить те же действия, что и для ядра.