Linux调试中使用的proc和sys中的接口
Linux调试中使用的proc和sys中的接口
在调试的过程中我们通常需要去不停的修改寄存器的值来调试效果,在现在发现有两个手段,分别利用的proc和sys
proc--|
|-----read_proc
|-----write_proc
sys---|
|-----show
|-----store
proc的方法不依赖与kobject,sys中show和store则依赖于kobject。
基本的使用如下:
-------------------------- start proc ----------------------------
- struct proc_dir_entry *prEntry;
- prEntry = create_proc_entry("driver/proc_func", 0, NULL);
- if (prEntry) {
- prEntry->read_proc = read_proc_func;
- prEntry->write_proc = write_proc_func;
- }
- else {
- printk("add /proc/driver/camsensor entry fail \n");
- }
- /*
- * This is not completely implemented yet. The idea is to
- * create an in-memory tree (like the actual /proc filesystem
- * tree) of these proc_dir_entries, so that we can dynamically
- * add new files to /proc.
- *
- * The "next" pointer creates a linked list of one /proc directory,
- * while parent/subdir create the directory structure (every
- * /proc file has a parent, but "subdir" is NULL for all
- * non-directory entries).
- */
- typedef int (read_proc_t)(char *page, char **start, off_t off,
- int count, int *eof, void *data);
- typedef int (write_proc_t)(struct file *file, const char __user *buffer,
- unsigned long count, void *data);
相对的利用sys中实现接口调试则如下实现,前提是有device设备哦,亲。
-------------------------- start sys --------------------------
- static struct device_attribute test1_attr = {
- .attr = {
- .name = "test1",
- .mode = 0644,
- .owner = THIS_MODULE
- },
- .show = test1_show_func,
- .store = test1_store_func,
- };
- static struct device_attribute *test_attributes[] = {
- &test1_attr,
- &test2_attr,
- &test3_attr,
- };
- for (i = 0; i < ARRAY_SIZE(*test_attributes); i++) {
- ret = device_create_file(&dev,
- *test_attributes[i]);
- if (ret) {
- printk("failed: sysfs file %s\n",*test_attributes[i]->attr.name);
- goto failed_unregister_dev_file;
- }
- }
- /* interface for exporting device attributes */
- struct device_attribute {
- struct attribute attr;
- ssize_t (*show)(struct device *dev, struct device_attribute *attr,
- char *buf);
- ssize_t (*store)(struct device *dev, struct device_attribute *attr,
- const char *buf, size_t count);
- };
-------------------------- end sys --------------------------
评论暂时关闭