背景
在调试文件系统时,有时需要临时打开某个开关查看一些代码中预埋的调试信息,这时一般是使用sys或者proc下面的文件系统进程调试,这里我们添加额外的文件进行测试。
代码
module_init初始化代码中:
pdevice_class = class_create(THIS_MODULE, "io_test");
BUG_ON(IS_ERR(pdevice_class));
pdevice = device_create(pdevice_class, NULL, 0, NULL, "io_num");
BUG_ON(IS_ERR(pdevice));
device_create_file(pdevice, &dev_attr_io_run);
device_create_file(pdevice, &dev_attr_io_irq);
device_create_file(pdevice, &dev_attr_io_out);
全局变量:
int io_run_num = 0;
int io_run_irq = 0;
int io_out_num = 0;
static DEVICE_ATTR(io_run, 0644, get_io_run_num_callback, NULL);
static DEVICE_ATTR(io_irq, 0644, get_io_irq_num_callback, NULL);
static DEVICE_ATTR(io_out, 0644, get_io_out_num_callback, NULL);
static struct class *pdevice_class;
static struct device *pdevice;
查看函数
static ssize_t get_io_run_num_callback(struct device* dev, struct device_attribute* attr,char* buf)
{
return sprintf(buf,"%i\n",io_run_num);
}
static ssize_t get_io_irq_num_callback(struct device* dev, struct device_attribute* attr,char* buf)
{
return sprintf(buf,"%i\n",io_run_irq);
}
static ssize_t get_io_out_num_callback(struct device* dev, struct device_attribute* attr,char* buf)
{
return sprintf(buf,"%i\n",io_out_num);
}
设置函数
static ssize_t set_io_run_num_callback(struct device* dev, struct device_attribute* attr, const char* buf, size_t count)
{
long enable;
if (kstrtol(buf, 10, &enable) < 0)
return -EINVAL;
io_run_num = enable;
return count;
}
其他地方使用
extern int io_run_num;
extern int io_run_irq;
测试
文件路径:/sys/class/io_test/io_num下面3个文件:io_run,io_num,io_out