❶ 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中的功能。