国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Linux內核里的DebugFS

系統 Linux
DebugFS,顧名思義,是一種用于內核調試的虛擬文件系統,內核開發者通過debugfs和用戶空間交換數據。類似的虛擬文件系統還有procfs和sysfs等,這幾種虛擬文件系統都并不實際存儲在硬盤上,而是Linux內核運行起來后才建立起來。

DebugFS,顧名思義,是一種用于內核調試的虛擬文件系統,內核開發者通過debugfs和用戶空間交換數據。類似的虛擬文件系統還有procfs和sysfs等,這幾種虛擬文件系統都并不實際存儲在硬盤上,而是Linux內核運行起來后才建立起來。

通常情況下,最常用的內核調試手段是printk。但printk并不是所有情況都好用,比如打印的數據可能過多,我們真正關心的數據在大量的輸出里不是那么一目了然;或者我們在調試時可能需要修改某些內核變量,這種情況下printk就無能為力,而如果為了修改某個值重新編譯內核或者驅動又過于低效,此時就需要一個臨時的文件系統可以把我們需要關心的數據映射到用戶空間。在過去,procfs可以實現這個目的,到了2.6時代,新引入的sysfs也同樣可以實現,但不論是procfs或是sysfs,用它們來實現某些debug的需求,似乎偏離了它們創建的本意。比如procfs,其目的是反映進程的狀態信息;而sysfs主要用于Linux設備模型。不論是procfs或是sysfs的接口應該保持相對穩定,因為用戶態程序很可能會依賴它們。當然,如果我們只是臨時借用procfs或者sysfs來作debug之用,在代碼發布之前將相關調試代碼刪除也無不可。但如果相關的調試借口要在相當長的一段時間內存在于內核之中,就不太適合放在procfs和sysfs里了。故此,debugfs應運而生。

默認情況下,debugfs會被掛載在目錄/sys/kernel/debug之下,如果您的發行版里沒有自動掛載,可以用如下命令手動完成:

  1. # mount -t debugfs none /your/debugfs/dir 

Linux內核為debugfs提供了非常簡潔的API,本文接下來將以一個實作為例來介紹,sample code可以從這里下載。

這個實作會在debugfs中建立如下的目錄結構: 

 

 

在debugfs中建立的目錄結構 

其中,a對應模塊中的一個u8類型的變量,b和subdir下面的c都是對應模塊里的一個字符數組,只是它們的實現方式不同。

在module_init里,我們首先要建立根目錄mydebug:

  1. my_debugfs_root = debugfs_create_dir("mydebug"NULL); 

***個參數是目錄的名稱,第二個參數用來指定這個目錄的上級目錄,如果是NULL,則表示是放在debugfs的根目錄里。

子目錄也是用debugfs_create_dir來實現:

  1. sub_dir = debugfs_create_dir("subdir", my_debugfs_root); 

建立文件a的代碼非常簡單:

  1. debugfs_create_u8("a", 0644, my_debugfs_root, &a); 

這表示文件名為“a”,文件屬性是0644,父目錄是上面建立的“mydebug”,對應的變量是模塊中的a。

Linux內核還提供了其他一些創建debugfs文件的API,請參考本文的附錄。

b是一個32-bytes的字符數組,在debugfs里,數組可以用blob wrapper來實現。

  1. char hello[32] = "Hello world!\n"
  2. struct debugfs_blob_wrapper b; 
  3.   
  4. b.data = (void *)hello; 
  5. b.size = strlen(hello) + 1; 
  6. debugfs_create_blob("b", 0644, my_debugfs_root, &b);  

這里需要注意的是,blob wrapper定義的數據只能是只讀的。在本例中,雖然我們把文件b的權限設定為0644,但實際這個文件還是只讀的,如果試圖改寫這個文件,系統將提示出錯。

