Как переместить данные на внутреннее хранилище встроенного Linux?

231
mslo

Я работаю над разработкой устройства, работающего на встроенном 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но для этого я должен убедиться, что мои данные находятся в первых 300 МБ.

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

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

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

0

1 ответ на вопрос

0
LawrenceC

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

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

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

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

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

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

Похожие вопросы