android底层驱动学习之如何通过debugfs创建文件的方式来调试内核信息
2016-12-08 16:22
549 查看
对于驱动的调试,有时我们得通过调试某些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)
{
.............
}
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)
{
.............
}
相关文章推荐
- android底层驱动学习之内核信息的输出以及控制方式
- spring学习教程7-spring容器创建bean对象的方式以及如何处理多个spring配置文件
- 内核驱动模块如何在/dev文件下自动创建设备
- Android Studio多渠道打包方式一:通过外部文件来写渠道信息
- 如何在.cc源码中通过变量向trace文件输入调试信息
- android底层驱动学习之debug方法(proc、sysfs、debugfs)
- 一步一个脚印学习WCF系列之WCF概要—WCF服务的创建与调用HelloWorld实例,通过配置文件方式(六)
- android底层驱动学习之 module_init的内核调用顺序
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- android底层驱动学习之日志信息、printk的个人理解
- android底层驱动学习之DebugFS的用法,以及对file_operations的进一步理解
- 关于PHP-Zend framework2 框架 学习过程。 阅前须知: ZF2中的配置文件是可以静态文件配置来注册和通过相关函数动态注册。 1.EventManager(事件驱动),关于事件驱动,在ZF2相关资料没有详细说明,可以参考ANDROID的事件驱动,MFC的消息响应/事件驱动。
- android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
- 内核驱动模块如何在/dev文件下自动创建设备
- android底层驱动学习之从应用程序如何到底层driver的调用
- 使用DUMP 文件调试分析内核驱动
- Android如何获取多媒体文件信息
- Makefile & Android.mk文件中如何输出打印信息
- Android平台中应该如何获取音乐文件的信息
- C# 用Linq的方式实现对Xml文件的基本操作(创建xml文件、增删改查xml文件节点信息)