如果需要對內核數組進行寫的動作,blob wrapper就無法滿足要求,我們只能通過自己定義文件操作來實現。在這個實作里,可以參考文件c的實現。c和b在模塊里對應著同一塊字符數組,不同的是,b是只讀的,而c通過自定義的文件操作同時實現了讀和寫。

  1. static int c_open(struct inode *inode, struct file *filp) 
  2.     filp->private_data = inode->i_private; 
  3.     return 0; 
  4.   
  5. static ssize_t c_read(struct file *filp, char __user *buffer, 
  6.         size_t count, loff_t *ppos) 
  7.     if (*ppos >= 32) 
  8.         return 0; 
  9.     if (*ppos + count > 32) 
  10.         count = 32 - *ppos; 
  11.   
  12.     if (copy_to_user(buffer, hello + *ppos, count)) 
  13.         return -EFAULT; 
  14.   
  15.     *ppos += count
  16.   
  17.     return count
  18.   
  19. static ssize_t c_write(struct file *filp, const char __user *buffer, 
  20.         size_t count, loff_t *ppos) 
  21.     if (*ppos >= 32) 
  22.         return 0; 
  23.     if (*ppos + count > 32) 
  24.         count = 32 - *ppos; 
  25.   
  26.     if (copy_from_user(hello + *ppos, buffer, count)) 
  27.         return -EFAULT; 
  28.   
  29.     *ppos += count
  30.   
  31.     return count
  32.   
  33. struct file_operations c_fops = { 
  34.     .owner = THIS_MODULE, 
  35.     .open = c_open, 
  36.     .read = c_read, 
  37.     .write = c_write, 
  38. }; 
  39.   
  40.   
  41. debugfs_create_file("c", 0644, sub_dir, NULL, &c_fops);  

注:代碼里,c_open其實并沒有任何用處,因為c_read和c_write直接引用了全局變量hello。這里,我們也可以換一種寫法,在read/write函數里用filp->private_data來引用字符數組hello。

到這里,三個文件和子目錄已經創建完畢。在module_exit中,我們要記得釋放創建的數據。

  1. debugfs_remove_recursive(my_debugfs_root); 

debugfs_remove_recursive可以幫我們逐步移除每個分配  

責任編輯:龐桂玉 來源: 嵌入式Linux中文站
相關推薦

2015-07-27 11:34:03

Linux內核指針

2016-08-24 20:09:27

Linux數據結構位數組

2020-11-11 14:48:41

Linux內核代碼

2013-11-06 13:03:10

Linux內核

2013-11-05 09:58:39

Linux內核

2013-11-12 11:01:46

Linux內核

2013-11-07 13:59:56

Linux內核

2013-11-25 14:07:11

Linux內核內核特性

2021-02-20 06:08:07

LinuxWindows內核

2011-01-11 13:45:06

2013-05-13 09:52:52

Windows內核Linux內核

2010-03-02 09:17:32

Linux local

2013-11-05 09:55:37

2022-02-15 14:53:38

Linux內核API

2011-02-28 10:31:02

Linux 2.6內核

2009-10-29 09:41:01

Linux內核DeviceMappe

2013-10-31 14:09:14

Linux內核

2009-10-16 09:45:41

Linux內核操作系統

2009-12-11 15:10:22

2011-02-17 10:14:44

LinuxCPU負載
點贊
收藏

51CTO技術棧公眾號

