ATI — 10.9 FGLRX не собирается в DKMS
Очередное обновление, очередное «исправление», новые ошибки...одним словом - ATI.
Симптомы - fglrx не проходит фазу компиляции в DKMS, build log показывает что-то такое:
Сбт Сен 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):
Мотаем вниз файла и видим строчку:
Между этой строчкой и последней фигурной скобкой ( } ) копируем и вставляем код:
{
struct pt_regs *regs = task_pt_regs(current);
return (void __user *)regs->sp - len;
}
(на самом деле не обязательно вставлять код именно в это место - просто на всякий случай, чтобы не вставить его в какую-нибудь другую функцию)
Сохраняем файл и пробуем переустановить fglrx. Теперь всё должно получиться 🙂
Не думаю что этот код что-то может сломать но после установки его можно удалить, если есть желание.