Linux驱动
文章平均质量分 89
我要暴富
这个作者很懒,什么都没留下…
展开
-
spi 子系统
Linux spi 子系统原创 2023-03-08 16:42:33 · 2677 阅读 · 1 评论 -
pinctl和gpio子系统
pinctl子系统设置引脚的复用和电气属性。获取设备树中pin信息。根据获取到的pin信息来设置引脚复用。根据获取到的pin信息来设置电气属性。设备树对引脚控制器的描述半导体厂商在头文件中描述的:IOMUXC SNVS控制器IOMUXC控制器gpr控制器半导体厂商的描述比较简单,我们需要对他进行一些追加在对控制器追加的描述当中,分门别类的对所有功能汇总描述,按不同功能在不同节点描述。gpio子系统根据gpio子系统来使用gpio...转载 2020-12-22 17:11:57 · 1799 阅读 · 0 评论 -
i2c子系统
(所谓的注册i2c_client 其实就是注册i2c_client->dev (device),将i2c_client->dev 添加到bus->p->klist_devices,注册过程中会查找bus->p->klist_drivers 中的device_driver 是否与其匹配,匹配则调用bus->probe,最终调用到i2c_driver->probe)核心层还需要注册i2c_bus_type 总线模型,负责i2c_driver 与i2c_client 的匹配工作。原创 2023-02-24 11:56:42 · 658 阅读 · 0 评论 -
Linux 驱动基础
structstruct0第 1 个宏是用来定义一个 work_struct 结构体, 要指定它的函数。第 2 个宏用来定义一个 delayed_work 结构体, 也要指定它的函数。所以“ delayed”, 意思就是说要让它运行时, 可以指定: 某段时间之后你再执行。他们的区别在于DECLARE_WORK 帮我们定义好了struct work_struct 并绑定func,而INIT_WORK 需要我们自己定义struct work_struct。do->原创 2023-02-24 11:55:49 · 723 阅读 · 0 评论 -
input 子系统
先来了解什么是输入设备?常见的输入设备有键盘、 鼠标、 遥控杆、 书写板、 触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。什么是输入系统?输入设备种类繁多, 能否统一它们的接口?既在驱动层面统一, 也在应用程序层面统一?可以的。Linux 系统为了统一管理这些输入设备, 实现了一套能兼容所有输入设备的框架: 输入系统。驱动开发人员基于这套框架开发出程序, 应用开发人员就可以使用统一的 API 去使用设备。原创 2023-02-24 11:53:24 · 1405 阅读 · 0 评论 -
platform 总线
Linux 驱动-总线-设备 模型总线在 Linux 命令行 /sys/bus 目录下可以看到当前设备注册的所有总线:这些总线都是通过Linux 内核注册的。Linux 驱动使用 driver——bus——device 模型,将驱动与设备信息分离开来,提高了 驱动的可重用性 和 内核驱动管理性。总线的作用主要是完成驱动与设备的匹配。Linux 使用一个结构体来描写一条总线,它就是struct bus_type ://include/linux/device.hstruct bus_type原创 2023-02-19 11:40:28 · 642 阅读 · 1 评论 -
uart 子系统
uart 子系统,代码解析原创 2023-02-13 18:08:16 · 1011 阅读 · 0 评论 -
pcie 总线
pcie 简介pcie 是一种总线,为什么引入它? 我们需要从cpu对外设的访问方式说起。我们的软件要实现外设功能,最基本的就是 CPU与外设之间的IO (读写寄存器)操作。CPU 与外设之间通过数据线,地址线来进行交互,通过地址线指定要访问的寄存器地址,数据线来发送或接受数据。下图是imx6ull 的片上外设控制器地址表(从0x0000_0000~ 0x8000_0000),可以看到不同的外设控制器各自有自己的地址段。当cpu想要读写这些外设控制器的寄存器时只要根据它们的地址就可以直接读写,这些原创 2022-03-04 17:22:14 · 9119 阅读 · 4 评论 -
并发与竞争
什么是并发与竞争多任务工作方式: 多线程、多进程、中断与任务等等。共享资源(临界资源): 在多任务的工作模式下有多个执行单位,它们通常可以拥有一段共享空间(比如全局变量、共享内存等等)。临界区: 在同一时刻只能有一个运行单位执行的一段代码叫临界区。竞争: 多个运行单位都可以同时访问这一段空间,这时就很容易发生错误,当他们都需要访问这个空间时就会发生竞争,从而导致空间内的数据混乱(多线程任务下极易导致程序崩溃)。同步: 显然,我们不希望这种情况发生,就有了对临界资源的保护,让每个时间只能有一个进程/原创 2021-04-27 23:11:55 · 447 阅读 · 0 评论 -
Linux定时器
Linux内核时间管理系统时间管理需要一个硬件定时器提供时钟 ,通常这个定时器时通用的,有利于系统移植。像UCOS 或 FreeRTOS 一般使用 Systick 作为系统时钟源(systick 是cortex-m 内核提供的定时器,芯片厂商在使用cortex-m内核制作芯片时为了通用性也会选择它作为芯片的硬件定时器)。同样Linux 也需要一个定时器来驱动,Linux内核就是使用它来进行一系列的时间管理操作。(具体是什么不深究)Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时转载 2021-06-13 20:06:40 · 9053 阅读 · 2 评论 -
ioctl 函数
ioctrl参考文章ioctrl详解ioctrl详解用户层ioctl 函数原型:#include <sys/ioctl.h> int ioctl(int fd, int cmd, ...) ;这是一个可选参数函数,第3个参数为args。fd: 文件描述符。cmd: 控制命令。arg: 参数。比如说控制定时器延时500ms,500ms 就是参数。在 file_operations 中有以下两个函数:long (*unlocked_ioctl) (struct file原创 2021-06-14 18:20:45 · 3251 阅读 · 3 评论 -
设备树
一、设备树的由来Linux是世界上最大的开源项目之一,由全世界的内核开发者来维护。在早期linux内核下对各个平台/机器的硬件设备描述是使用.c文件(结构体)的,他们充斥在arch/arm/plat-xxx和arch/arm/mach-xxx目录下,由于每个平台上的硬件设备各有不同,(随着arm平台越来越多,就越乱,重复越多)这样对每个平台都需要一个.c文件来描述。然而这对linux内核来说就是一些垃圾代码(都是一些冗余的硬件描述代码),为了方便管理将各个平台的硬件描述信息都放到/arch/arm/b原创 2020-12-21 00:10:45 · 1739 阅读 · 1 评论 -
Linux OF函数
Linux内核的OF操作函数of函数详细参考这些函数或结构体都在 include/linux/of.h 文件中定义。使用OF函数查找到设备树中具体的某个节点首先,我们在设备树中描述了设备的信息,当时Linux驱动程序如何获取到这些信息呢?在驱动中使用OF函数可以获取到设备树中的所描述的设备信息。 of函数所有的函数名都以of开头,所以叫of函数。驱动要想操作设备,首先要找到设备树中的节点,常用的查找节点of函数有5种:of_find_node_by_name 函数 //通过名字查找节点原创 2021-05-04 19:18:12 · 1724 阅读 · 0 评论