九九综合在线| 好看的中文字幕在线播放| 欧美黄污视频| 秋霞av国产精品一区| 欧美极品videos大乳护士| 91福利在线免费观看| av线上观看| 亚洲国产成人私人影院tom| 成人毛片100部免费看| 久久午夜av| 精品乱色一区二区中文字幕| 欧美丝袜激情| 国产成人亚洲综合| 亚州综合一区| 韩国日本不卡在线| 免费看日产一区二区三区| 国产一区二区动漫| 毛片网站在线看| 欧美成人在线直播| 色资源网站在线观看| 亚洲一二三四在线| 超碰在线电影| 精品日韩中文字幕| 在线免费观看色| 精品毛片网大全| 欧美日韩在线精品一区二区三区激情综| 亚洲一区二区三区四区在线观看| 白浆爆出在线观看| 亚洲一区二区精品久久av| 在线手机福利影院| 天天色天天爱天天射综合| 免费观看又污又黄在线观看国产| 亚洲国产日韩一级| 清纯唯美亚洲色图| 欧美一级搡bbbb搡bbbb| 春色校园综合激情亚洲| 国产一区二区三区丝袜 | 欧美乱大交xxxxx另类电影| 欧美亚洲二区| 97色在线视频观看| 永久亚洲成a人片777777| 亚洲综合一区二区不卡| 麻豆成人在线| 中国丰满熟妇xxxx性| 久久久久久久综合色一本| 美女喷白浆视频| 精品日韩美女的视频高清| 国产美女在线观看| 色噜噜狠狠狠综合曰曰曰88av | 中文字幕亚洲欧美日韩2019| 国产伦精品一区二区三区在线播放| 成人精品视频99在线观看免费| 午夜一级久久| 免费 成 人 黄 色| 尤物视频一区二区| 午夜视频在线观看网站| 亚洲老司机av| 久久不见久久见中文字幕免费| 国产高清精品一区| www.亚洲色图| 天堂中文在线资| 亚洲香蕉伊综合在人在线视看| blacked蜜桃精品一区| 伊人久久婷婷色综合98网| 一区视频在线播放| av大大超碰在线| 久久久久成人网| 影音先锋久久| 97公开免费视频| 欧美三级一区二区| 精品久久在线| 精品国产乱码久久久久久丨区2区| 国产成人在线电影| 国产精品一级伦理| 欧美激情国产精品| 麻豆精品久久久| 国产导航在线| 久久激情视频免费观看| 亚洲精品123区| 久久黄色免费看| 精品国产一区久久| 成人在线国产| 国产精品免费入口| 日韩视频在线你懂得| 亚洲aaa级| 欧美大片在线播放| 欧美一级理论性理论a| 青青草原综合久久大伊人精品| 2022中文字幕| 91麻豆精品国产自产在线| 无码日韩精品一区二区免费| www.男人天堂网| 欧美日韩小视频| 国际精品欧美精品| 凹凸日日摸日日碰夜夜爽1| 亚洲电影中文字幕| 伊人久久大香线蕉综合热线| 国产福利电影| 欧美成人小视频| 开心九九激情九九欧美日韩精美视频电影 | 第一福利永久视频精品| 国产精品一区二区三区www| 日本成人三级电影网站| 日韩欧美一区二区三区久久| 国产香蕉精品| 少妇人妻在线视频| 亚洲国产精彩中文乱码av在线播放 | 91精品免费在线观看| 欧美日韩精品在线一区| 在线观看免费成人av| 国产亚洲日本欧美韩国| 日韩二区三区四区| 麻豆网站在线观看| 国产精品视频免费一区| 色一区在线观看| 黑人操亚洲人| free性亚洲| 午夜精品一区二区三区av| 不卡的av中国片| 九九热线视频只有这里最精品| 色一情一乱一伦一区二区三区丨 | 国产欧美大片| 国产福利在线视频| 3d动漫啪啪精品一区二区免费 | 欧美黄色大片网站| 在线资源av| 国产免费亚洲高清| 亚洲综合丁香婷婷六月香| 久久久伦理片| 免费h片在线观看| 国产精品91久久久| 一区二区三区日本| av影片在线一区| 在线午夜视频| 国产综合久久久久久久久久久久| 精品少妇3p| www.欧美黄色| 日韩成人在线播放| 麻豆精品视频在线| 24小时免费看片在线观看| 日日夜夜精品网站| 欧美精品一区二区不卡| 美女视频第一区二区三区免费观看网站| 菠萝菠萝蜜在线观看| 美女被啪啪一区二区| 日韩一二三区不卡| 美女任你摸久久| 国产高清不卡| 黄色一级片在线看| 久久综合伊人77777蜜臀| 久久久久久久久久久久久夜| 91成人福利| 91大神网址| 国产区亚洲区欧美区| 香蕉乱码成人久久天堂爱免费| 亚洲午夜精品17c| 9l亚洲国产成人精品一区二三 | 精品久久国产| 亚洲成人男人天堂| 韩日午夜在线资源一区二区| 精品电影一区二区| www亚洲一区| 日本电影一区二区| sm国产在线调教视频| 国产夫妻自拍一区| 欧美做受高潮1| 91电影在线观看| 国内成+人亚洲+欧美+综合在线| 高清一区二区中文字幕| 91在线九色porny| 青青草久久网络| 久久国产精品久久久| 一区二区三区四区在线| 国产视频欧美| 久久精品一级| 久草在现在线| 国产高清www| 国产91在线播放精品91| 欧美一区二区三区喷汁尤物| 国产91精品久久久久久久网曝门 | 久久成人综合视频| 精品欧美一区二区三区| 奇米在线7777在线精品| 看全色黄大色大片免费久久久| 国产视频精选在线| 黄色一级视频在线播放| 91最新在线免费观看| 亚洲欧美激情一区| 亚洲一区自拍偷拍| 久久精品国产亚洲aⅴ| 久久久久97| 嗯~啊~轻一点视频日本在线观看| 在线观看国产一级片| 美国av一区二区三区| 2019中文字幕在线观看| 亚洲成人免费在线视频| 亚洲国产精品久久一线不卡| 韩国一区二区在线观看| 精品国产乱码久久久久久蜜坠欲下 | 超在线视频97|