2012-03-06 14 views
3

我正在linux寫驅動程序。我如何使用ioctl進行用戶程序和驅動程序之間的通信? 在我的司機,其結構如下:如何使用ioctl進行用戶程序和驅動程序之間的通信?

struct file_operations fops = {.read = device_read,.write = device_write,.unlocked_ioctl = device_ioctl,.open = device_open,.release=device_release }; 

在我的理解,這裏的device_ioctl是處理來自用戶程序的ioctl調用的函數。並且可以使用可變數量的參數進行呼叫。

但我不確定使用ioctl的方式。也完全困惑和急於知道,我可以如何寫device_ioctl?

任何人都可以幫助我嗎?

在此先感謝。

+2

首先,你應該學會如何'ioctl'從用戶空間中使用,然後檢查類似驅動程序如何實現它,那麼圖你的司機需要什麼。 – 2012-03-06 13:22:59

+0

你能否提供一些參考? – tijin 2012-03-07 03:58:53

回答

1
  1. 使用register_chrdev獲取內核文件的主要編號。以fops作爲參數。
  2. 您將得到一個返回的主號碼(您也可以在/proc/devices中找到它)使用此號碼與mknod命令創建/dev/yourdevice
  3. 在您的用戶空間代碼中,打開/dev/yourdevice並使用ioctl函數和文件描述符。
2

我相信LDD3第6.1章可以用很好的例子來回答你的問題。

0

您可以使用任何proc文件的設備,而不是在這樣的方式:

static long my_proc_ioctl(struct file * file, unsigned int cmd, unsigned long arg) 
{ 
    printk("%s() cmd=%.08x arg=%pK\n", __func__, cmd, (void *)arg); 
    return 0; 
} 

static const struct file_operations my_ioctl_fops = { 
    .owner = THIS_MODULE, 
    .unlocked_ioctl = my_proc_ioctl, 
}; 

[...] 
proc_create("my_ioctl_file", 0600, NULL, &my_ioctl_fops); 
[...] 
相關問題