LINUX.ORG.RU

Не грузятся никакие х64 ядра на ASUS K53SJ в UEFI

 , , ,


1

2

Здравствуйте. Уже неделю как бодаюсь с ноутбуком ASUS K53SJ. Ситуация следующая.

В EFI-режиме никакие х64 ядра не грузятся(UEFI точно не x32) - ни самосборные (Пробовал гентушное собирать с разными настройками - ничерта не помогает, ядра всегда собирал с EFI Stub, чтоб не морочиться с загрузчиком и быстрей проверять), ни с лайвсиди от разных дистров (Пробовал Mint, Arch, Debian, Ubuntu, Gentoo). Из х32 я попробовал гентушное ядро, которое было на ихнем лайв-двд, и оно грузится. У других дистров че-то не так-то просто найти 32-битные лайвсди.

Судя по всему, на ноуте UEFI 2.0 так как UEFI shell v2 так же не работает, а вот v1 вполне себе работает и ver выдает UEFI revision 2.0. Думаю, в этом и есть проблема.

Зависание происходит, когда когда в логе появляется: Freeing SMP alternatives memory 32k. Если загрузиться в Legacy - режиме, то можно выяснить, что эта строчка в dmesg’e выглядит вот так: Freeing SMP alternatives memory 32k (ffffffffff - ffffffffff). Ну, то-есть там еще указан некий диапазон памяти, надо полагать (какой именно, я не запомнил). А при зависании диапазон этот не печатается. Как ни странно, отключение SMP в настройках ядра не помогает.

Конечно, можно и в Legacy режиме работать и не содомировать мозг, но я хочу выяснить, можно-ли все-таки заставить линукс на этом ноуте грузиться в UEFI режиме.

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

Не-а! Самый прикол в том, что собранное с EFI stub 32-битное ядро не хочет запускаться из efi shell и говорит что-то вроде 32/64 bit mismatch, а 32-битное ядро, которое запускается, говорит примерно тоже самое в dmesge(добавляя, что uefi, дескать, отключено, может, поэтому и загружается) и у него все пусто в /sys/firmware/efi/<че-то там> - директориях. В легаси-режиме даже этой директории нет.

PODBot ()
Последнее исправление: PODBot (всего исправлений: 2)

Попробую еще загрузить собранное без efi stub ядро. Это последняя надежда на работу этого гребаного uefi. Дальше либо legacy, либо курение исходников ядра, что явно не пройдет бесследно для здоровья, я же всего-то навсего хотел линукс на ноутбук, а не сразу становиться ядерным разработчиком…

PODBot ()

Кажется, это как раз тот случай, когда надо брать легаси и не содомировать мозг. Если у тебя бажная прошивка, то фиг ты с ней что сделаешь.

Разве что — прошивку обновлять пробовал?

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

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

Кстати, что касается Secure Boot, то я первым делом на него подумал, однако, никаких настроек Secure Boot в биосе нету, как проверить с помощью uefi shell я не знаю. Не знаю, возможно ли, что он неотключаемый? Хотя, с флешек же grub грузится… Ноут десятилетней почти давности, насколько я понял, он был выпущен еще до повального увлечения Secure boot’ом.

PODBot ()
Последнее исправление: PODBot (всего исправлений: 2)
Ответ на: комментарий от anonymous

Ну ты дал, дружище. Может, еще и нафиг этот линукс, понимаешь, лучше свое ядро разработать, под багнутый UEFI? Вообще-то я думал о чем-то подобном - перепрошить программатором у кого-нибудь на радиорынке, но оно того явно не стоит и вряд ли поможет, если официальными прошивками шить. Дебажить прошивки - это я точно не осилю.

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

Ща попробую. А че меммап дает? Надо ли включать че-то в настройках ядра, чтобы этот меммап работал? Прокатит с лайвсиди - ядрами? Кстати, если тестить какие-то параметры ядра на лайфсиди-ядрах, у них там в Grub’е можно редачить командную строку, но она оканчивается двумя тире -- - добавлять свои параметры нужно до или после этих тире? Кроме того, у меня esp ровно 512 мегов, тут кое-где пишут, что надо больше. Влияет ли он как-нибудь на лайфсиди - ядра?

