linux驱动
yuzhenrong
知行合一
展开
-
中断控制器和Linux中断子系统
中断对于cpu来说扮演着举足轻重的角色,从软硬件层面涉及面广,因此流程相对也比较复杂。硬件层面涉及到arm的gic中断控制器以及CPU内部扩展的gpio中断控制器,外设利用中断资源硬件设备,软件层面涉及和架构强相关的异常处理代码,linux为屏蔽硬件涉及差异搞出来的中断子系统。以下从各个层面对中断进行展开讨论。一.中断体系架构中断从软硬件上来分层大致可以分成四层,概述如下:1.硬件连接层:普通外设连接到中断控制器,中断控制器连接到处理器核的IRQ和FIQ脚,对于处理器来说,中断控制器和普通外设一样,原创 2020-10-30 01:32:39 · 381 阅读 · 0 评论 -
linux内核regmap机制
从linux 3.1版本开始,内核引入一种新的机制,把i2c/spi/irq等读写接口统一,这一招可以避免让驱动开发者自己构建msg结构体,调用对应总线发送函数进行通信,让驱动代码的编写更简洁且易行。新瓶子装了旧酒,只是把构建通信消息结构体的这一流程进行封装,但是也让人耳目一新,喜闻乐见,乐于尝试。内核维护者们还是很为开发者们着想的。重要的核心层代码路径:regmap.c作为核心层提供统一接口regmap-i2c.c/regmap-i2c.c/regmap-irq.c作为各自总线的核心层提供接口给驱动原创 2020-10-23 01:11:51 · 371 阅读 · 0 评论 -
linux驱动设备匹配流程
linux驱动模型是分成三个部分的,设备(结构体device),驱动(结构体device_driver),总线(结构体bus_type),这个模型管理着linux的驱动,让他们在开机之后能正常驱动硬件有序的干活。这一切需要从一棵树讲起,我说的这棵树就是我们常说的dts(device tree source),搞懂搞透设备树是我们可以正确开发硬件驱动的前提,因为设备树是配置板级信息的地方。我们所说的设备树起源于openfirmware,所以linux关于设备树的接口都是以of开头的,存放这些核心API的源代原创 2020-09-02 03:04:00 · 2582 阅读 · 1 评论 -
添加sysfs文件节点调试驱动
驱动调试过程中我们经常需要借助adb或者串口动态控制设备,在sysfs中添加一个文件节点用来调试是一个十分方便调试的方法。一下介绍下添加方法:1.定义kobject目录和device_attributestatic struct kobject *xxx_deg;static struct device_attribute xxx_deg_attrs =__ATTR(xxx_debug, 0200, NULL,xxx_store);//处于对权限的限制,注意这里需要把权限设置为不可写,否则内核在编原创 2020-08-20 01:47:55 · 771 阅读 · 1 评论 -
linux i2c通信架构中的重要结构体
linux中i2c子系统包含i2c核心层,i2c主机驱动层,i2c设备驱动层i2c核心主要是提供了主机驱动的注册/注销方法,i2c通信方法(alogrithm),以及上层的与具体适配器硬件无关的代码以及探测设备,检测设备地址的上层代码,代码文件目录:kernel/drivers/i2c/i2c-core.ci2c主机驱动层是i2c的主设备程序,是i2c适配器的实现代码,适配器是受CPU直接控制的,一般直接集成在CPU内部,因此这部分代码是cpu芯片厂家去实现的。如果板子上的硬件i2c资源不够用的时候,用原创 2020-06-20 22:25:53 · 250 阅读 · 0 评论