Невозможно извлечь vmlinux из vmlinuz на Fedora 35

Вопрос или проблема

Я пытаюсь извлечь 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:

  1. Обратите внимание на наличие vmlinux в /boot: В каталоге /boot может быть доступна ненастроенная версия vmlinux, которую можно использовать напрямую.
  2. Пробуйте альтернативные скрипты: Изучите другие доступные инструменты или скрипты для извлечения vmlinux из vmlinuz.

Заключение

Для успешного извлечения vmlinux из vmlinuz на Fedora 35 необходимо проверить наличие всех необходимых инструментов, создать временные файлы, удостовериться в совместимости версий, и в случае необходимости воспользоваться альтернативными методами. Следуя данным рекомендациям, вы сможете устранить возникшую проблему.

Оцените материал
Добавить комментарий

Капча загружается...