主题 : 用一个测试程序来测试两个驱动程序,但是另一个驱动没作用,怎么回事 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 56028
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
综合积分: 66 分
注册时间: 2011-09-28
最后登录: 2012-07-17
楼主  发表于: 2011-11-07 10:22

 用一个测试程序来测试两个驱动程序,但是另一个驱动没作用,怎么回事


我目的用按键控制led灯,下面是测试程序!
我的测试程序如下:
int main(void)
{
    int buttons_fd;//打开按键设备文件返回的描述符
    int led_fd;//打开led设备文件返回的描述符
    char buttons_buff[6]={'0','0','0','0','0','0'};//存储从按键驱动程序中读出的值
    buttons_fd = open("/dev/buttons",0666);//打开按键中断设备文件
    if(buttons_fd<0)
    {
        perror("open device buttons");
        exit(1);
    }
    led_fd = open("/dev/leds",0666);//打开led设备文件
    if(led_fd<0)
    {
        perror("open device buttons");
        exit(1);
    }
    int i;
    char save[6]={'0','0','0','0','0','0'};//用来与buttons_buff做比较的
    while(1)
    {
          memset(buttons_buff,0,sizeof(buttons_buff));
    if(read(buttons_fd,buttons_buff,sizeof(buttons_buff)) != size(buttons_buff))//从按键设备文件中读取数据保存到butons_buff中
        {
            perror("read buttons:");
            exit(1);
        }
        if(strncmp(save,buttons_buff,6)==0)//比较save与buttons_buff是 否相同,如果相同,退出本次循环;不相同进入for语句判断
            continue;
        for(i=0;i<sizeof(buttons_buff)/sizeof(buttons_buff[0]);i++)
        {
            if(save != buttons_buff)
            {
                printf("The %d key pressed !\n",i+1);
                ioctl(led_fd,i+1);//调用led设备文件的IOCTL(调用这里时我led应该亮了,但是不亮?)
                printf("ioctl success!\n");
            }
        }
        printf("buffons_buff clean !\n");    
    }
    close(buttons_fd);
    close(led_fd);
    return 0;
}
高手一定能看懂这个程序!我的问题就出在调用led的ioctl这里!
我执行这个测试程序,每按下一个键都能打印出相应的键值(就是printf("The %d key pressed !\n")与printf("ioctl success!\n"),这样就说明我的ioctl(led_fd,i+1)也执行了!但是我开发板上的led灯却不亮!(我确定不是我led驱动程序的问题,我专门用led的测试程序测试过!)我的ioctl函数没有定义命令,是不是没定义命令的问题?还有是不是两个驱动程序之间得用那个导出函数(EXPORT_SYMBOL)?
我这里的ioctl就是没点亮开发板上的led?望高手指点!
境由心生,事在人为!
级别: 新手上路
UID: 103285
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
综合积分: 20 分
注册时间: 2014-04-22
最后登录: 2014-11-19
1楼  发表于: 2014-07-31 09:10
So do I ! Consult  god