LinuxForum.Fans
Тема

Соответствие пакетов nvidia и linux

Автор: Armoyt 17 сообщений 6323 просмотров
#249156

Вопрос не праздный... как понять какой версии ядра соответствует какая версия nvidia дров? Пытаюсь откатить дрова к старой версии (что-то глюков тьма стала после последних обновлений), но похоже для этого придётся собирать ядро старой версии (какой именно версии?...). По-другому никак? Вообще я плохо себе представляю как взаимодействуют эти два пакета и что нужно для их совместимости (потонул в зависимостях пакмана).
Допустим я хочу, чтобы у меня крутились дрова версии X, какая версия ядра Y мне нужна, чтобы сборка модуля nvidia прошла успешно (без ругани на headers и зависимости)? Или прогрессивное человечество решает эту проблему без решения уравнений с двумя неизвестными? =)

P.S. И ещё я мечтаю реализовать это на основе какого-нибудь PKGBUILD из aur...

#249166

вот это покури крепко
а про версии всё просто → ядро в любом раскладе первично, не важно какая версия, в твоём случае(если конечно не собираешся собирать уж самые архаизмы типа 2.6.24) его можно не трогать вовсе, а вот для дров нвидии примерно такой расклад - все последние версии(те что вышли за последние полгода) можно собрать на новых ядрах, с более старыми возможны проблемы, с компилятором и заголовками, т.к. им не известны версии ядер 3.Х.Х поэтому надо смотреть на время выхода, ядро должно быть более старое по времени релиза, чем время релиза дров. Информацию можно найти на соответствующих ресурсах.

#249227

То бишь смотреть надо по времени релиза... Благодарю, кое-что проясняется. Ну а +\- во времени видимо зависит чисто от изменений в ядре.

хм.. Покурил =) судя по PKGBUILD, после распаковки дров в папке kernel должен лежать файл nvidia.ko, но его там нет. Смотрел такой же сборочный скриптик из аура, но для той версии ядра, что я ставлю (pkgver=256.53) - там тоже упоминается этот файл, но на практике его после распаковки не оказывается.

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

откуда его брать то?

#249237
"Armoyt" написал:
откуда его брать то?

:) ну так в этом и суть "сборки пакета", nvidia.ko это и есть сторонний модуль ядра от производителя карты, он создаётся во время компиляции NVIDIA-bla-bla-bla.run . Как это происходит ? Для начала скачай с оф. сайта нвидии любой понравившийся NVIDIA-bla-bla-bla.run , рекомендую 290-ю серию, она более-менее не глюкавая. Вот ссылка. Потом дай ему права на исполнение :

text

# chmod +x NVIDIA-bla-bla-bla.run

и запусти вот так :

text

# ./NVIDIA-bla-bla-bla.run  -A

почитай внимательно опции, там много интересного. Потом тебе нужено его собрать самостоятельно, как читай доки Арча. Вот вариант из вики.

#249240

Так этим яурт же должен заниматься (сборкой) или нет? Смысл PKGBUILD разве не в том, чтобы дать инструкции по сборке пакета? Но там происходит только распаковка NVIDIA-bla-bla-bla.run а затем запускается функция package(), в которой уже указан этот модуль как существующий. Больше сборочный скрипт ничего не делает и не планирует делать. функция билд в нём ограничена распаковкой .run.

#249243
"Armoyt" написал:
Так этим яурт же должен заниматься (сборкой) или нет?

этого я тебе не скажу, у меня Слака :) ..

"Armoyt" написал:
Смысл PKGBUILD разве не в том, чтобы дать инструкции по сборке пакета?

да, смысл именно в этом, суть в том что одной из этих инструкций должна быть приметно такой :

text

SRCNAM=NVIDIA-Linux-$TARGET-${VERSION}

CWD=$(pwd) TMP=${TMP:-/tmp/SBo} PKG=${PKG:-$TMP/package-$PRGNAM} OUTPUT=${OUTPUT:-/tmp}

rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP || exit 1 rm -rf $SRCNAM sh $CWD/$SRCNAM.run --extract-only || exit 1 cd $SRCNAM || exit 1 chown -R root:root . chmod -R u+w,go+r-w,a-s .

