簡體   English   中英

將枚舉從內核模塊傳遞到UserSpace程序

[英]Passing enum from kernel module to UserSpace program

我必須跟蹤KeyState,我想使用以下枚舉,

typedef enum{
KeyOn,
KeyOff,
}State; 

我想將此傳遞給用戶空間程序。 我不確定應如何編寫copy_to_user()函數。 如何將按鍵狀態傳遞給用戶空間?

讓我們首先解決copy_to_user功能以及為什么需要它的問題?

現代計算機使用一種稱為虛擬內存的機制來工作。 這種機制允許兩個主要方面-不同進程之間的內存分離,以及比計算機上的物理內存更多的虛擬內存分配。

對於每個進程,都有一個不同的虛擬內存空間,並且不同的進程可能具有指向不同物理地址的相同虛擬地址。

內核將進程的虛擬地址空間映射到其物理地址。 但是,當您向內核傳遞指針時會發生什么?

傳遞給內核的指針是用戶空間中處理虛擬內存的虛擬地址。 內核需要將該地址轉換為相應的物理地址,以便用結果填充該地址。 為此創建了copy_to_user操作-它在內核地址空間中使用一個指針,並將其復制到用戶進程地址空間中的一個指針。

從以上所有內容中,您應該已經了解到您的問題是無效的-Enum值不是指針,因此無需對其調用copy_to_user ,您可以按原樣返回它。

我們需要討論的下一件事是什么是ENUM。 枚舉是許多現代語言提供的語法糖,用於將值定義為人類可讀的標識符。 枚舉鍵在過去的編譯中不存在,在函數之間傳遞的只是整數值。 它們就像#define一樣轉換為它們的值,命名的鍵不再重要。

從內核返回ENUM時,您唯一需要做的就是確保在用戶程序中#include正確的標頭,以便您可以轉換枚舉鍵在程序中正確表示的數字。 在運行時-傳遞的都是數字。

暫無
暫無

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

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