Linux应用程序调用驱动程序的过程

时间:2024-03-23 18:04:30

一、大体调用过程

  应用程序位于用户空间,驱动程序位于内核空间,Linux系统规定,用户空间不可以直接调用内核空间的函数。所以必须经过系统调用,应用程序才可以调用驱动程序的函数。具体系统调用的过程,这是属于更高级别的知识,以后有机会再补充,大体就是通过C库函数实现的,目前只要知道这个过程即可。另外,应用程序通过系统调用去调用驱动程序的函数,还有一个前提就是驱动程序必须留有接口,这里的接口就是ops函数操作集(有点类似Windows的DLL),所以我们一般在驱动程序中设计好接口,然后实现接口函数。

Linux应用程序调用驱动程序的过程

 

二、具体实施过程

   2.1根据对设备的操作需要,设计驱动程序的接口, 如下:

Linux应用程序调用驱动程序的过程

 

2.2在驱动程序中实现接口,如下:

static int xxx_open(struct inode *inode, struct file *filp)

{

/* 实现具体的功能*/

return 0;

}

static ssize_t xxx_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off)

{

/* 实现具体的功能*/

return 0;

}

static ssize_t xxx_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *off)

{

/* 实现具体的功能*/

return 0;

}

2.3在应用程序通过C库函数,调用驱动程序的接口,实现对设备的操作:

  先打开设备文件得到文件标识符:fd = open(filename, O_RDWR);

  根据文件标识符实现读操作:ret = read(fd, databuf, sizeof(databuf));

根据文件标识符实现写操作:ret = write(fd, writebuf, sizeof(writebuf));

2.4如果使用设备树的话,在设备树文件dtsi中增加设备信息。