思路:通过sysfs接口,在kernel起来之后,动态查看或者更改某些寄存器
如下代码展示如何显示某些寄存器的值:
static ssize_t register_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
/*
Read register value here!
*/
return sprintf(buf, "%02x", <register_value>);
}
static struct kobj_attribute registershow_attr =
__ATTR(registershow, 0644, register_show, NULL);
struct kobject *mytest
mytest = kobject_create_and_add("my_register_show", NULL);
if (!mytest)
return -ENOMEM;
sysfs_create_file(mytest, ®istershow_attr.attr);
这样可以把最后一句代码嵌到普通driver 的init部分,系统启动后,会在/sysfs/下边创建一个目录 “my_register_show”, 该目录下边有个文件 registershow, 你cat这个文件,就会运行 register_show函数,把相应你要读的寄存器信息打印出来。
有些sensor driver 就是通过这种机制(或者input subsystem)把数据提供给上层用户。