[linux-ileri] /dev/mem 'e assembly 'den ulasma

---------

From: Derya Sezen (funky@gsu.linux.org.tr)
Date: Wed 17 Sep 2003 - 12:10:57 EDT

  • Next message: Kenan Öztürk: "[linux-ileri] Sorun - Acil Yardim!"

    Selam,

    General Purpose I/O 'larimi user space'den /dev/mem'e memory map ile
    ulasip istedigim flag'lari set edebiliyorum. Bunu kernel video.S veya
    xx.S dosyalarindan birine gommek icin assembly seviyesinde /dev/mem '
    nasil ulasabilirim? Yapilacak islemin mantigi :

    ldr r1,=0x90040000
    ldr r2,=0x00004000
     
    str r2,[r1,#0x00]
     
    ldr r1,=0x9004000C
    ldr r2,=0x00004000
     
    str r2,[r1,#0x00]

    tarzinda bisi olmasi gerek ama /dev/mem 'e ulasmam gerek bundan once.
    Istedigim islemi C'de asagidaki kodum ile yapabiliyorum:

    #define GPIO_BASE_OFFSET 0x90040000
    #define GPIO_GPLR_OFFSET 0x00000000
    #define GPIO_GPDR_OFFSET 0x00000004
    #define GPIO_GPSR_OFFSET 0x00000008
    #define GPIO_GPCR_OFFSET 0x0000000C
    #define GPIO_MAP_SIZE (GPIO_BASE_OFFSET)

    int gpio_fd;
    static void * gpio_map=NULL;
    int main(int argc, char *argv[])
    {
     
       gpio_fd = open("/dev/mem", O_RDWR | O_SYNC);
       if(gpio_fd < 0)
       {
          printf("Memory device acilamiyor /dev/mem");
          exit(0);
       }
     
        gpio_map = mmap(NULL,PAGE_SIZE,PROT_WRITE, MAP_SHARED, gpio_fd,
    GPIO_BASE_OFFSET); //gpio'nu mem alanini map et
            *((unsigned int *)(gpio_map + GPIO_GPDR_OFFSET)) &=
    0xFFFF7FFF; //gpio(15)'i input olarak sec - Power status
            *((unsigned int *)(gpio_map + GPIO_GPDR_OFFSET)) |=
    0x00004000; //gpio(14)'u output olarak sec
     
     
            *((unsigned int *)(gpio_map+GPIO_GPSR_OFFSET)) &=
    0xFFFFBFFF;
            *((unsigned int *)(gpio_map+GPIO_GPCR_OFFSET)) |= 0x00004000;
        return 1;
    }
         
    fikri olan var mi?

    P.S. : kod arm offset'leri baz alinarak yazilmishtir. i386 'da
    calismayabilir.

    funky


  • Next message: Kenan Öztürk: "[linux-ileri] Sorun - Acil Yardim!"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.