lug-bg: Как да инсталираме драйверите на ATI
- Subject: lug-bg: Как да инсталираме драйверите на ATI
- From: Атанас Мавров <bugar@xxxxxxxxxxxx>
- Date: Thu, 22 Jan 2004 15:40:11 +0200
Кратко ръководство за пестене на време и нерви :-)
Не знам колко от вас са се сблъсквали с подобни подобни проблеми но тук ще
изложа как успях да накарам Х -са и драйвера на ATI да работят нормално.
Системата е Slackware-current ядрото 2.6.1.
1. След като сложих 2.6.* ядро се появи странен проблем: Х -са тръгваше
нормално
но след като го спра системата замръзваше. Решението на този въпрос бе на
доста
неочаквано място за мен - след като спрях поддръжката на apm от ядрото
(оставих
ACPI) нещата се оправиха.Е след дългото търсене реших да отпразнувам
намирането
на решение като инсталирам драйверите на ATI
2. Е празника беше кратък. Инсталирах драйвера, и се опитах да компилирам
модула за ядрото намиращ се в /lib/modules/fglrx. Е да де но и тук срещнах
поредната трудност. Излизаха странни съобщения за грешка поради липсата на
дефиниция на VMALLOC_VMADDR. След ровене и консултации намерих начин да
поправя този проблем. Ето едно от възможните решения - във файла:
/usr/src/linux/include/asm-i386/pgtable.h
добавяме следния ред:
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
3. Задължително условие при компилиране на ядрото е да има поддръжка на AGP и
да няма никаква поддръжка на DRI!! Ако сте забравили DRI поддръжката в ядрото
вероятно ще видите съобщение от рода на:
fglrx(0): DRIScreenInit failed!
Решението както се досещате е просто - конфигурирайте ядрото без поддръжка на
DRI, прекомпилирайте и нещата надявам се ще се оправят.
4.За ползващите AMD процесори - имайте предвид че има проблем при
инициализацията на DRI! Ако Х -са не
се стартира и в dmesg откриете следните редове:Unable to handle kernel NULL
pointer dereference at virtual address 00000001 printing eip:d09a8320*pde =
0b0e6067*pte = 00000000
Oops: 0002 [#2]
............................
То проблемът най вероятно е такъв. Решението е да се промени файла:
lib/modules/fglrx/build_mod/firegl_public.c
Ето това е кода :
--------------------------------------------------------------------------------
---------------------- изрежи от тук --------------------------------
-- Attached file included as plaintext by Ecartis --
-- File: fglrx-patch.amd
--- firegl_public.c 2003-09-21 19:43:30.000000000 -0700
+++ firegl_public.c.new 2003-10-10 13:03:46.751838800 -0700
@@ -1508,7 +1508,7 @@
pte_t* pte_p;
pte_t pte;
- pte_linear = VMALLOC_VMADDR(virtual_addr); // convert to pte linear
address (x86 => nop)
+ pte_linear = ((unsigned long)(virtual_addr)); // convert to pte linear
address (x86 => nop)
pgd_p = pgd_offset(mm, pte_linear);
pmd_p = pmd_offset(pgd_p, pte_linear);
#ifndef FGL_ATOMIC_PTE
@@ -1981,7 +1981,7 @@
Convert to pte linear address (x86 => nop)
*/
- pte_linear = VMALLOC_VMADDR(linear);
+ pte_linear = ((unsigned long)(linear));
/*
Locate responsible kernel PTE for this linear address
@@ -2187,7 +2187,7 @@
pte_t* pte_p;
pte_t pte;
- pte_linear = VMALLOC_VMADDR(virtual_addr); // convert to pte linear
address (x86 => nop)
+ pte_linear = ((unsigned long)(virtual_addr)); // convert to pte linear
address (x86 => nop)
pgd_p = pgd_offset(vma->vm_mm, pte_linear);
pmd_p = pmd_offset(pgd_p, pte_linear);
#ifndef FGL_ATOMIC_PTE
@@ -3106,7 +3106,7 @@
int __ke_amd_adv_spec_cache_feature(void)
{
-#if ( (PAGE_ATTR_FIX == 1) || (LINUX_VERSION_CODE ==
KERNEL_VERSION(2,4,19)) )
+#if ( (PAGE_ATTR_FIX == 1) || (LINUX_VERSION_CODE >=
KERNEL_VERSION(2,4,19)) )
/* the kernel already does provide a fix for the AMD Athlon
big page attribute / cache flush data consistency system bug on its own.
(AMD claimed that CPU cache behaviour for such pages is not specified.)
--- agpgart_be.c 2003-09-21 19:43:30.000000000 -0700
+++ agpgart_be.c.new 2003-10-10 13:06:43.227010496 -0700
@@ -6070,7 +6070,7 @@
VIA_APOLLO_KT400,
"Via",
"Apollo KT400",
- via_generic_setup }, // AGP v2
+ via_kt400_setup }, // AGP v2
{ PCI_DEVICE_ID_VIA_8754, // == PCI_DEVICE_ID_VIA_P4X333,
PCI_VENDOR_ID_VIA,
VIA_APOLLO_P4X400,
--------------------------------------------------------------------------------
--------------------- изрежи до тук --------------------------------
Ако не ви се занимава може да изтеглите готовия файл от:
http://free.top.bg/bugar/ati/firegl_public.c
И така прекомпилирайте на ново драйвера, инсталирайте модула и се надявам
всичко
да работи нормално. Това може да проверите като изпълните следната команда:
glxinfo
glxgears
П.П. Специални благодарности на Виктор Василев. Без неговата помощ горните
редове нямаше да ги има :-)
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
|