簡體   English   中英

如何從用戶程序中調用內核模塊中編寫的函數?

[英]How can i call a function that written in kernel module, from the user program?

示例驅動程序已成功創建和加載,因為編寫了用戶定義的函數,它會執行一些操作。 我需要編寫一個用戶程序來調用驅動程序模塊中的用戶定義函數。

在以下情況下需要幫助。

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

謝謝。

您可以讓驅動程序對寫入(或必要時,ioctl)對/ dev / xxx文件或/ proc / xxx文件做出反應。 此外,您可以創建一個新的系統調用,但這更像是一個玩具,因為該模塊只適用於自定義構建的內核。

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

這取決於你的功能,但總的來說:

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

  • 如果要從設備(實際或虛擬)寫入/讀取值,將設備的內存或IO區域導出到用戶空間,或者更一般地控制設備(例如,設置攝像機的分辨率和捕獲幀),您將使用具有read / write / mmap和ioctl函數的字符或塊設備: http//luv.asn.au/overheads/chrdev-talk.html

  • 最后,如果你的函數只是控制來自內核的東西,那么sysfs或procfs應該是最佳選擇。 我不知道為什么人們現在仍在使用procfs,除了misc設備可能。

因此,通常,您需要通過文件將內核函數導出到用戶空間,方法是定義在打開,讀取,寫入文件(從/向用戶空間復制數據)時調用的掛鈎,mmap'ed(共享)沒有復制的內存區域)或調用ioctl時(執行更一般的控制)。

對於Qn.1:讀/寫/ ioctl請參閱Qn.2的file_operations:1)系統調用2)driver - ioctl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM