ARM Linux应用程序如何调用驱动程序
我知道驱动程序加载后会在/dev下产生一个设备文件,应用程序是通过这个设备文件调用驱动程序中的函数,我看到的都说利用系统调用open,这是个什么函数呢?是系统自带的吗,跟...
我知道驱动程序加载后会在/dev下产生一个设备文件,应用程序是通过这个设备文件调用驱动程序中的函数,我看到的都说利用系统调用open,这是个什么函数呢?是系统自带的吗,跟struct file_operations中定义的open有没有关系,它会返回个什么值?
展开
1个回答
展开全部
open 是linux的函数,因为他管理设备的方法和管理文件一样,打开,读,写,关闭。所以在设计驱动程序的时候,也要遵循这种方法,方便调用。返回的一般是设备号,常定义为变量fd,返回-1表示打开不成功。
追问
谢谢,看了一些书,发现原来是系统调用。
但是像系统调用ioctl(unsigned int fd,unsigned int cmd,unsigned long arg)
和struct file_operations中的int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long)应该是有对应关系的吧,但他们的参数不同,又是怎样对应的?这两个函数的最后两个参数cmd和arg又是不是对应的呢?
追答
当打开设备后,要对设备的io进行控制时,使用ioctl方式,不同的设备定义是有差别的。
例如一个led控制程序
/*打开/dev/leds设备文件*/
fd = open("/dev/leds0", 0);
if (fd 4) {
return -EINVAL;
}
s3c2410_gpio_setpin(led_table
return 0;
default:
return -EINVAL;
}
}
static struct file_operations dev_fops = {
.owner = THIS_MODULE,
.ioctl = sbc2440_leds_ioctl,
};
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |