Porteus и NVIDIA. Собираем актуальный драйвер для видеокарты

Добро пожаловать!

Moderator: Blaze

Post Reply
User avatar
Blaze
Moderator
Moderator
Posts: 1353
Joined: 28 Dec 2010, 11:31
Distribution: ⟰ Porteus 3.2 Cinnamon x86_64
Location: ☭ Russian Federation, Lipetsk region, Dankov
Contact:

Porteus и NVIDIA. Собираем актуальный драйвер для видеокарты

Post#1 by Blaze » 15 May 2016, 17:29

Как сделать xzm модуль-драйвер для видеокарты NVIDIA
1. Заходим на сайт nvidia.ru в раздел 'Драйверы > Загрузить драйверы'

2. Вручную выбирете Вашу NVIDIA видео карту, а так же разрядность операционной системы Linux 32-bit (i586) или 64-bit (x86_64) и нажимаем кнопку 'Поиск'
Image

3. Нажимаем кнопку 'Загрузить сейчас'
Image

4. Нажимаем кнопку 'Принять и скачать'
Image

5. Так же скачиваем:

под разрядность операционной системы Porteus:

- 05-devel.xzm (i586)
- crippled_sources.xzm (i586)

или

- 05-devel.xzm (x86_64)
- crippled_sources.xzm (x86_64)

5.1 blacklist.xzm для блокировки загрузки nouveau

5.2 nvidia.sh - скрипт для создания xzm модуля nVidia

Code: Select all

