Нужно распаковать файл 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
Архив будет содержать файлы и каталоги, которые будут необходимы во время загрузки.