[問題] 如何利用copy_to_user來完成kernel和user space的資料傳輸

看板LinuxDev作者 (1個羅)時間16年前 (2009/09/29 09:55), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
我在 linux 的檔案系統 /dev/ 下新增一個節點(character device) 並且打算利用這個節點讓 user application 和 driver 進行資料的交換 假設 user application 利用 system call "read" 來讀取 driver 的資料 而我需要在 driver 之中, implement 相對應的 read function(假設它叫 dev_read) function prototype 如下: static ssize_t dev_read(struct file *filp, char *buff, size_t count, loff_t *f_pos) 假設我在 dev_read function 中有一個 structure 結構如下: sturct A{ int flag; char loop[10]; void *data; } 其中 sturcture A 中的 data element,它是指標,並指向 struct B sturct B{ int pollingmode; void *event; } sturcture B 中的 event element,它也是指標,並指向 struct C struct C{ char hook; char ring_start; char ring_end; } 我的問題:假設我的資料存放在 hook、ring_start、ring_end、pollingmode 中,但我需要把整個 structure A 傳給 user application。由於 linux 的記憶體管理是有分 user space 和 kernel space 的,因此似乎需要利用 copy_to_user() 這個 API 來完成。但如何利用這個 API,讓這個層層 structure 的資料都能正確的被傳出去?: :q w ^X -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.86.34

09/29 13:02, , 1F
你可以參考你目前kernel的drivers/char/mem.c
09/29 13:02, 1F
文章代碼(AID): #1AmMa3qh (LinuxDev)
文章代碼(AID): #1AmMa3qh (LinuxDev)