我目的用按键控制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?望高手指点!