Вопрос или проблема
Я пытаюсь извлечь vmlinux из стандартного файла vmlinuz Fedora 35 (vmlinuz-5.14.15-200.fc34.x86_64) с помощью предоставленного скрипта extract-vmlinux:
/usr/src/kernels/5.14.15-200.fc34.x86_64/scripts/extract-vmlinux vmlinuz-5.14.15-200.fc34.x86_64 > vmlinux
extract-vmlinux: Не удалось найти vmlinux.
При выполнении команды file я получил:
file -bL ./vmlinuz-5.14.15-200.fc34.x86_64
Linux kernel x86 boot executable bzImage, версия 5.14.15-200.fc34.x86_64 ([email protected]) #1 SMP Ср Окт 27 15:53:30 UTC 2021, RO-rootFS, swap_dev 0xA, Normal VGA
Вопрос: почему скрипт extract-vmlinux не находит vmlinux внутри файла?
Проверьте, установлены ли у вас все инструменты, используемые в extract-vmlinuz
; на 2022-01-16 это включает в себя (согласно исходному коду, исключая coreutils):
readelf
(то есть,binutils
)grep
- Декомпрессор:
gzip
xz
bzip2
(в вашем случае!)unlzma
lzop
lz4
zstd
Также убедитесь, что mktemp /tmp/vmlinuz-XXX
работает для вас.
Ответ или решение
При извлечении файла vmlinux из vmlinuz на Fedora 35, судя по вашему описанию, возникает ошибка: «extract-vmlinux: Cannot find vmlinux». Давайте разбираться, что может быть причиной этой проблемы и как её решить.
1. Понимание vmlinuz и vmlinux
В первую очередь, важно понять разницу между файлами vmlinuz и vmlinux. Файл vmlinuz – это сжатая версия ядра Linux, обычно в формате bzImage. Файл vmlinux – это ненастроенная версия ядра в несжатом формате, используемая для отладки и анализа. Скрипт extract-vmlinux
предназначен для извлечения последнего из первого.
2. Проверка наличия необходимых инструментов
Скрипт extract-vmlinux
требует наличия определённых инструментов для корректной работы. Убедитесь, что следующие утилиты установлены в вашей системе:
- readelf (часть пакета binutils)
- grep
- Один (или несколько) из декомпрессоров:
- gzip
- xz
- bzip2
- unlzma
- lzop
- lz4
- zstd
Проверить наличие этих инструментов можно с помощью команды which <имя_утилиты>
.
3. Проверка архиватора bzip2
Поскольку вы работаете с Fedora 35, файлы ядра часто сжимаются с использованием bzip2. Из сообщения об ошибке видно, что скрипт не может найти vmlinux, что может указывать на проблему с процессом разархивирования. Убедитесь, что bzip2
установлен и работает корректно.
4. Создание временной директории
Иногда причиной ошибок может быть отсутствие прав на создание временных файлов. Перед запуском скрипта запустите:
mktemp /tmp/vmlinuz-XXX
Это создаст временный файл. Если команда завершится неудачно, выясните причины недостатка прав.
5. Запуск скрипта с отладочной информацией
Попробуйте запустить extract-vmlinux
с дополнительными выводом, чтобы получить более подробную отладочную информацию. Вы можете модифицировать скрипт, добавив вывод на экран перед каждым критическим шагом.
6. Проверка совместимости версии
Убедитесь, что версия скрипта extract-vmlinux
совместима с версией ядра 5.14.15-200.fc34.x86_64. Обновление скрипта либо ядра может помочь устранить потенциальные несоответствия.
7. Альтернативные методы извлечения
Если указанные выше шаги не помогли, вы можете воспользоваться альтернативными методами извлечения vmlinux:
- Обратите внимание на наличие vmlinux в /boot: В каталоге
/boot
может быть доступна ненастроенная версия vmlinux, которую можно использовать напрямую. - Пробуйте альтернативные скрипты: Изучите другие доступные инструменты или скрипты для извлечения vmlinux из vmlinuz.
Заключение
Для успешного извлечения vmlinux из vmlinuz на Fedora 35 необходимо проверить наличие всех необходимых инструментов, создать временные файлы, удостовериться в совместимости версий, и в случае необходимости воспользоваться альтернативными методами. Следуя данным рекомендациям, вы сможете устранить возникшую проблему.