ARM Linux应用程序如何调用驱动程序

我知道驱动程序加载后会在/dev下产生一个设备文件,应用程序是通过这个设备文件调用驱动程序中的函数,我看到的都说利用系统调用open,这是个什么函数呢?是系统自带的吗,跟... 我知道驱动程序加载后会在/dev下产生一个设备文件,应用程序是通过这个设备文件调用驱动程序中的函数,我看到的都说利用系统调用open,这是个什么函数呢?是系统自带的吗,跟struct file_operations中定义的open有没有关系,它会返回个什么值? 展开
 我来答
langqiong261
2011-03-29 · TA获得超过1161个赞
知道小有建树答主
回答量:1175
采纳率:0%
帮助的人:1194万
展开全部
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,
};
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式