2012-03-01 60 views
2

示例驅動程序創建並加載成功,因爲用戶定義的函數被寫入,它執行一些操作。我需要編寫一個用戶程序來調用驅動模塊中的用戶定義函數。如何從用戶程序調用寫在內核模塊中的函數?

在以下情況下需要幫助。

  1. 如何從用戶程序訪問驅動程序代碼?
  2. 如何從用戶程序調用寫在內核模塊中的函數?

謝謝。

+0

1.你不能2.什麼? – UmNyobe 2012-03-01 12:02:27

回答

7

您可以讓您的驅動程序對寫入操作(或必要時,ioctl)作出響應以將其寫入/ dev/xxx文件或/ proc/xxx文件。此外,你可以創建一個新的系統調用,但這更像是一個玩具,因爲該模塊只能在定製的內核上工作。

編輯:嘗試http://www.faqs.org/docs/kernel/x571.html(上字符設備驅動程序)。

+0

感謝您的幫助。你可以請給一些參考。 – tijin 2012-03-01 12:07:32

+0

請檢查此參考。 https://github.com/sachinites/RIBDriver 它使用設備文件實現了內核通信的用戶空間。 – 2017-07-11 19:36:40

3

這取決於你的函數做什麼,但一般:

  • 如果你想顯示性質以值的形式(例如背光的當前亮度),標準的做法是使用sysfs:http://kernel.org/doc/Documentation/filesystems/sysfs.txt

  • 如果您想寫入/讀取設備(真實或虛擬)的值,請將設備的內存或IO區域導出到用戶空間,或更一般地控制設備(例如,設置相機的分辨率和捕獲幀),您可以使用具有讀/寫/ mmap和ioctl功能的字符或塊設備:http://luv.asn.au/overheads/chrdev-talk.html

  • 最後,如果您的函數只是從內核控制某些內容,那麼sysfs或procfs應該是要走的路。我不知道爲什麼現在人們仍然在使用procfs,除了misc設備可能。

所以在一般情況下,你需要通過文件導出你的內核功能到用戶空間,通過定義鉤子文件打開時將被調用,讀取,寫入(將數據從/用戶複製空間),mmap化(共享內存區域而不復制)或者調用ioctl(執行更一般的控制)。

0

爲Qn.1: 讀/寫/ IOCTL看到的file_operations 爲Qn.2: 1)系統調用 2)驅動程序 - ioctl

相關問題