簡體   English   中英

實現文件描述符

[英]Implementing a file descriptor

我將如何實現自己的文件描述符? 假設我有一個控制某些硬件的內核模塊,並且想通過read()和write()將與該硬件進行通信的功能公開給用戶空間。 不想使用IOCTL或netlink或其他userspace-kernelspace方法。 我需要重新編譯內核還是僅通過編寫內核模塊就可以完成編譯。

我知道,創建文件描述符將需要一種用於用戶空間的機制,以告訴內核空間在任務的文件結構中創建條目(即,等效於open(),eventfd(),timerfd(),socket()的函數)。 我可以通過IOCTL來實現(這樣就不必重新編譯內核),但是我該如何侵入read()和write()-我之前使用LD_PRELOAD對其進行了修補,這是唯一的方法嗎? 不想重新編譯內核!

我不確定我是否理解您的所有問題。 但是:

  • 您絕對可以將其作為內核模塊;
  • 您可能想創建一個字符設備(問題的第二部分);
  • 對於char設備,您可以實現所需的系統調用; 如果你只想已readwrite -沒問題;

看這本書的第三章(和其他章節)。

konrad.kruczynski是對的!

使用字符設備作為與硬件進行通信的用戶空間機制,並在/ dev文件系統(例如/ dev / hardware_type_A)中創建設備。

然后在內核中編譯&&加載模塊,然后,如果所有代碼都正確,則內核將在/ dev /中創建一個名稱為/ dev / hardware_type_A的字符設備。

那么您就可以像使用其他設備或文件來控制硬件一樣,使用讀,寫,打開,關閉呼叫。

如果您確實想不想通過ioctl對其進行控制,那么您必須需要一個新協議,該協議使用write發送數據,並且驅動程序會解壓縮該數據並代表用戶中的程序控制硬件。

暫無
暫無

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

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