在一些混亂中,我需要調用一個內核函數,它不會從內核空間調用,因爲它在參數中佔用了分配的用戶空間的緩衝區。如何在內核驅動程序中分配用戶空間緩衝區?
const char __user *buf
但我需要調用,那麼如何分配用戶空間緩衝區並將其傳遞給函數參數。
如果可能的話,那麼我需要做到這一點,沒有任何用戶空間的互動。 真的有可能嗎?
我的目標是調用從誰接受參數const char __user *buf
在一些混亂中,我需要調用一個內核函數,它不會從內核空間調用,因爲它在參數中佔用了分配的用戶空間的緩衝區。如何在內核驅動程序中分配用戶空間緩衝區?
const char __user *buf
但我需要調用,那麼如何分配用戶空間緩衝區並將其傳遞給函數參數。
如果可能的話,那麼我需要做到這一點,沒有任何用戶空間的互動。 真的有可能嗎?
我的目標是調用從誰接受參數const char __user *buf
可能還有其他方法,具體取決於您實際嘗試調用的系統調用。
這是一個article,它解釋了一些關於系統調用機制的內容。有一節介紹如何從內核空間調用系統調用,使用內核內存並避免驗證。
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 */
是啊謝謝這工作對我來說... – 2013-05-02 05:53:49
確定。我仍然希望你更新你的問題來描述你正在嘗試的系統調用。根據這些信息,可能有更好的方法來實現你想要的。 – Anthony 2013-05-02 06:01:31
AFAIK內核驅動程序內核程序,通常的方式做到這一點是打破內核例程有兩種 - 外部例程與系統調用力學交易,手柄copyin()/ coyout()等,然後調用實際工作的內部例程。
當然,如果您需要將代碼自包含在模塊中,並且不控制與其一起使用的內核的其餘部分,那麼這將不起作用。
並回答你的具體問題 - 我不知道是否有任何這樣的API,但我相當懷疑它。
實際上你是否需要將緩衝區放在用戶空間中,還是隻想調用一個內核例程,該例程不向內核調用方提供接口。 – 2013-05-02 04:58:26
我需要調用那個接受參數的內核例程「const char __user * buf」 – 2013-05-02 05:01:06
如果你需要這樣做,你做錯了。 – gby 2013-05-02 05:09:54