PROC文件系统驱动开发应用

上传人:cn****1 文档编号:489680564 上传时间:2023-08-27 格式:DOC 页数:16 大小:180KB
返回 下载 相关 举报
PROC文件系统驱动开发应用_第1页
第1页 / 共16页
PROC文件系统驱动开发应用_第2页
第2页 / 共16页
PROC文件系统驱动开发应用_第3页
第3页 / 共16页
PROC文件系统驱动开发应用_第4页
第4页 / 共16页
PROC文件系统驱动开发应用_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《PROC文件系统驱动开发应用》由会员分享,可在线阅读,更多相关《PROC文件系统驱动开发应用(16页珍藏版)》请在金锄头文库上搜索。

1、於掏杭州爱威芯科技有限公司PROC的存在与使用PROC文件系统使用通过proc来动态调试内核PROC简介 /proc文件系统是一个虚拟文件系统,通过 它可以使用一种新的方法在内核空间和用 户空间之间进行通信。在/proc文件系统中, 我们可以将对虚拟文件的读写作为与内核 中实体进行通信的一种手段,但是与普通 文件不同的是,这些虚拟文件的内容都是 动态创建的,或者说动态生成的。Hangzhou Avilsi Technology CO.Ltd於掏杭州爱威芯科技有限公司PROC的存在与使用存在:Proc文件系统在内核编译时需要选中,选中后存在于 /proc下面,其中包含很多的设备项。使用:Proc

2、是一个虚拟文件系统,它并不存在于一个具体的存储 器中,甚至于内存都不算,只不过在文件的读接口中将相 应的变量提取出来,当然我们可以像操作普通文件一样操 作,对于应用来说,看来就象一个文件一样。用户操作PROC文件的方法程序实现:可以在代码中使用file接口来进行读写相应的项。使用linux shell命令:Cat命令可以读文件,echo命令可以写文件。我们可以通过这两个来读写我 们的procfs,达到与内核通讯的冃的,从而动态修改内核参数。 Cat的使用:cat /proc/vsdevOO/host读取相应的文件。 namevalueminmaxmode h264cfg1008r/w debu

3、gjevel204r/w Echo的使用:echo “debugevel:3 /proc/vsdevOO/host 说明:将debugjeve啲值修改成3Hangzhou Avilsi Technology CO.Ltd於掏杭州爱威芯科技有限公司PROC的存在与使用创建与销毁目录:创建目录:sprintf(tmp, ”vsdev%02d”,0);vs_proc_root0 = proc_mkdir(tmp, NULL); /*create proc dir for dev 0*/销毁目录:if(vs_proc_rootslot) /*if device in this slot had bee

4、n create a proc dir*/ sprintf(tmp, Hvsdev%02dn, slot);remove_proc_entry(tmp, NULL); /*remove proc dir for dev 0*/ vsjDroc_rootslot = NULL;return;创建与销毁文件:创建文件: if(vs_proc_hostslot != 0) /*if host in this slot had not been create*/ vs_proc_hostslot-mode = SJFREG|S_IRUSR|S_IWUSR;/0444; vs_proc_hostslot

5、-size = 0;vs_proc_hostslot-read_proc = vs_proc_read; /*read func for all vs proc file*/ vs_proc_hostslot-write_proc = vs_proc_write; /*write func for all vs proc file*/ vs_proc_hostslot-data = &host_proc_list; /*host_proc_list is special for a file*/ 借毁文件:if(vs_proc_hostslot)/*if host in this slot h

6、ad been create*/remove_proc_entry(“host: vs_proc_rootslot); /*remove proc file for dev slot*/ vs_proc_hostslot = NULL;return;Hangzhou Avilsi Technology CO.Ltd於掏杭州爱威芯科技有限公司VS设备中PROC的使用(一)关键结构体:typedef struct vs_proc_info厂This must in the first address , because I will use it to show the vs_proc_info

7、address*/ struct list_head procjist;charF ame;void*pvalue;intnMin;intnMax;#define PROC #define PROC #define PROC #define PROC #define PROCVALUE VALUE VALUE VALUE VALUEREAD WRITE TYPE_NUM TYPE_STR TYPE(0x00000000)(0x00000001)(0x00000000)(0x00000010)(OxOOOOOOfO)/*bit 0 means readable, bit1 means wirta

