简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
1.创建workqueue代码分析1.1整体代码分析根据FLAG的不同,创建workqueue的API分好几种(见系列文章1说明),根据情况使用,但最终这些API都会调用到alloc_workqueue,这是一个宏定义,它的调用序列图如下所示:这里重点介绍函数alloc_and_link_pwqs(),wq在此函数中创建:static int alloc_and_link_pwqs(struct
linux驱动模型框架如图所示:1. kernfs驱动最终是提供给用户层使用,那么其中的接口就是通过kernfs文件系统来注册,kernfs是一个通用的内核虚拟文件系统2. sys/kobjectsys是设备驱动文件系统,在/sys目录下会把各个设备形象的表现出来,而每个节点都是通过kobject来抽象的,kset也是一个kobject,在/sys中以目录的形式表现,kobj_attribute在
文章系列 视频驱动V4L2子系统驱动架构 - 驱动框架视频驱动V4L2子系统驱动架构 - ioctl基于linux4.6.3,最后会附上一张ioctl调用总图,分析代码还是要用图来说明,这样更清晰一点,我就是这么分析的,不过平时分析的图很随便,而且很大,所以就不能在这里呈现,我在这里会贴出一个简略图ioctl详解进入ioctl都是从cdev->ops->ioctl进入的,一般的驱动cde
本文系列文章建议参考文章Documentation/devicetree/booting-without-of.txtlinux设备树的解释 - 总览文章从全局介绍了dt使用的整个流程,言简意赅linux设备树的解释 - DTC编译器文章介绍了dtc编译器及DT文件组织结构linux设备树的解释 - DTB文件格式文章介绍了被编译完成的dtb文件格式,要能够理解内核是怎么把dts转换成d
文章系列I2C子系统驱动架构 - 简介I2C子系统驱动架构 - 驱动框架I2C子系统驱动架构 - 具体实现基于linux内核4.6.3版本介绍I2C驱动框架I2C驱动框架图如下所示,用户空间上的节点是用于上层开发工程师来操作i2c设备,内核空间的驱动架构分2层,Bus层的驱动代码是芯片厂商已经写好的,对于驱动开发人员来说,主要是设计device层的代码,不过要理解i2c驱动框架对于整个框架机
devm简介在驱动代码中我们经常会见到一些以devm开头的函数,这一类的函数都是和设备资源管理(Managed Device Resource)相关的,驱动中提供这些函数主要是为了方便对于申请的资源进行释放,比如:irq、regulator、gpio等等。在驱动进行初始化的时候如果失败,那么通常会goto到某个地方释放资源,这样的标签多了之后会让代码看起来不简洁,devm就是为来处理这种情况。
workqueue归入中断子系统是由于和中断处理有密切关系,写博客重要在于整理自己的思绪,写的时候会把一些不懂的细节问题暴露出来,这样会把问题看的更透彻,workqueue的代码在文件kernel/workqueue.c中,大约5K+行,本文基于linux 4.6.3编写,由于能力有限,本文介绍不全面或者理解有误之处还请见谅,欢迎指正一起探讨。文章系列1.linux工作队列 - workqueue
Dynamic Audio Power Management for Portable Devices移动设备的动态电源管理(DAPM)1. DescriptionDAPM使得使用音频子系统的移动linux设备,在任何时候,都能够获得最小功耗。DAPM独立于kernel中其他PM系统,能够和其他PM系统和谐共存。DAPM对于用户层是透明的,电源切换在asoc-driver层完成。用户层
clk子系统负责为整个系统硬件提供时钟信号,这个要和linux的时钟系统区别开来;现在的ASoC上包含许多clk模块,比如晶振,pll,divider等,那么clk子系统就把这些模块抽象出来,并形成一个驱动框架,这样对于其他驱动开发人员来说,只需要调用通用的接口就能操作各自设备的clk,没必要从上到下重新配置clk1.驱动框架clk驱动框架如上图,API层是提供操作clk的通用...
work_struct被调用在函数worker_thread中进行,代码如下:static int worker_thread(void *__worker){struct worker *worker = __worker;struct worker_pool *pool = worker->pool;/* tell the scheduler that this i