Вопрос в значительной степени резюмируется заголовком - я только что собрал ядро, которое сгенерировало выходной файл vmlinux. Как мне сжать это в образ vmlinuz?
3 ответа
Сжатие - это опция времени компиляции.
Процесс довольно сложный, так как результирующий файл будет начинаться с нативного кода, который распаковывает остальную часть ядра и переходит туда.
Так что прямого пути нет, и никто никогда не тратил время на реализацию рекомпрессии (по крайней мере, насколько я знаю), поскольку это достаточно просто для перекомпиляции.
В заключение вам нужно будет использовать make bzImage
.
Согласно документации вам необходимо выполнить:
make bzImage
а потом:
cp bzImage vmlinuz
создать файл vmlinuz
.
Из статьи Википедии о vmlinux :
компрессия
Традиционно, при создании загрузочного образа ядра, ядро также сжимается с использованием алгоритма zlib, или, начиная с Linux 2.6.30, с использованием LZMA или BZIP2, для чего требуется очень небольшая заглушка декомпрессии, которая будет включена в результирующий образ. Заглушка распаковывает код ядра, в некоторых системах выводит точки на консоль для индикации хода выполнения, а затем продолжает процесс загрузки.
Процедура распаковки является незначительным фактором во время загрузки, и до разработки bzImage ограничения размера некоторых архитектур, в частности i386, были чрезвычайно ограничивающими, что делало сжатие необходимым.
В архитектуре SPARC файл vmlinux сжимается с использованием простого gzip, поскольку загрузчик SILO прозрачно распаковывает сжатые изображения.
Имя загрузочного образа не важно, но по соглашению оно называется vmlinuz или zImage.
Поэтому в зависимости от того, на какой архитектуре вы работаете, и на какой версии Linux, ответ будет отличаться.
Лучший способ - позволить процессу сборки ядра сжать его для вас.