2015-06-08 21 views
4

Linux設備驅動程序第3版,/proc中,使用文件系統作爲輸出方法來導出某個設備驅動程序的運行狀態。如何在驅動程序模塊中使用seq_file實現可寫入proc文件

但是,在某些情況下,使用/proc文件系統作爲一個接口來更改驅動程序模塊的內部參數。

我搜索了很多,發現互聯網上的一些實現太舊,他們使用create_proc_entry()而不是proc_create()

更重要的是,我更喜歡通過seq_file來實現這個(實際上,我不確定是否有可能)。我檢查了seq_write()函數,並沒有得到任何東西。

任何人都可以告訴我一個例子來完成這個任務嗎? seq_file執行是更優選的。

回答

2

後我捆綁了很多。我發現其實沒有seq版本寫入功能。但是,您可以將/proc文件視爲正常設備文件,該文件可以通過file_operations中定義的方法操作。

3

seq_file僅爲閱讀文件提供助手。沒有類似的助手可供編寫,但手動執行.write可迭代數據回調並不困難:

與閱讀不同,您可以放棄.write回調中的文件位置處理,假設用戶始終寫入開始,或者可選地結束(使用O_APPEND文件的控制標誌)。第二,與閱讀不同,你可以假設用戶一次寫入1,2或更多元素的內容,但不是半元素。

最簡單的方法是允許單一的元素來寫:

size_t write(struct file* file, const char __user* buf, size_t size, loff_t* pos) 
{ 
    copy_from_user(str, buf, size); // Copy string from user space 
    my_elem = my_parse(str, size); // Parse string 
    if(file->f_flags & O_APPEND) { 
     list_add_tail(my_elem, &my_list);//Append element to the end of list 
    } 
    else { 
     clear_my_list(); // Clear old content of the list 
     list_add_tail(my_elem, &my_list);// Add single element to it. 
    } 

    (void)pos; //Do not use file position at all 
    return count; // Return number of bytes passed by the user 
} 

如果用戶想要寫一些元素,例如,從硬盤上的文件,任何外殼能夠通過,例如,這個文件拆分,新行,以及一行一行地將您的proc文件添加到Feed中。

相關問題