2013-05-02 87 views
2

在一些混亂中,我需要調用一個內核函數,它不會從內核空間調用,因爲它在參數中佔用了分配的用戶空間的緩衝區。如何在內核驅動程序中分配用戶空間緩衝區?

const char __user *buf 

但我需要調用,那麼如何分配用戶空間緩衝區並將其傳遞給函數參數。

如果可能的話,那麼我需要做到這一點,沒有任何用戶空間的互動。 真的有可能嗎?

我的目標是調用從誰接受參數const char __user *buf

+1

實際上你是否需要將緩衝區放在用戶空間中,還是隻想調用一個內核例程,該例程不向內核調用方提供接口。 – 2013-05-02 04:58:26

+0

我需要調用那個接受參數的內核例程「const char __user * buf」 – 2013-05-02 05:01:06

+0

如果你需要這樣做,你做錯了。 – gby 2013-05-02 05:09:54

回答

4

可能還有其他方法,具體取決於您實際嘗試調用的系統調用。

這是一個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 */ 
+0

是啊謝謝這工作對我來說... – 2013-05-02 05:53:49

+0

確定。我仍然希望你更新你的問題來描述你正在嘗試的系統調用。根據這些信息,可能有更好的方法來實現你想要的。 – Anthony 2013-05-02 06:01:31

4

AFAIK內核驅動程序內核程序,通常的方式做到這一點是打破內核例程有兩種 - 外部例程與系統調用力學交易,手柄copyin()/ coyout()等,然後調用實際工作的內部例程。

當然,如果您需要將代碼自包含在模塊中,並且不控制與其一起使用的內核的其餘部分,那麼這將不起作用。

並回答你的具體問題 - 我不知道是否有任何這樣的API,但我相當懷疑它。

相關問題