от Атанас Мавров(22-01-2004)
рейтинг (9)
[ добре ]
[ зле ]
Вариант за отпечатване
Кратко ръководство за пестене на време и нерви :-)
Не знам колко от вас са се сблъсквали с подобни подобни проблеми но
тук ще
изложа как успях да накарам Х -са и драйвера на ATI да работят
нормално.
Системата е Slackware-current ядрото 2.6.1.
След като сложих 2.6.* ядро се появи странен проблем: Х-са
тръгваше нормално,
но след като го спра, системата замръзваше. Решението на този въпрос бе
на доста
неочаквано място за мен - след като спрях поддръжката на apm от ядрото
(оставих
ACPI) нещата се оправиха. Е, след дългото търсене реших да отпразнувам
намирането
на решение, като инсталирам драйверите на ATI.
Е, празника беше кратък. Инсталирах драйвера, и се опитах да
компилирам
модула за ядрото, намиращ се в /lib/modules/fglrx. Е да де, но и тук
срещнах
поредната трудност. Излизаха странни съобщения за грешка поради липсата
на
дефиниция на VMALLOC_VMADDR. След ровене и консултации намерих начин
да
поправя този проблем. Ето едно от възможните решения - във файла /usr/src/linux/include/asm-i386/pgtable.h
добавяме следния ред:
#define VMALLOC_VMADDR(x) ((unsigned long)(x))
Задължително условие при компилиране на ядрото е да има поддръжка
на AGP и
да няма никаква поддръжка на DRI!! Ако сте забравили DRI поддръжката
в ядрото,
вероятно ще видите съобщение от рода на:
fglrx(0): DRIScreenInit failed!
Решението, както се досещате, е просто - конфигурирайте ядрото без
поддръжка на
DRI, прекомпилирайте и нещата надявам се ще се оправят.
За ползващите 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
П.П. Специални благодарности на Виктор Василев. Без неговата помощ
горните
редове нямаше да ги има :-)
<< Използване на distcc и ccache | BIND9: Опционално заключване на демона >>
|