8、ble, bit58 means string or number:value 0 means number, value 1 means string*/intattr;VS_PROCJNFO, *pVS_PROCNFO;VS设备中PROC的使用(二)说明:此结构体用于存储proc变量,每个PROC文件体提供一个根链表,而 /proc/vsdevOO/host文件对应的根链表是host_proc_list,每个proc变量有一个 procjist变量,此变量用于将与根链表连接,从而实现变量的链接。这里需要注意,VS_PROC_INFO中procjist这个元素必须放置在结构体的 第一个位置,

9、因为这个决定Tprocjist和屁_PROC_INFO元素之间的转换方 式,即PROC_TO_LIST与LIST_T6_PROC弦两个宏,由于procjist元素放 置于结构体的音所以procJistiJ地址也就是vs_proc_info的地址,这样 我们可以很方便的转换,我们可衣看如下: #define PROC_TO_LIST(a) (struct list_head *)a) #define LIST_TO_PROC(a) (struct VS_PROC_INFO *)a)所以,如果我们不将procjist保持在结构体的首地址,则会产生错误。Hangzhou Avilsi Technol

10、ogy CO.Ltd於掏杭州爱威芯科技有限公司臟織瀏歸鵲觀號盼的代码表示了每个模块艇些VS_PROC_INFO *pvs_proc_host_dbglvl, *pvs_proc_host_h264config;struct list_head *plist_dbglvl, *plist_h264config; /*plist_h264config should move to h264*/pvs_proc_host_dbglvl = kmalloc(sizeof(VS_PROC_INFO), GFP_KERNEL); memset(pvs_proc_host_dbglvl, 0, sizeof

11、(VS_PROC_INFO); /*initial*/ pvs_proc_host_dbglvl-name = Mdebug_levelH; /*dbglvl_name*7 pvs_proc_host_dbglvl-attr = PROC_VALUE_READ | PROC_VALUE_WRITE | (PROC_VALUE_TYPE_NUM); /*here VS_CURR_LEVEL is a variable to be operate via procfs*/ pvs_proc_host_dbglvl-pvalue = &V S_CURR_LEVEL; INIT_LIST_HEAD(&

12、pvs_proc_host_dbglvlprocist);pvs_proc_host_dbglvl-nMin = VS_ALL; pvs_proc_host_dbglvl-nMax = VS_TEST;proc_addist(pvs_proc_host_dbglvl, &host_procist); /*add this info to host proc list*/pvs_proc_host_h264config = kmalloc(sizeof(VS_PROC_INFO), GFP_KERNEL); memset(pvs_proc_host_h264config, 0, sizeof(V

13、S_PROC_INFO); /*initial*/ pvs_proc_host_h264config-name = Mh264cfgM; /*dbglvl_name*/*here vs_h264_config is a variable to be operate via procfs*/ pvs_proc_host_h264config-pvalue = &vs_h264_config; pvs_proc_host_h264config-attr=PROC_VALUE_READ | PROC_VALUE_WRITE | PROC_VALUE_TYPE_NUM; INIT_LIST_HEAD(

14、&pvs_proc_host_h264configproc_list);pvs_proc_host_h264config-nMin = 0; pvs_proc_host_h264config-nMax = 8;proc_add_list(pvs_proc_host_h264config, &host_procist); /*add this info to host proc list*/Hangzhou Avilsi Technology CO.Ltd於掏杭州爱威芯科技有限公司VS设备中PROC的使用(三)所有vs模块公共接口: 这里除了上面提过的VS_PROCNFO、PROC_TO_LIS

15、T以及LIST_TO_PROC可以公甬外,另外两个也是最董要図公用部分是 vs_proc_read以及vs_proc_write这两个函数,这两个函数根据某个proc文件 的粮list来操作此模块链接吞该模块根list上面的变量。所以,对于一个属于vs设备的模块来说,建立本模块与用户之间的通信接口需 要做的工作如下:仓U建属于vs_proc_root的设备文件定义通用的读写接口使用自己的root lisi来填尧data元素向root list增加自己需要操作的变量Hangzhou Avilsi Technology CO.Ltd*start, off_t off, int count, int *eof, void *data)struct list_head *list_proc = (void *)data; /*root list for this module*/struct list_head *list_tmp = NULL; cha

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号