- 論壇徽章:
- 0
|
10可用積分
我寫了一個module,掛載了一個字符設(shè)備驅(qū)動,使用write系統(tǒng)調(diào)用向內(nèi)核模塊傳遞數(shù)據(jù)。
現(xiàn)在使用cat讀取例如/dev/dev_spring0,把內(nèi)核模塊參數(shù)讀出來,但是讀不到任何內(nèi)容,而在內(nèi)核模塊中注冊的read函數(shù)卻顯示count等于4096,說明cat起作用了。
這是內(nèi)核模塊注冊的函數(shù),應(yīng)該是被調(diào)用過的。
static ssize_t dummy_read(struct file *filp, char *bp, size_t count, loff_t *ppos)
{
const char* msg = "hello,world\n";
memcpy((void*)bp,(const void*)msg, strlen(msg));
}
我記得cat讀取proc文件系統(tǒng)是沒有問題的。
現(xiàn)在的問題是cat讀取字符設(shè)備,為什么顯示不出內(nèi)容?
另外寫了個C程序打開/dev/dev_spring,打開讀取成功。
怎么樣可以使用cat也能成功讀取顯示內(nèi)容?
請大俠幫幫忙
[ 本帖最后由 springtty 于 2009-4-17 12:18 編輯 ] |
最佳答案
查看完整內(nèi)容
cat為了保證文件被讀完,不會像你的例子程序那樣只read一次,而是循環(huán)read,直到EOF(read返回0)。但是你的內(nèi)核模塊并沒有處理EOF,所以不知道這個時候cat干什么去了。你用strace看看cat都在干些什么吧……(strace cat /dev/???)或許你需要在dummy_read中把對于EOF的處理添加進去吧。read的ppos表示本次讀操作的起始位置。copy_to_user之前判斷一下*ppos是否超過了文件長度(strlen(msg)),超過則返回0。然后copy_to_user之后 ...
|