05 字符设备驱动框架
字符设备驱动框架简介Linux的字符设备驱动框架是以struct cdev为核心的一套API,通过向内核注册cdev,从而向用户空间提供对设备进行IO操作的接口 注意:Linux字符设备驱动框架主要用于封装设备的IO操作,有别于Linux的设备驱动模型,并不负责设备与驱动的匹配之类的,所以2者通常同时出现 而且不是所有字符设备的驱动都需要用到这个框架,比如一个用了input子系统的按键,它不需要向用户提供IO操作的接口,所以就不需要(其实这是驱动分层的结果,input子系统的核心层会用到该框架来提供用户对/dev/input/eventXIO操作的能力,但我们自己写的驱动层不需要用) 核心组件 cdev12345678910111213141516struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int...
08 GPIO子系统
GPIO子系统GPIO子系统是 Linux 内核中用于管理和控制通用输入/输出引脚的核心框架,它为开发者提供了统一的接口来操作硬件上的 GPIO 引脚,使用前需要用pinctrl将该引脚的复用配置成GPIO 驱动架构GPIO子系统的驱动同样遵循着“主机驱动和设备驱动分离”和“驱动分层”的思想,分为主机驱动层、核心层、设备驱动层 主机驱动层主机(GPIO控制器)驱动一般由原厂提供,且也作为设备树中的一个节点 SoC内部对于GPIO一般都有专门的控制器外设,它直接位于SoC的内存空间,通过配置该外设的寄存器,从而控制某个具体的GPIO 12345678910111213141516/{ soc{ aips1{ gpio1: gpio@0209c000 { compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio"; reg = <0x0209c000 0x4000>; interrupts =...
04 设备树
...
16 I2C子系统
...
21 Camera驱动开发
Camera驱动开发Camera基础知识CMOS Sensor也常被简称为Sensor,它就是个光电转换器件,把光信号转换成电信号 特点: 只是一个裸芯片(die) 输出通常是 Raw Bayer 数据(RGGB/BGGR 等排列) 不含镜头、ISP、电路板等辅助模块 常见规格:分辨率(MP)、尺寸(1/2.3”)、像素尺寸、bit-depth(10/12-bit) 相机模组将Sensor、镜头、PCB、外壳等封装到一起的摄像头硬件模块,接口可以直接接主控 组成部分: CMOS Sensor → 输出 Raw 或 ISP 后的数据 镜头系统 → 聚焦光线到传感器 PCB 电路板 → 控制信号、时钟、I2C/CSI/USB 接口 ISP(可选)→ 有些模块自带 ISP,输出 NV12 / RGB / MJPEG 封装/外壳 →...
23 USB
USB概述USB是“Universal Serial Bus”的缩写,中文意思是“通用串行总线”。它是一种广泛使用的接口技术,主要用于连接计算机与各种外部设备,如鼠标、键盘、打印机、摄像头、移动硬盘、手机等。主要特点: 通用性强:USB接口被几乎所有类型的计算机(包括台式机、笔记本电脑、平板电脑等)和大量外部设备所支持,是一种通用的连接标准 即插即用:大多数USB设备在连接到计算机后,操作系统可以自动识别并安装相应的驱动程序,无需用户进行复杂的配置 支持热插拔:用户可以在不关闭计算机电源的情况下插拔USB设备,方便使用 传输速度快:USB技术不断更新,从最早的USB 1.0到现在的USB 3.2和USB4,传输速度大幅提升。例如,USB 3.2的理论传输速度最高可达20Gbps 支持多种设备连接:通过USB集线器,可以连接多个设备,扩展计算机的外设连接能力 USB技术发展 USB 1.x USB 1.0 USB 1.1(即USB 2.0 Full Speed) USB 2.0(即USB 2.0 High Speed) USB 3.x USB 3.0(即USB 3.2...
09 MISC设备驱动框架
MISC设备驱动框架 MISC设备又称杂项设备,由于一些设备不好分类,所有可以把他们都归到杂项设备里面。字符设备也可以看成一种杂项设备,使用MISC驱动框架时,可以简化字符设备驱动的开发 Misc是Linux驱动开发里的一个子系统,它也遵循了驱动分层的思想,用一个核心层来完成对此类设备IO操作之类的通用操作的封装,用户只需要写简单的驱动实例层并注册设备到该子系统就行了 1.MISC设备简介Linux内核提供了struct miscdevice来定义杂项设备 可以看到,misc框架其实把字符设备驱动框架(fops)和Linux设备驱动模型(device)==封装到了一起==,可以同时向用户层提供I/O操作的接口,并完成驱动和设备的匹配 1234567891011struct miscdevice { int minor; const char *name; const struct file_operations *fops; struct list_head list; ...
11 Linux内核中断
Linux内核中断总览Linux驱动开发中,对于中断,同样遵循着“驱动分层”和“主机驱动和设备驱动分离”的思想,可以分为以下几层: 1.硬件/架构相关层(最底层) 这是与CPU内核、ISA相关的实现层,负责: 处理器特定的中断控制器操作(如x86的APIC、ARM的GIC) 中断向量表的设置 底层中断启用/禁用 中断上下文保存与恢复 文件位置:arch/xxx/kernel/irq.c(如arch/arm/kernel/irq.c) 2.中断控制器驱动层(irqchip driver) 这是针对具体SoC的中断控制器的驱动层,例如: ARM GIC驱动(drivers/irqchip/irq-gic.c) x86 IOAPIC驱动 其他SoC专用中断控制器 这些驱动需要: 初始化硬件中断控制器 实现irq_chip操作集(如mask/unmask中断) 处理硬件级中断路由 3.中断核心层(irq core) 这是Linux内核提供的通用中断子系统核心,负责: 中断描述符管理(struct...
06 platform设备驱动框架
platform设备驱动框架platform驱动框架由驱动分离的思想引出了总线、驱动和设备模型,Linux提出了platform驱动框架,为设备的注册、匹配、管理等操作提供了统一的接口。但是并不是所有设备都有物理总线,比如SoC内部的I2C、SPI、LCD等控制器与CPU内核的连接。为了解决此问题,platform驱动框架虚拟出一条platform总线,使得所有的设备都可以应用驱动分离模型 platform框架和字符设备框架是独立的,2者一般需要同时使用,前者是对整个驱动开发流程的一个统一化,主要包括硬件资源描述和驱动的匹配和资源管理;后者负责具体字符设备的设备节点、设备号的创建、以及与用户空间交互的IO操作之类的东西 platform总线Linux内核定义结构体struct bus_type来定义各种总线 123456789101112131415161718192021222324struct bus_type { const char *name; /* 总线名字 */ const char ...







