Arch-Like - nietypowy blog, nietypowe forum.

Poradniki => Software => Wątek zaczęty przez: sir_lucjan w Październik 27, 2014, 20:36:40

Tytuł: [How To]Kompilujemy sterowniki nVidia pod własny kernel
Wiadomość wysłana przez: sir_lucjan w Październik 27, 2014, 20:36:40
Jeśli skompilowaliśmy samodzielnie kernel zgodnie z jedną z wcześniejszych porad, to czeka nas jeszcze jedno wyzwanie, a mianowicie (o ile posiadamy kartę nvidia) musimy skompilować sterowniki, gdyż próba zainstalowania sterowników z repozytorium dociągnie kernel dystrybucyjny. Nie musimy od podstaw tworzyć pliku PKGBUILD, wystarczy jak odpowiednio zmodyfikujemy jeden z istniejących. W poradniku posłużę się sterownikiem zbudowanym pod nasz  kernel dostępny w AUR (linux-bridge-pl), zaś podstawą działania są również dostępne w AUR źródła nvidia-bridge-pl. Pierwsze co musimy zrobić, to pobrać tarball i odpowiednio zmodyfikować pliki. Na pierwszy ogień pójdzie plik .install, któremu nadałem nazwę nvidia-naszanazwa.install. Zawartość powinna wyglądać następująco:

post_install() {
EXTRAMODULES='extramodules-3.11-naszanazwa'
depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
echo 'In order to use nvidia module, reboot the system.'
}

post_upgrade() {
EXTRAMODULES='extramodules-3.11-naszanazwa'
depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
if [ "$(vercmp $2 310.19-2)" -lt 0 ]; then
echo 'If your card is from the 7xxx series or earlier, install nvidia-304xx-lucek'
fi
}

post_remove() {
EXTRAMODULES='extramodules-3.11-naszanazwa'
depmod $(cat /usr/lib/modules/$EXTRAMODULES/version)
}

Natomiast plik PKGBUILD powinien wyglądać następująco:


pkgname=nvidia-naszanazwa
pkgver=325.15
_extramodules=extramodules-3.11-naszanazwa
pkgrel=1
_pkgdesc="NVIDIA drivers for linux-naszanazwa."
pkgdesc="$_pkgdesc"
arch=('i686' 'x86_64')
url="http://www.nvidia.com/"
depends=('linux-naszanazwa>=3.11' 'linux-naszanazwa<3.12' "nvidia-libgl" "nvidia-utils=${pkgver}")
makedepends=('linux-naszanazwa-headers>=3.11' 'linux-naszanazwa-headers<3.12')
conflicts=('nvidia-96xx-all' 'nvidia-173xx-all')
license=('custom')
install=nvidia-naszanazwa.install
options=(!strip)

if [ "$CARCH" = "i686" ]; then
_arch='x86'
_pkg="NVIDIA-Linux-${_arch}-${pkgver}"
source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
md5sums=('528fc538584de6446384b9cec3099d6c')
elif [ "$CARCH" = "x86_64" ]; then
_arch='x86_64'
_pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
md5sums=('63b2caa0cb128efa1a7808d7bddb2074')   
fi

build() {
_kernver="$(cat /usr/lib/modules/${_extramodules}/version)"
sh ${_pkg}.run --extract-only
cd ${_pkg}/kernel
make SYSSRC=/usr/lib/modules/"${_kernver}/build" module
}

package() {
install -Dm644 "${srcdir}/${_pkg}/kernel/nvidia.ko" \
"${pkgdir}/usr/lib/modules/${_extramodules}/nvidia.ko"
install -dm755 "${pkgdir}/usr/lib/modprobe.d"
echo "blacklist nouveau" >> "${pkgdir}/usr/lib/modprobe.d/nvidia-naszanazwa.conf"
sed -i -e "s/EXTRAMODULES='.*'/EXTRAMODULES='${_extramodules}'/" "${startdir}/nvidia-naszanazwa.install"
gzip -9 "${pkgdir}/usr/lib/modules/${_extramodules}/nvidia.ko"
}

Pozostaje nam tylko wydać polecenie

makepkg -s
i po chwili pakiet zostanie zbudowany

NVIDIA: left KBUILD.
==> Wchodzę do środowiska fakeroot...
==> Zaczynam package()
==> Sprzątam...
  -> Usuwanie niechcianych plików...
  -> Kompresuję strony man oraz info...
==> Creating package "nvidia-naszanazwa"...
  -> Generuję plik .PKGINFO...
  -> Dodawanie pliku install...
  -> Generowanie pliku .MTREE...
  -> Kompresuję pakiet...
==> Opuszczam środowisko fakeroot.
==> Skończyłem tworzenie: nvidia-naszanazwa 325.15-1 (sob, 14 wrz 2013, 16:45:43 CEST)