Linux下使用额外增加文件方式查看debug信息

背景

在调试文件系统时,有时需要临时打开某个开关查看一些代码中预埋的调试信息,这时一般是使用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

猜你喜欢

转载自blog.csdn.net/TSZ0000/article/details/88721874