#!/bin/bash
# Build and clean nVidia xzm driver module for Porteus by Blaze for arch x86 or x86_64:
dir2xzm /mnt/live/memory/changes /tmp/nvidia.xzm
cd /tmp
mkdir /tmp/nvidia
xzm2dir nvidia.xzm nvidia
cd /tmp/nvidia
rm -rf /tmp/nvidia/dev
rm -rf /tmp/nvidia/mnt
rm -rf /tmp/nvidia/root
rm -rf /tmp/nvidia/tmp
rm -rf /tmp/nvidia/var
rm -rf /tmp/nvidia/etc/*[^OpenCL,X11]
rm /tmp/nvidia/etc/adjtime
rm /tmp/nvidia/etc/ld.so.cache
rm /tmp/nvidia/etc/localtime
rm /tmp/nvidia/etc/X11/xorg.conf.nvidia-xconfig-original
tar xvjf /tmp/nvidia.tar.bz2
rm /tmp/nvidia/lib/modules/*porteus/modules.*
rm -rf /tmp/nvidia/usr/src
rm -rf /tmp/nvidia/usr/lib/gio
rm -rf /tmp/nvidia/usr/lib/gtk-2.0
rm -rf /tmp/nvidia/usr/lib/gtk-3.0
rm -rf /tmp/nvidia/usr/lib64/gio
rm -rf /tmp/nvidia/usr/lib64/gtk-2.0
rm -rf /tmp/nvidia/usr/lib64/gtk-3.0
rm -rf /tmp/nvidia/usr/share/mime
rmdir /tmp/nvidia/usr/share/pixmaps
rm /tmp/nvidia/usr/share/applications/mimeinfo.cache
dir2xzm /tmp/nvidia /tmp/nvidia-repack.xzm
cd /tmp
mv /tmp/nvidia-repack.xzm /mnt/sdb1/porteus/modules
rm /mnt/sdb1/porteus/base/blacklist.xzm
rm -rf /tmp
reboot
где sdb1 путь до ОС Porteus. Если у Вас путь до диска с Porteus отличается, то вместо sdb1 укажите свой раздел диска, например sdc1.

5.3 nvidia.tar.bz2 - архив с конфигурационными файлами:

\etc\modprobe.d\nvidia-installer-disable-nouveau.conf

Code: Select all

# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0
\etc\rc.d\rcS.d\S99-nVidia

Code: Select all

#!/bin/bash
# Make sure we use xorg.conf with nVidia driver:

if ! grep -q 'Driver.*nvidia' /etc/X11/xorg.conf 2>/dev/null; then
    cp -af /mnt/live/memory/images/`ls /mnt/live/memory/images | grep nVidia- | head -n1`/etc/X11/xorg.conf /etc/X11
fi
6. Скопируйте 05-devel.xzm, crippled_sources.xzm, blacklist.xzm в /porteus/base/

7. Загрузите Porteus в режиме 'Text mode'
Image

8. Вводим логин (если не меняли данные от root пользователя)

Code: Select all

root
и пароль

Code: Select all

toor
Image

9. Скопируйте NVIDIA-Linux-x86-340.96.run (актуальная версия на момент написания статьи), nvidia.sh и nvidia.tar.bz2 в директорию /tmp

Для удобства можно воспользоваться Midnight Commander. Введите команду

Code: Select all

mc
  • в правой колонке Midnight Commander откройте директорию /tmp
  • в левой колонке Midnight Commander найдите файлы NVIDIA-Linux-x86-340.96.run, nvidia.sh, nvidia.tar.bz2 (заранее определитесь куда Вы их предварительно скопировали. Например на локальный диск D в Linux системах будет путь /mnt/sda5)
  • скопируйте данные файлы из левой колонки в правую колонку с открытой директорией /tmp
Image

10. Затем вводим команды

Code: Select all

cd /tmp
chmod +x NVIDIA-Linux-x86-340.96.run
chmod +x nvidia.sh
./NVIDIA-NVIDIA-Linux-x86-340.96.run
11. Появится сообщение

Code: Select all

Please read the following LICENSE and then select either "Accept" to accept the license and continue with the installation, or select "Do Not Accept" to abort the installation.
Image
Выбираем и нажимаем 'Accept', после чего начнется компиляция драйвера
Image

12. Если вы компилируйте драйвер для архитектуры x86_64, то у Вас появится сообщение:

Code: Select all

Install NVIDIA's 32-bit compatibility libraries?
Подтверждаем путем выбора 'Yes'

13. На сообщение

Code: Select all

Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any pre-existing X configuration file will be backed up.
Image
отвечаем положительно, путем выбора 'Yes'

14. Появится сообщение

Code: Select all

Your X configuration file has been successfully updated. Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86 (version: 340.96) is now comleted.
Image
в зависимости от разрядности может быть

Code: Select all

Your X configuration file has been successfully updated. Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64 (version: 340.96) is now comleted.
Нажимаем 'ОК'

15. В терминале вводим команду для сборки xzm модуля, последующей очистки от ненужного хлама и его пересборкой.

Code: Select all

./nvidia.sh
модуль nvidia-repack.xzm (потом можете его переименовать его указав версию драйвера) будет скопирован в /mnt/sdb1/porteus/modules (если не меняли путь в пункте 5.2)

Примеры имен модулей:
  • nVidia-340.96-porteus-v3.2rc2-i586.xzm
  • nVidia-340.96-porteus-v3.2rc2-x86_64.xzm
16. После чего будет произведена перезагрузка Porteus. На этом все - загружайте Porteus в обычном режиме 'Graphics mode' и пользуйтесь всеми прелестями NVIDIA драйвера.

Скриншоты:
Image
Image
Linux porteus 4.12.7-porteus #1 SMP PREEMPT Sun Aug 13 17:38:30 x86_64 Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] (rev 81) » Vengeance LPX 16GB DDR4 K2 3200MHz C16

User avatar
Blaze
Moderator
Moderator
Posts: 1353
Joined: 28 Dec 2010, 11:31
Distribution: ⟰ Porteus 3.2 Cinnamon x86_64
Location: ☭ Russian Federation, Lipetsk region, Dankov
Contact:

Re: Porteus и NVIDIA. Собираем актуальный драйвер для видеок

Post#2 by Blaze » 10 Jun 2016, 18:10

Применение патча на драйвере NVIDIA
Приведу в качестве примера. Моя старая видео карта не поддерживает ядро 4.6.x, поэтому для сборки драйвера nVidia пришлось применить патч.

Code: Select all

# скачайть и скопиррвать NVIDIA-Linux-x86_64-340.96.run в директорию /tmp
cd /tmp
sh NVIDIA-Linux-x86_64-340.96.run --extract-only
# скопировать патч-файл nv.patch в нужную папку извлеченного драйвера NVIDIA-Linux-x86_64-340.96.run
# перейти в данную папку командой cd и применить патч командой
patch -p1 < ./nv.patch
# после удачного применения патча, удалите nv.patch
./NVIDIA-Linux-x86_64-340.96/makeself.sh \
--target-os Linux --target-arch x86_64 \
NVIDIA-Linux-x86_64-340.96 \
NVIDIA-Linux-x86_64-340.96-patched.run \
"NVIDIA driver 340.96 patched for k4.3+" \
./nvidia-installer
после чего в директории /tmp у Вас должен появится пропаченный драйвер NVIDIA-Linux-x86_64-340.96-patched.run и сообщение с контрольными суммами, например:

Code: Select all

CRC: 3184225005
MD5: fa29efa32962a743e16bb856618cfd8c

Self-extractible archive "NVIDIA-Linux-x86_64-340.96-patched.run" successfully created.
Если кого-то заинтересует, то оставляю в данной теме содержимое патча nv.patch для 340.96 делающего это исправление:

Code: Select all

--- kernel/os-mlock.c.orig 2015-11-09 06:44:53.000000000 +0100
+++ kernel/os-mlock.c 2016-05-18 19:16:33.263103070 +0200
@@ -45,7 +45,11 @@
}

down_read(&mm->mmap_sem);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
ret = get_user_pages(current, mm, (unsigned long)address,
+#else
+ ret = get_user_pages((unsigned long)address,
+#endif
page_count, write, force, user_pages, NULL);
up_read(&mm->mmap_sem);
pinned = ret;
@@ -58,7 +62,11 @@
else if (pinned < page_count)
{
for (i = 0; i < pinned; i++)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
page_cache_release(user_pages[i]);
+#else
+ put_page(user_pages[i]);
+#endif
os_free_mem(user_pages);
return RM_ERR_INVALID_ADDRESS;
}
@@ -85,7 +93,11 @@
{
if (write)
set_page_dirty_lock(user_pages[i]);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
page_cache_release(user_pages[i]);
+#else
+ put_page(user_pages[i]);
+#endif
}

os_free_mem(user_pages);
--- kernel/uvm/nvidia_uvm_lite.c.orig 2015-11-09 06:44:53.000000000 +0100
+++ kernel/uvm/nvidia_uvm_lite.c 2016-05-18 19:16:33.263103070 +0200
@@ -785,7 +785,11 @@
// a reference so that the fault handling logic is correct:
//
get_page(pTracking->uvmPage);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0)
retValue = VM_FAULT_MINOR;
+#else
+ retValue = 0;
+#endif
}

pRecord->isMapped = NV_TRUE;
Linux porteus 4.12.7-porteus #1 SMP PREEMPT Sun Aug 13 17:38:30 x86_64 Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] (rev 81) » Vengeance LPX 16GB DDR4 K2 3200MHz C16

Flexdj
Ronin
Ronin
Posts: 1
Joined: 10 Mar 2017, 13:05
Distribution: Porteus
Location: ростов

Re: Porteus и NVIDIA. Собираем актуальный драйвер для видеок

Post#3 by Flexdj » 10 Mar 2017, 23:17

Пробывал собрать не получилось, останавливаеться на 100% процентах и все

User avatar
Blaze
Moderator
Moderator
Posts: 1353
Joined: 28 Dec 2010, 11:31
Distribution: ⟰ Porteus 3.2 Cinnamon x86_64
Location: ☭ Russian Federation, Lipetsk region, Dankov
Contact:

Re: Porteus и NVIDIA. Собираем актуальный драйвер для видеок

Post#4 by Blaze » 11 Mar 2017, 06:47

Flexdj, 05-devel.xzm и crippled_sources.xzm брали для Porteus 3.2.2?

i586
http://dl.porteus.org/i586/Porteus-v3.2.2/kernel/

x86_64
http://dl.porteus.org/x86_64/Porteus-v3.2.2/kernel/

Есть обновленная инструкция по сборке драйвера NVIDIA в модуль Porteus - How to create a Nvidia driver xzm module от fulalas
Linux porteus 4.12.7-porteus #1 SMP PREEMPT Sun Aug 13 17:38:30 x86_64 Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] (rev 81) » Vengeance LPX 16GB DDR4 K2 3200MHz C16

Post Reply