本帖最后由 鬼鬼一哈 于 2010-10-16 16:28 编辑
///////////////测试程序//////////
int main()
{
int i =4;
int dev_fd;
dev_fd = open(GPIO_DEVICE_FILENAME, O_RDWR | O_NONBLOCK);
if( dev_fd == -1)
{
printf("Cann't open gpio device file\n");
exit(1);
}
printf("fd= %d\n",dev_fd);
while(i)
{
i--;
ioctl(dev_fd, LED_ON, i );
sleep(1);
ioctl(dev_fd, LED_OFF, i );
sleep(1);
ioctl(dev_fd, LED_ON, i );
printf(" %d\n",i);
}
close(dev_fd);
return 0;
}
////////////////////驱动部分函数///////////////////////
我在驱动的open函数ioctl函数里加几个打印信息的语句
int gpio_open(struct inode *inode, struct file *file)
{
s3c2410_gpio_cfgpin(S3C2410_GPB5,S3C2410_GPB5_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB6,S3C2410_GPB6_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB7,S3C2410_GPB7_OUTP);
s3c2410_gpio_cfgpin(S3C2410_GPB8,S3C2410_GPB8_OUTP);
printk("Open success.\n");
return 0;
}
和
static int gpio_ioctl(struct inode *inode,struct file *file, unsigned int cmd,unsigned long arg)
{
if ( arg > 4) { return -EINVAL; }
switch(cmd)
{
case LED_ON: { s3c2410_gpio_setpin(GPIO_TAB[arg], LED_ON);
printk("On success.\n");
}break;
case LED_OFF: { s3c2410_gpio_setpin(GPIO_TAB[arg], LED_OFF);
printk("Off success.\n");
}break;
default:
{
printk("Unsupported command\n");
break;
}
}
return 0;
}
驱动加载好然后执行这个测试程序。。打印出来的有
Open success.
fd = 3
On success.
Off success.
On success.
3
On success.
Off success.
On success.
2
On success.
Off success.
On success.
1
On success.
Off success.
On success.
0
Close success. (在release函数里)
都按我的要求执行了。为什么LED灯就没照我的要求亮灭呢?
s3c2410_gpio_setpin和s3c2410_gpio_cfgpin函数是TQ自己定义好的。我没有自己写! |