cd kernel || exit 1

make SYSSRC=$KERNELPATH module || exit 1

mkdir -p $PKG/lib/modules/$KERNEL/kernel/drivers/video install -m 0664 nvidia.ko $PKG/lib/modules/$KERNEL/kernel/drivers/video/

# Make sure the X is specified to automagically load the # correct driver, since I always forget.

это из Слаки, но суть одна в любом дистрибутиве, хоть в Федоре, хоть в Бубунте, хоть в Генту

#249246

Кажется я понял где был глюк, но наткнулся на новый.
Функция
build() {
_kernver="$(cat /lib/modules/${_extramodules}/version)"
cd "${srcdir}"
#sh "${_pkg}.run" --extract-only
cd "${_pkg}/kernel"
#_kernver=3.3.3-1-ARCH
make SYSSRC=/lib/modules/3.3.3-1-ARCH/build module
}

даёт результат:
*** Unable to determine the target kernel version. ***

make: *** [select_makefile] Ошибка 1
Он не видит ядра и предлагает указать путь к нему переменной SYSSRC, но она уже указывает на установленное ядро: make SYSSRC=/lib/modules/3.3.3-1-ARCH/build module

#249249
"Armoyt" написал:
но наткнулся на новый.

покажи весь билд, так не понятно что-где назначено.(под спойлер или на пастербин)

#249252
Показать
# $Id: PKGBUILD 157953 2012-04-30 07:19:09Z tpowa $
# Maintainer : Thomas Baechler <thomas@archlinux.org>

pkgname=nvidia
pkgver=256.53
_extramodules=extramodules-3.3-ARCH
pkgrel=3
pkgdesc="NVIDIA drivers for linux."
arch=('i686' 'x86_64')
url="http://www.nvidia.com/"
depends=('linux>=3.3' 'linux<3.4')
makedepends=('linux-headers>=3.3' 'linux-headers<3.4')
conflicts=('nvidia-96xx' 'nvidia-173xx')
license=('custom')
install=nvidia.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=('0bc1561b405443c6d1331934093137fd')
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=('dde8347cde142c329b6bb923747672a3')
fi

echo ${pkgdir}

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

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

P.S. дрова были распакованы вручную, потому закомментил кое-что, ну и кое-что ещё пришлось закомментить, чтобы он не качал их каждый раз заново с фтп.

#249254
"Armoyt" написал:
_kernver="$(cat /lib/modules/${_extramodules}/version)"
cd "${srcdir}"
#sh "${_pkg}.run" --extract-only
cd "${_pkg}/kernel"
#_kernver=3.3.3-1-ARCH
make SYSSRC=/lib/modules/3.3.3-1-ARCH/build module

вот и глюк.
С одной стороны

"Armoyt" написал:
_kernver="$(cat /lib/modules/${_extramodules}/version)"

но тут же

"Armoyt" написал:
#_kernver=3.3.3-1-ARCH
make SYSSRC=/lib/modules/3.3.3-1-ARCH/build module

а в следующей функции опять

"Armoyt" написал:
"${pkgdir}/lib/modules/${_extramodules}/nvidia.ko"

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

#249260

там в make SYSSRC=/lib/modules/3.3.3-1-ARCH/build module должна стоять переменная _kernver=3.3.3-1-ARCH, так что всё вроде так...

uname -r
3.3.3-1-ARCH

#249265

а какой драйвер ?

#249266

pkgver=256.53

#249269

ну так я же предупреждал что древние драйвера не знают о существовании ядер с номерами 3.Х.Х и поэтому не соберутся никогда .


NVIDIA Corporation
Last Updated: Fri Aug 27 21:34:08 PDT 2010
Most Recent Driver Version: 256.53

в то время вышло ядро 2.6.34 вот на нем и собирай, в принципе на любом вплоть до 2.6.39 (на счет 39 не уверен)

#249271

хм... 290 тогда мучать придёться...

Эффект тот же - модуль не видит ядро.

#249608

дрова были распакованы вручную, потому закомментил кое-что, ну и кое-что ещё пришлось закомментить, чтобы он не качал их каждый раз заново с фтп.

#250110

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

Войдите или зарегистрируйтесь, чтобы ответить.