PODBot ()
Последнее исправление: PODBot (всего исправлений: 1)
Ответ на: комментарий от PODBot

А че меммап дает?

https://unix.stackexchange.com/questions/150090/when-do-i-need-to-specify-add-efi-memmap-as-kernel-argument-in-uefi-efi-boot

Надо ли включать че-то в настройках ядра, чтобы этот меммап работал?

Нет.

Прокатит с лайвсиди - ядрами?

Да.

Кстати, если тестить какие-то параметры ядра на лайфсиди-ядрах, у них там в Grub’е можно редачить командную строку, но она оканчивается двумя тире – - добавлять свои параметры нужно до или после этих тире?

Без понятия, о каких двух тире ты говоришь. Если мы про GRUB2, то параметры командной строки ядра указываются как аргументы для команды linux непосредственно после пути к файлу ядра, как-то так:

linux /path/to/vmlinuz CMDLINE-ARGUMENTS
intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

Без понятия, о каких двух тире ты говоришь. Вот груб меню показывает, там нажимаешь E, можно поредачить пункт меню. Там я вот сейчас открыл прям, как раз строка linux кончается этими двумя тире ну ну примерно так:

linux /isolinux/gentoo root=rev/ram0 bla-bla-bla console=tty1 --

. Это на лайфсиди, причем, как я понял, у всех дистров так, или по крайней мере у многих.

PODBot ()
Последнее исправление: PODBot (всего исправлений: 1)
Ответ на: комментарий от intelfx

Попробовал на самосборном ядре. Не помогло, но выяснилось кое-что интересное. Появилась куча записей вида:

too many entries: ignoring [mem 0x01919000-0x191bfff]

PODBot ()
Последнее исправление: PODBot (всего исправлений: 1)

Таки мне удалось все-таки загрузить ядро в режиме UEFI, правда, толку от этого не много, судя по всему, так загрузилось оно с опцией efi=noruntime.

PODBot ()

Последний вопрос, ответьте кто-нибудь. В сложившейся ситуации вообще есть смысл грузиться в EFI-режиме? Ну, то-есть с перманентно включенной опцией efi=noruntime? Не чревато ли это какими-то менее очевидными багами? Или лучше ну его все это к черту, и грузиться сразу в legacy и забыть про это убогое efi?

PODBot ()
Последнее исправление: PODBot (всего исправлений: 1)
Ответ на: комментарий от PODBot

Может, еще и нафиг этот линукс, понимаешь

UEFI кривой, а виноват, оказывается, линукс. В Африке обезьяна с ветки упала, а виноват Путин.

64-битный шиндовс загружается?

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

Без понятия. У меня, если честно, нет желания еще и винду туда ставить. Там стояла, конечно, семерка, но это было лет 5 назад и я не помню, в каком режиме она грузилась и какая она там была, х32 или х64. Да и как эта инфа поможет? Лучше скажи, что лучше: efi stub и efi=noruntime или legacy и grub? В биосе на этом ноуте есть возможность редачить меню загрузки, то-есть мне не нужен efibootmgr чтобы прописать загрузку, я могу это ручками сделать из биоса. С другой стороны, я боюсь, что могут какие-то еще глюки с efi вылезти, а я потом буду опять башку ломать, почему что-то не работает так, как должно. Может, вообще лучше к дьяволу это efi отключить? Вроде бы груб и линукс и в legacy-режиме смогут с диском, размеченным в gpt, отлично работать. Или, может быть, есть возможность как-то по одному выключать efi runtime services, чтобы не использовался только баганый, или хотя бы чтобы как-то его определить.

PODBot ()
Последнее исправление: PODBot (всего исправлений: 2)
Ответ на: комментарий от PODBot

Или, может быть, есть возможность как-то по одному выключать efi runtime services, чтобы не использовался только баганый, или хотя бы чтобы как-то его определить.

Это уже далеко за пределами ЛОРовских СПВ. Не припомню на форуме ядерщиков, которые бы занимались именно x86 early boot (ACPI, UEFI etc).

Если тебе это не представляет особого спортивного интереса — зафигачь легаси и не парься, это как раз тот случай, когда даже такой технофетишист как я забил бы.

