Нужно распаковать файл initramfs

Я новичок в этом ядре Linux, и я пытаюсь загрузить плату с USB, и мне это удалось

Теперь у меня проблема в том, что на usb есть два файла а) initramfs.cpio.xz б) linux.img

Теперь, что мне нужно сделать, это распаковать этот initramfs и добавить несколько файлов в эту файловую систему, а затем сжать его обратно

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

Спасибо

2 ответа

Я столкнулся с той же проблемой и решил ее на основе Как просмотреть, изменить, воссоздать файл Linux initrd.img.

Прежде всего, начиная с версии 2.6 и выше (см. Здесь) образ initrd - это просто initramfs (сохранилось только имя). Затем образ ядра - это простой gzip-файл, содержащий архив cpio (по крайней мере, для Debian).

Формат файла

Убедитесь, что образ в / boot (который выглядит как initrd.img.other_info, например: initrd.img-4.9.0-8-686-pae) является файлом gzip

file initrd.img-4.9.0-8-686-pae
>> initrd.img-4.9.0-8-686-pae: gzip compressed data, was "newinitrd", last modified: Sat Apr 27 10:03:57 2019, from Unix

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

распаковки

GZIP часть

Следующим шагом является получение правильной формы для файла с помощью:

mv initrd.img-4.9.0-8-686-pae initrd.img-4.9.0-8-686-pae.gz

Обратите внимание, что просто переименование файла initrd.img-4.9.0-8-686-pae в initrd.img-4.9.0-8-686-pae.gz не имеет никакого эффекта.

Затем распакуйте файл с помощью соответствующей команды (здесь для gzip-файла):

gunzip initrd.img-4.9.0-8-686-pae.gz

CPIO часть

Вы получите архив cpio (здесь файл будет называться initrd.img-4.9.0-8-686-pae)

file initrd.img-4.9.0-8-686-pae
>> initrd.img-4.9.0-8-686-pae: ASCII cpio archive (SVR4 with no CRC)

Затем, чтобы получить все файлы в архиве, используйте новую папку:

cpio -id < ../initrd.img-4.9.0-8-686-pae 

Это все для несжатой части

компрессия

После редактирования изображения вам нужно будет снова сжать его. Сначала создайте архив cpio всех этих файлов (все еще в каталоге, использованном для открытия архива cpio)

find . | cpio --create --format='newc' > ../newInitrd

Затем сожмите архив (в родительском каталоге) с помощью:

gzip newInitrd

И наконец:

mv newInitrd.gz newInitrd.img

(Затем вы просто переименовываете newInitrd.img в initrd.img-4.9.0-8-686-pae и помещаете файл в / boot)

initramfs - это архивный файл cpio, который может быть дополнительно сжат в форматах gzip, xz или bzip2.

В вашем случае проверьте, какой тип сжатия выполняется. Сжатие в основном будет gzip.

  $ file /boot/initrd.img-3.2.0-4-686-pae 
  /boot/initrd.img-3.2.0-4-686-pae: gzip compressed data, from Unix

Если это сжатие gzip, распакуйте его с помощью утилиты gunzip или любой другой подходящей утилиты для формата сжатия. После несжатого использования cpio утилита для извлечения архива.

$ cpio -id < initrd.img-3.2.0-4-686-pae 
48843 blocks

Архив будет содержать файлы и каталоги, которые будут необходимы во время загрузки.

Другие вопросы по тегам