Я работаю над разработкой устройства, работающего на встроенном Linux. Когда я работаю с новыми аппаратными версиями, у меня возникает образ, который я могу скопировать с помощью dd на SD-карту, загрузить с него и добавить на внутреннее хранилище eMMC.

Поскольку образ для старого HW потерян, я пытаюсь создать новый образ резервной копии, и я хотел бы, чтобы он был как можно меньшего размера, но поскольку dd делает это блок за блоком, и не важно есть что-то или нет на блоке, он все равно скопирует его, поэтому мне нужно полностью скопировать устройство. Внутренняя память составляет около 4 ГБ (ext4), а файлы меньше, чем 200 МБ ...

Я знаю, что могу использовать dd if=/dev/source-device of=image | tar ... но я бы предпочел сделать что-то вроде dd if=/dev/source-device of=image bs=1M count=300 но для этого я должен убедиться, что мои данные находятся в первых 300MB.

Это приносит мне два вопроса:

1) Как проверить, находятся ли данные на первых 300 МБ диска?

2) если данных нет, как заставить их переместиться в начало диска?

1 ответ1

0

Нет "волшебного" способа сделать то, что вы пытаетесь сделать.

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

Если инструменты, которые вы используете для установки образа, не пишут по всем блокам в устройстве mmc , вы можете создать "пустое" изображение с различимым шаблоном, таким как текст ASCII/Unicode, XX_BLANK_FIRMWARE_SECTION_XX\n\0 повторяемый снова и снова ,

Затем вы можете использовать утилиту, чтобы найти, где в текущем изображении начинается эта строка, из которой вы можете затем определить значение счетчика, чтобы дать dd . Не уверен, какие именно утилиты использовать для этой цели, но я уверен, что при правильном использовании hexdump или аналогичных программ это можно сделать легко.

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

Лично я бы получил SD-карту 16 ГБ, которая может хранить несколько изображений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .