对于驱动的调试,有时我们得通过调试某些IO口,或者一些I2C总线,那我们是不是要通过一些API来操作,但是在用户空间(shell)又不能直接调用该接口,那我们其实也可以通过建立一个debugfs文件结点方式来做。具体如下:
1.举个例子来说明,在调试GPIO驱动的时候,我们可以通过debugfs来调试:
首先定义一个file_operations:
staticconst struct file_operations gpiolib_operations = {
.open = gpiolib_open,
.read = gpiolib_read,
.write = gpiolib_write,
.llseek = seq_lseek,
.release = single_release,
};
2.然后,建立一个debugfs文件结点:
(void)debugfs_create_file("gpio", S_IFREG | S_IRUGO,
NULL, NULL, &gpiolib_operations);
在实际的驱动中,建立debugfs文件结点一般在驱动初始化的时候。
3.根据我们的调试需要,实现读写操作,一般用得比较多的是read和write操作,所以在gpiolib_read和gpiolib_write里加入我们的调试代码。调用GPIO驱动的时候,我的想法是,给GPIO结点发一个读指令,那么就得传入的gpio号的状态,给GPIO结点发一个写指令,那么就根据传入的参数设置gpio的状态。于是,我只需要实现write函数:
staticssize_t gpiolib_write(struct file *file, const char __user *buf,size_t size, loff_t *ppos)
{
.............
}
转载请注明原文地址: https://ju.6miu.com/read-999991.html