Если же спортивный интерес есть — то весь мир перед тобой, ищи профильные форумы или списки рассылки, можешь завести баг в ядерной багзилле (только перед началом почитай, интересующая тебя подсистема предпочитает репорты в багзилле или в письмах), можешь плотнее почитать документацию по параметрам загрузки ядра, можешь взять вторую машину и зафигачить через неё early printk / ядерный дебаг, можешь ещё много чего сделать :)

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

Попробуй поиграться с другими параметрами к efi= (efi=old_map, efi=nochunk, efi=nosoftreserve). Попробуй поставить промежуточный EFI-загрузчик (типа gummiboot / systemd-boot), или наоборот убрать его, если он уже стоит.

Лучше скажи, что лучше: efi stub и efi=noruntime или legacy и grub?

Я правильно понимаю, что когда ты делаешь efi=noruntime, у тебя пропадает возможность править UEFI-переменные из загруженной системы (т. е. в частности как раз пользоваться efibootmgr)?

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

Спасибо за помощь.

Что касается дебага - может быть, когда нибудь… Сам я с этим явно не справлюсь, потому что у меня свежесобранное ядро(которое таки загрузилось) показывает пустой экран, когда с earlycon на нормальную консоль переключается, че-то я там не так навключал, пока пытался с этим efi совладать(наверно, надо поддержку видюшек включить). А что касается багрепортов - так наверняка дело в глючной реализации или старой спецификации EFI, вряд ли это кто-то будет чинить, ибо зачем? Сделаю легаси бут, да и пошло оно все. Хотя… грузится же без рунтайм сервисов, и груб ставить не надо… Пожалуй, буду все-таки с efi stub на всякий случай ядра собирать… Их можно пускать из ефи шелла с любыми параметрами - удобно, черт побери.

Хм, а интересно, вот если я ядро загрузил с efi=noruntime, могу ли я уже потом, когда все загрузится, обратно их врубить?

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

Я пробовал все, кроме efi=nosoftreserve, так как этой опции не было почему-то в том гайде по параметрам, который мне попался(видимо от старой версии ядра гайд). Что касается промежуточного загрузчика, то я пробовал кроме ефи стаба еще и груб, разницы никакой. Так как много перепробованных лайвсиди дают тот же результат, думаю, не в загрузчике дело.

Я правильно понимаю, что когда ты делаешь efi=noruntime, у тебя пропадает возможность править UEFI-переменные из загруженной системы (т. е. в частности как раз пользоваться efibootmgr)?

Правильно. /sys/firmware/efi/efivars существует, но там пусто. При попытке перемонтировать говорит, что не знает что за файловая система такая - efivarfs(или efivars - то же результат). Кроме efivars есть еще несколько файлов, в них есть какая-то инфа, не помню, что именно, но вроде че-то типа версии биоса или типа того.

Кстати, еще нубский вопрос - если я собрал что-то нужное(например, поддержку usb), но не жизненно необходимое(такое, как поддержка рутовой файловой системы) модулем, ядро само догадается модуль загрузить соответствующий, или ему надо руками грузить или в каких-то конфигах прописывать?

PODBot ()
Последнее исправление: PODBot (всего исправлений: 3)
Ответ на: комментарий от PODBot

Хм, а интересно, вот если я ядро загрузил с efi=noruntime, могу ли я уже потом, когда все загрузится, обратно их врубить?

Совершенно точно нет. Насколько я помню из чтения выдержек из спеки, отказ от EFI runtime services — одноразовая операция.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от PODBot

Кстати, еще нубский вопрос - если я собрал что-то нужное(например, поддержку usb), но не жизненно необходимое(такое, как поддержка рутовой файловой системы) модулем, ядро само догадается модуль загрузить соответствующий, или ему надо руками грузить или в каких-то конфигах прописывать?

Зависит от конкретного случая. Большинство модулей драйверов (в т. ч. модули ФС) умеют подгружаться автоматически, но не все.

Насчёт рутовой файловой системы только будь аккуратен — пока рутовая файловая система не примонтирована, большинство модулей неоткуда подгружать ;) Модули, которые нужны для монтирования rootfs, должны лежать в initcpio (оно же initrd, оно же initramfs).

intelfx ★★★★★ ()