LINUX.ORG.RU

Как починить update-initramfs который ломает загрузку фирмварей amdgpu

 , ,


1

2

Восстановил работу ручной правкой /boot/initrd.img-5.4.0-0.bpo.3-amd64 потому что update-initramfs создает косячный образ. Что делать?

Так как комп не перезагружался недели две я даже не скажу с уверенностью после какого апдейта это случилось. Предположительно после установки Virtual Machine Manager, но не точно.

Короче, дано: Debian 10 Buster все stable, не считая ядра которое из бекпортов сейчас 5.4.0-0.bpo.3-amd64 и развлечений с rocm одно время, но уже давненько. Видеокарта Radeon RX 580 с опенсорсными драйверами.

И вот чих-пых, внезапно что-то отвалилось. Это перестала загружаться графика (иксы, вулканы), при этом при старте есть в самом начале запись, что

drm:amdgpu_pci_probe[amdgpu] amdgpu requires firmware installed

apt-get install firmware-linux-nonfree сделал, заругалось на broken dependences, но установилось из бекпортов правильно.

update-initramfs - тоже самое: не грузится бинарная прошивка для видеокарты.

Замена /boot/initrd.img-5.4.0-0.bpo.3-amd64 на старый вариант помогла. Стал сравнивать чем они отличаются. Обнаружил, что внутри правильного варианта структура каталогов такая (сокращенно, всю не привожу):

/lib/
    firmware/
                  5.4.0-0.bpo.3-amd64/
                  amdgpu/

В неправильном, в котором бинарники прошивки не грузятся

/lib/
    firmware/
                  5.4.0-0.bpo.3-amd64/
                                                  amdgpu/

распаковал gunzip и cpio образ, переместил amdgpu на прежнее место, запаковал gzip и cpio, положил в /boot и все загружается теперь, прошивки есть.

Но это не дело, update-initramfs по-прежнему создает образ с ошибками. Я как-то даже не в курсе как это чинить.

★★★★★

Теперь как-то еще бредовее стало. update-initramfs теперь такое генерирует и как только с этим linux стартует непонятно:

$7z l initrd.img-5.4.0-0.bpo.3-amd64

Scanning the drive for archives:
1 file, 62558411 bytes (60 MiB)

Listing archive: initrd.img-5.4.0-0.bpo.3-amd64

--
Path = initrd.img-5.4.0-0.bpo.3-amd64
Type = Cpio
WARNINGS:
There are data after the end of archive
Physical Size = 31308
Tail Size = 62527103
SubType = New ASCII

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-11-28 03:00:00 D....            0            0  .
2018-11-28 03:00:00 D....            0            0  kernel
2018-11-28 03:00:00 D....            0            0  kernel/x86
2018-11-28 03:00:00 D....            0            0  kernel/x86/microcode
2018-11-28 03:00:00 .....        30546        30546  kernel/x86/microcode/AuthenticAMD.bin
------------------- ----- ------------ ------------  ------------------------
2018-11-28 03:00:00              30546        30546  1 files, 4 folders

Похоже вот этот кусок пристыкован спереди «нормального» initrd. Что вообще за бред происходит, кто-то знает? Почему нормально (не считая отсутствующих бинарников прошивок) загружается система.

praseodim ★★★★★
() автор топика

А genkernelом пробовал создать инитрамфс? В Gentoo этот вариант работает без сбоев. К тому же инитрамфс может быть ненужен. По крайней мере драйвер radeon включенный в ядро работает без инитрамфс.

anonymous
()
Ответ на: комментарий от anonymous

В дебиане нет genkernel. И дело не в драйвере, драйвер итак включен в ядро и он нормально работает. Но в видеокарту должен быть загружен бинарник с фирмварью.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Ядро можно собрать на любой системе. Но вместо модуля, загружаемого инитрамфсом можно драйвер в ядро воткнуть на постоянной основе. В Gentoo linux-firmware просто ставится и

The firmware files installed this way will be incorporated into the kernel.

https://wiki.gentoo.org/wiki/AMDGPU

anonymous
()
Ответ на: комментарий от anonymous

Вопрос не в том как сделать, чтобы система работала. Есть несколько вариантов, я сейчас просто вручную отредактировал уже готовый initrd. Нужную часть можно через tail получить.

Так тоже можно. Можно даже скрипт написать для корректировки.

Но как-то надо восстановить автоматическую работу. Чтобы когда придел обновление для ядра не надо было заново добавлять и т.д. Это же debian

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Похоже вот этот кусок пристыкован спереди «нормального»

Так и есть. И кусков может быть несколько.

andytux ★★★★★
()
Ответ на: комментарий от andytux

Не знал о такой фиче даже.

Но все же интересно как правильно исправить ситуацию. Вообще за все время использования разных линуксов впервые с подобным сталкиваюсь.

praseodim ★★★★★
() автор топика

Вкомпиль свои блобы в ядро при помощи CONFIG_EXTRA_FIRMWARE и кроме того что они будут всегда в ядре так они ещё и на порядок быстрее загружаться будут от чего твои волосы станут мяяяягче и щелковистее а дыхание более свежим!

init_6 ★★★★★
()
Ответ на: комментарий от vitruss

Попробовать стоит, но баги в firmware-nonfree там принято игнорировать.

anonymous
()
Ответ на: комментарий от vitruss

Пока я даже не понял в чем, в каком пакете баг - update-initramfs или в каком-то обновлении фирмвари или еще чем, возможно он все-таки даже не в debian, а в rocm.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от praseodim

Так пакет с прошивками должен же, как мне кажется, просто класть их тебе в lib/firmware? Если так, то его можно исключить (если он правильно кладёт прошивки).

vitruss ★★★★★
()
Ответ на: комментарий от vitruss

Кладет правильно. Я просто не понимаю, почему initramfs стал класть его в другое место. И кстати, чем это вообще определяется.

praseodim ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.