Gentoo Way Linux, Gentoo, Kubuntu, Ubuntu, Debian … компилируем всё!

25Сен/101

ATI — 10.9 FGLRX не собирается в DKMS

ATI Radeon

Очередное обновление, очередное «исправление», новые ошибки...одним словом - ATI.

Симптомы - fglrx не проходит фазу компиляции в DKMS, build log показывает что-то такое:

DKMS make.log for fglrx-8.771 for kernel 2.6.32-25-generic (x86_64)
Сбт Сен 25 16:09:51 MSD 2010
AMD kernel module generator version 2.1
doing Makefile based build for kernel 2.6.x and higher
/var/lib/dkms/fglrx/8.771/build/2.6.x
rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers
make -C /lib/modules/2.6.32-25-generic/build SUBDIRS=/var/lib/dkms/fglrx/8.771/build/2.6.x modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-25-generic'
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/firegl_public.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_acpi.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_agp.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_debug.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c: In function ‘KCL_IOCTL_AllocUserSpace32’:
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: error: implicit declaration of function ‘compat_alloc_user_space’
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: warning: return makes pointer from integer without a cast
make[2]: *** [/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o] Ошибка 1
make[1]: *** [_module_/var/lib/dkms/fglrx/8.771/build/2.6.x] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-25-generic'

make: *** [kmod_build] Ошибка 2
build failed with return value 2

Чтобы обойти ошибку можно подождать пару недель, вроде обещали исправить в октябре - но это же слишком долго.

Решение

Сделать нужно следующее - от root открыть файл /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h (или что у Вас сейчас используется), действие действительно и для x86 и для x86_64 архитектур (у меня например x86_64):

sudo nano /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h

Мотаем вниз файла и видим строчку:

#endif /* _ASM_X86_COMPAT_H */

Между этой строчкой и последней фигурной скобкой ( } ) копируем и вставляем код:

static inline void __user *compat_alloc_user_space(unsigned long len)
{
    struct pt_regs *regs = task_pt_regs(current);
    return (void __user *)regs->sp - len;
}

(на самом деле не обязательно вставлять код именно в это место - просто на всякий случай, чтобы не вставить его в какую-нибудь другую функцию)

Сохраняем файл и пробуем переустановить fglrx. Теперь всё должно получиться :)

Не думаю что этот код что-то может сломать но после установки его можно удалить, если есть желание.

DeliciousGoogle BookmarksGoogle GmailBlogger PostYahoo BookmarksDiggEvernoteTwitterВ закладки!
Метки записи: , , , , Читать полностью