ot Atanas Mavrov(22-01-2004)

reiting (9)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Kratko rukovodstvo za pestene na vreme i nervi :-)

Ne znam kolko ot vas sa se sbluskvali s podobni podobni problemi no tuk shte izlozha kak uspiah da nakaram H -sa i draivera na ATI da rabotiat normalno. Sistemata e Slackware-current iadroto 2.6.1.

  1. Sled kato slozhih 2.6.* iadro se poiavi stranen problem: H-sa trugvashe normalno, no sled kato go spra, sistemata zamruzvashe. Reshenieto na tozi vupros be na dosta neochakvano miasto za men - sled kato spriah poddruzhkata na apm ot iadroto (ostavih ACPI) neshtata se opraviha. E, sled dulgoto tursene reshih da otpraznuvam namiraneto na reshenie, kato instaliram draiverite na ATI.

  2. E, praznika beshe kratuk. Instalirah draivera, i se opitah da kompiliram modula za iadroto, namirasht se v /lib/modules/fglrx. E da de, no i tuk sreshtnah porednata trudnost. Izlizaha stranni suobshteniia za greshka poradi lipsata na definitsiia na VMALLOC_VMADDR. Sled rovene i konsultatsii namerih nachin da popravia tozi problem. Eto edno ot vuzmozhnite resheniia - vuv faila /usr/src/linux/include/asm-i386/pgtable.h dobaviame sledniia red:

     #define VMALLOC_VMADDR(x) ((unsigned long)(x)) 
     
  3. Zadulzhitelno uslovie pri kompilirane na iadroto e da ima poddruzhka na AGP i da niama nikakva poddruzhka na DRI!! Ako ste zabravili DRI poddruzhkata v iadroto, veroiatno shte vidite suobshtenie ot roda na:

     fglrx(0): DRIScreenInit failed! 
     

    Reshenieto, kakto se doseshtate, e prosto - konfiguriraite iadroto bez poddruzhka na DRI, prekompiliraite i neshtata nadiavam se shte se opraviat.

  4. Za polzvashtite AMD protsesori - imaite predvid, che ima problem pri initsializatsiiata na DRI! Ako H-sa ne se startira i v dmesg otkriete slednite redove:

     Unable to handle kernel NULL 
     pointer dereference at virtual address 00000001 printing 
     eip:d09a8320*pde = 0b0e6067*pte = 00000000 
     Oops: 0002 [#2] 
     ............................ 
     

    To problemut nai-veroiatno e takuv. Reshenieto e da se promeni faila lib/modules/fglrx/build_mod/firegl_public.c. Eto tova e kodut:

     -- 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, 
     

    Ako ne vi se zanimava, mozhe da izteglite gotoviia fail ot http://free.top.bg/bugar/ati/firegl_public.c.

    I taka, prekompiliraite nanovo draivera, instaliraite modula i se nadiavam vsichko da raboti normalno. Tova mozhe da proverite, kato izpulnite slednata komanda:

     $ glxinfo 
     $ glxgears 
     

P.P. Spetsialni blagodarnosti na Viktor Vasilev. Bez negovata pomosht gornite redove niamashe da gi ima :-)



<< Izpolzvane na distcc i ccache | BIND9: Optsionalno zaklyuchvane na demona >>