是否可以從Linux內核模塊調用ioctl
? 任何人都可以提供它如何使用的例子嗎?如何在Linux的內核空間使用ioctl()?
回答
您可以嘗試撥打sys_ioctl
。
如果內核編譯爲CONFIG_COMPAT
,則導出它。
或者,如果您有設備驅動程序的struct file_operations
,可以直接調用它的ioctl
處理程序。
但是,ioctl句柄會期望指針參數位於當前正在運行的進程的地址空間中,而不是在內核地址空間中。將使用copy_from_user
來閱讀它們。如果您指出內核地址空間,則copy_from_user
將失敗。我不明白你會如何解決這個問題。
編輯:
如果將調用下面的代碼之間的ioctl處理程序比copy_from_user
永遠不會失敗。
mm_segment_t fs;
fs = get_fs(); /* save previous value */
set_fs (get_ds()); /* use kernel limit */
/* system calls can be invoked */
set_fs(fs); /* restore before returning to user space */
file_operations中的ioctl處理程序已被棄用。你能想出更新的方式來使用ioctl嗎? – iammurtaza
您能否詳細說明get_fs()和set_fs()如何神奇地允許內核空間執行系統調用,以及在此「copy_from_user()」之後如何不再產生問題? –
'set_fs'影響驗證傳遞給'copy_to_user'的地址確實在當前用戶的地址空間中的機制。它使內核認爲當前地址空間是內核地址空間。 – ugoren
- 1. Linux ioctl命令在用戶空間和內核空間之間變化
- 2. 來自內核空間的IOCTL
- 3. 從內核空間執行ioctl
- 4. Linux內核空間和用戶空間
- 5. Linux內核模塊/ IOCTL:不適用於設備的ioctl
- 6. Linux內核:從內核空間調用用戶空間的回調函數
- 7. linux內核和用戶地址空間
- 8. 在Linux內核空間執行程序
- 9. 如何從Linux內核訪問用戶空間內存?
- 10. 在Linux中,用戶空間如何不能訪問內核空間?
- 11. 如何在Linux內核空間打印用戶空間堆棧跟蹤
- 12. 在linux內核(內核空間)中檢索會話Id
- 13. 如何使用指針訪問Linux內核空間中的內存頁面
- 14. linux內核的內核地址空間的佈局是什麼?
- 15. 如何在Linux內核中使用RSA
- 16. 如何在Linux內核中使用tpm
- 17. 如何在linux內核中使用scanf?
- 18. 如何從Linux內核空間獲取用戶名
- 19. 如何將Linux內核緩衝區映射到用戶空間?
- 20. 如何在Linux內核空間讀取環形緩衝區?
- 21. Linux用戶空間和內核空間調度
- 22. 我如何使內核模式下的IOCTL調用(windows)
- 23. 如何使用ioctl()來操作我的內核模塊?
- 24. 從內核空間關閉(嵌入)linux
- 25. Linux內核代碼空間寫保護
- 26. 使用Linux的ioctl與單
- 27. Linux內核 - 從用戶空間停止正在運行的內核定時器
- 28. 使用qemu for i386 linux內核的地址空間標識符
- 29. 什麼數據結構使用128MB的1GB Linux內核空間?
- 30. 入門上的ioctl ENOTTY針對Linux內核模塊
你真的不應該這樣做。如果你做了一個搜索,你會發現一些實現相關的代碼,用於如何在內核空間內完成一個任意的系統調用,但是請考慮是否有辦法實現真正的目標而不會像這樣打破模型。 –