[英]Implementing a file descriptor
我將如何實現自己的文件描述符? 假設我有一個控制某些硬件的內核模塊,並且想通過read()和write()將與該硬件進行通信的功能公開給用戶空間。 不想使用IOCTL或netlink或其他userspace-kernelspace方法。 我需要重新編譯內核還是僅通過編寫內核模塊就可以完成編譯。
我知道,創建文件描述符將需要一種用於用戶空間的機制,以告訴內核空間在任務的文件結構中創建條目(即,等效於open(),eventfd(),timerfd(),socket()的函數)。 我可以通過IOCTL來實現(這樣就不必重新編譯內核),但是我該如何侵入read()和write()-我之前使用LD_PRELOAD對其進行了修補,這是唯一的方法嗎? 不想重新編譯內核!
我不確定我是否理解您的所有問題。 但是:
read
和write
-沒問題; 看這本書的第三章(和其他章節)。
konrad.kruczynski是對的!
使用字符設備作為與硬件進行通信的用戶空間機制,並在/ dev文件系統(例如/ dev / hardware_type_A)中創建設備。
然后在內核中編譯&&加載模塊,然后,如果所有代碼都正確,則內核將在/ dev /中創建一個名稱為/ dev / hardware_type_A的字符設備。
那么您就可以像使用其他設備或文件來控制硬件一樣,使用讀,寫,打開,關閉呼叫。
如果您確實想不想通過ioctl對其進行控制,那么您必須需要一個新協議,該協議使用write發送數據,並且驅動程序會解壓縮該數據並代表用戶中的程序控制硬件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.