AnsweredAssumed Answered

uCLinux on STM3210E-EVAL

Question asked by shah.hardik on Apr 7, 2013
I want to read USER key switch (GPIOG8) as input, but don't know how to create /dev/GPIOG8 file in rootfs.

In the file: ~/uclinux-dist/workspace/
vendors/STMicroelectronics/STM3210E-eval-jffs/device.tab we change the port manually by editing this file(device.tab) in notepad as shown below:

#<name>    <type> <mode> <uid> <gid> <major> <minor> <start>  <inc>  <count>
/dev            d  755  0       0        -      -       -       -       -
/dev/console    c  640  0       0        5      1       -       -       -
/dev/gpioF      c  640  0       0        253    1       1       1       16
/dev/mem        c  640  0       0        1      1       -       -       -
/dev/mtd        c  640  0       0       90      0       0       2       4
/dev/mtdro      c  640  0       0       90      1       0       2       4
/dev/null       c  640  0       0        1      3       -       -       -
/dev/ttyS       c  640  0       0      204    192    0       1       2
/dev/zero       c  640  0       0        1      5       -       -       -
/dev/rtc    c  640  0       0        254    0    -    -    -
/dev/gpioG      c  640  0       0        253    1       8       1       2

But I could not see GPIOG8 in rootfs the device file..

So later I modified device.tab as shown below:
/dev            d  755  0       0        -      -       -       -       -
/dev/console    c  640  0       0        5      1       -       -       -
/dev/gpioG      c  640  0       0        253    1       1       1       16
/dev/mem        c  640  0       0        1      1       -       -       -
/dev/mtd        c  640  0       0       90      0       0       2       4
/dev/mtdro      c  640  0       0       90      1       0       2       4
/dev/null       c  640  0       0        1      3       -       -       -
/dev/ttyS       c  640  0       0      204    192    0       1       2
/dev/zero       c  640  0       0        1      5       -       -       -
/dev/rtc    c  640  0       0        254    0    -    -    -
#/dev/gpioG      c  640  0       0        253    1       8       1       2

Now I am able to see GPIOG8 in rootfs and able to open the port but when I tried reading the port i got always 0, even though the pin is pulled up externally. I should be getting 1 if switch is not pressed instead of 0.
I have configured the GPIOG8 as input floating by giving
    write(deviceFileDescriptorForSwitch,"I6",2);
but I am not sure that worked or not.

For input user application code is

    char switch_input[] = "/dev/gpioG8";
    int deviceFileDescriptorForSwitch;

    deviceFileDescriptorForSwitch = open(switch_input,1);
    if(deviceFileDescriptorForSwitch < 0)
    {
        printf("can not open gpio portG8 for reading");
        return -1;
    }
    printf("\nopen successfully");

    write(deviceFileDescriptorForSwitch,"I6",2);
    result = read(deviceFileDescriptorForSwitch, buff, 1);
    printf("\nbuf = ");
    switch(buff[0])
    {
        case 0:
                printf("val 0");
                break;
        case 1:
                printf("val 1");
                break;
        case '0':
                printf("char 0");
                break;
        case '1':
                printf("char 1");
                break;
        default:
            printf("unkown");
    }


Please help me in getting this program working!!




Outcomes