❶ linux用户空间应用程序常用函数fread与内核驱动中函数read如何关联
fread是C库函数,它会调用到系统调用read,
系统调用read会进入内核的sys_read(好像是这个名称),
它根据传入的文件描述符,找到一个文件描述结构,
这个文件描述结构中包含了包括open, close, read, write在内的一系列的函数指针
然后,它就根据函数指针,调用到真正的read函数
这个文件描述结构以及它的open,close,read,write等函数,一般都是驱动程序中提供的
详细过程看看代码吧
❷ Linux应用程序如何调用驱动程序
一般的驱动程序是不允许应用程序调用的,只有当驱动程序留出这种供外界访问的接口才行,这种接口一般包括read,write,open,ioctl等接口,如果驱动中预留出了这些接口,就可以在应用程序中调用,比如fd=open(设备,参数);或者fd=ioctl(设备,参数);,这样就会调用到这个设备驱动中的open或者ioctl函数。所以一般如果想再应用程序中调试某个驱动程序,常见的方法就是自己建立一个驱动模块,这个模块中预留出对外接口,比如ioctl。然后在你新建的这个驱动模块中完成ioctl函数,如下:
int device_ioctl(fd,argv) {
/* your function; */
}
static struct file_operations device = {
.ioctl = device_ioctl //预留外部接口
};
应用程序如下:
ioctl(device,argv);
上面这句就可以完成你的模块中ioctl中的功能。