LINUX.ORG.RU
ФорумAdmin

Archlinux: custom longterm ядро и блоб nvidia

 , , , ,


0

3

Добрый день! Есть у меня машинка на Archlinux, установлено ядро версии 3.14.32-1-lts и блоб nvidia-340xx-lts. Дело в том что мне необходима одна возможность ядра, которая не включена по умолчанию.
Делаю я следующее:

  • выполняю полное обновление системы
  • обновляю дерево ABS
  • ищу в нем пакет linux-lts
  • сверяю версии установленного ядра, и PKGBUILD'а из ABS
  • меняю одну опцию в конфиге ядра(CONFIG_USER_NS, если важно)
  • собираю и устанавливаю ядро

Система загружается успешно, но X-сервер отказывается стартовать, в логе:

modprobe: ERROR: could not insert 'nvidia': Exec format error

Ну, и стоит мне поставить ядро из репы(той же версии), все работает отлично.

Не понимаю, в чем дело?

Поставь драйвер руками.

DeadEye ★★★★★
()

Не понимаю, в чем дело?

Дело в том, что модуль ядра собирается строго под конкретную версию ядра. Точнее даже не просто под версию ядра, а строго под определённое ядро, При сборке любого ядра у него есть так называемая linux kernel magic version, вот именно под ядро с определённым magic version и собирается модуль. Модуль собранный под другое ядро не загрузится под другое.

Поэтому, раз вы сами собираете ядро, то вам нужно так же вручную собрать и ядерный модуль nvidia. Заметьте, ставить целиком драйвер вручную не надо, нужно просто собратьт сам модуль nvidia под собранное вам ядро.

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

Я вам уже ответил, соберите модуль nvidia.ko под собранное вами ядро.

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

А как ты думал? Что открытый драйвер, что закрытый состоит из части, работающей в пространстве ядра, которая непосредственно «общается» с видео картой и частей, работающих в пространстве пользователя, драйвера для xorg-server`а, библиотеки LibGL.so и прочих библиотек.

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

Страшная штука блоб...

Им приходится это делать, так как у этого нашего линукса нет стабильного ядерного API и удобной инфраструктуры для установки проприетарных драйверов

kravich ★★★★
()

Ну не знаю, попробуй catalyst-generator.

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

собрал из ABS nvidia-340xx-lts, перезагрузился.

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

Установил свое(новое) ядро

Как?

В общем, попробуйте сделать всё вручную, без всяких abs, прост ставите пакет с драйвером nvidia. Затем скачивайте с сайта nvidia Драйвер той же версии, что вы установили пакетом. Далее вам нужно не запустить установку драйвера из этого скачанного *.run файла, а распаковать его, посмотрите какие у него есть ключи, я сейчас уже не помню:

NVIDIA*.run --help
В общем, когда вы его распакуете переходите в директорию, куда вы его распаковали, затем переходите в поддиректорию kernel и в ней выполняйте:
make SYSSRC=/lib/module/версия_собранного_вами_ядра/build module
Далее копируете модуль и выполняете depmod:
mkdir /lib/module/версия_собранного_вами_ядра/video/nvidia/
cp nvidia.ko /lib/module/версия_собранного_вами_ядра/video/nvidia/
depmod -a

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

Да, зашёл сюда как раз чтобы посоветовать пакет nvidia-*-dkms из AUR (взамен nvidia-*-lts и прочих). Только имей в виду, что придётся каждый раз при обновлении ядра делать dkms autoinstall и потом dkms remove nvidia/версия -k версия-старого-ядра, потому что DKMS такие вещи не автоматизирует.

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

Ну я когда пакет ставлю, DKMS же модуль собирает?

:: nvidia-340xx-dkms and nvidia-340xx-lts are in conflict (nvidia-340xx). Remove nvidia-340xx-lts? [y/N] y
:: Proceed with installation? [Y/n] y

Creating symlink /var/lib/dkms/nvidia/340.76/source ->
                 /usr/src/nvidia-340.76

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
make KERNELRELEASE=3.14.32-1-lts module KERNEL_UNAME=3.14.32-1-lts; make -C uvm module KERNEL_UNAME=3.14.32-1-lts KBUILD_EXTMOD=/var/lib/dkms/nvidia/340.76/build/uvm.................
cleaning build area....
Kernel cleanup unnecessary for this kernel.  Skipping...

DKMS: build completed.

nvidia.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /usr/lib/modules/3.14.32-1-lts/kernel/drivers/video/

nvidia-uvm.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /usr/lib/modules/3.14.32-1-lts/kernel/drivers/video/

depmod....

DKMS: install completed.

dkms autoinstall ничего не выводит, наверное потому что все собрано уже. Но драйвер по прежнему не работает:

modprobe: ERROR: could not insert 'nvidia': Invalid argument

shooter93 ★★
() автор топика
Ответ на: комментарий от intelfx
Feb 10 00:01:57 andrew-box kernel: nvidia: disagrees about version of symbol drm_prime_pages_to_sg
Feb 10 00:01:57 andrew-box kernel: nvidia: Unknown symbol drm_prime_pages_to_sg (err -22)
Feb 10 00:01:57 andrew-box kernel: nvidia: disagrees about version of symbol i2c_add_adapter
Feb 10 00:01:57 andrew-box kernel: nvidia: Unknown symbol i2c_add_adapter (err -22)
Feb 10 00:01:57 andrew-box kernel: nvidia: disagrees about version of symbol drm_pci_exit
Feb 10 00:01:57 andrew-box kernel: nvidia: Unknown symbol drm_pci_exit (err -22)
Feb 10 00:01:57 andrew-box kernel: nvidia: disagrees about version of symbol drm_release
Feb 10 00:01:57 andrew-box kernel: nvidia: Unknown symbol drm_release (err -22)
Feb 10 00:01:57 andrew-box kernel: nvidia: disagrees about version of symbol drm_gem_prime_export
Feb 10 00:01:57 andrew-box kernel: nvidia: Unknown symbol drm_gem_prime_export (err -22)

Хмм, что то такое было когда я в hardened gentoo пытался asterisk поставить, там один из модулей подобными ошибками сыпал.

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

Странно. Что-то не пересобралось... или вообще какой-то треш происходит.

Попробуй удалить все версии модуля nvidia (тогда modprobe nvidia должен говорить «modprobe: FATAL: Module nvidia not found.»), обновиться+перезагрузиться и заново поставить nvidia-304xx-dkms. Но это уже шаманство. Может быть, кто-то знает больше...

intelfx ★★★★★
()

3.14.32-1-lts и блоб nvidia-340xx-lts.

Интересно, что только вот счас опубликовали пакет с блобом

34 min. upgpkg: nvidia-340xx-lts 340.76-2

Linux 3.14.32 rebuild.


И баг висел. Странно, что оно у тебя работало...

https://bugs.archlinux.org/task/43768

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

Хм, да вот даже прямо сейчас работает:

[root@andrew-box ~]# pacman -Qs nvidia-340xx-lts
local/nvidia-340xx-lts 340.76-1

[root@andrew-box ~]# uname -a
Linux andrew-box 3.14.32-1-lts #1 SMP Fri Feb 6 21:18:49 CET 2015 i686 GNU/Linux

Проблему так и не решил. Завтра буду экспериментировать со сборкой драйвера хотя бы под ядро из реп. Отпишусь если будут новости.

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

Странно.

Обнови блоб лтс и собирай своё ядро (как в стартовом сообщении) — думаю, заработает.

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

там в исходниках малая часть, она собирается и к ней линкуется основной блоб-объектник

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