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...
02 应用层控制GPIO
应用层控制GPIO控制GPIO硬件有以下几种方法: 编写驱动程序,在设备的IO操作里完成对GPIO的任意控制 在应用层依靠GPIO子系统在/sys/class/gpio中为GPIO类设备的属性文件来进行简单控制 基于sysfs进入到/sys/class/gpio 目录下可以看到GPIO控制器包含以下属性: export unexport gpiochipX 在使用一个GPIO前,需要将一个GPIO导出到用户空间,这样才能使用它,通过将要导出的GPIO序号写入到export属性文件即可完成导出,取消导出的话将要取消导出的GPIO序号写入到unexport属性文件即可。 在导出一个GPIO后,在/sys/class/gpio 目录下会新多出一个目录,代表此GPIO设备,该目录包含4个属性文件: 1.active_low:配置GPIO的极性,value的0/1到底代表高还是低电平由此属性决定( ==输入输出均是==) 1234567891011121314//active_low 等于 0 时echo...
面试题
14.FreeRTOS支持哪些类型的中断?中断处理的基本原则是什么?21.FreeRTOS如何处理异常和错误? 24.如何在FreeRTOS中实现低功耗模式?25.FreeRTOS的移植过程通常需要考虑哪些硬件特性? 29.FreeRTOS如何与其他操作系统进行集成?30.FreeRTOS的调试工具和方法有哪些?
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...
04 网络编程
...
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 ...
08 GStreamer
GStreamer基本概念GStreamer是一个跨平台的流媒体框架,采用基于管道的插件化架构,支持音视频采集、编解码、渲染等全流程处理。应用程序可以通过管道(Pipeline)的方式,将多媒体处理的各个步骤串联起来,达到预期的效果。每个步骤通过元素(Element)基于GObject对象系统通过插件(plugins)的方式实现,方便了各项功能的扩展。例如摄像头采集(v4l2src)、视频编码(nvv4l2h264enc)等模块可灵活拼接,组成流水线 ElementSource 元件(数据源)产生媒体流的元素 文件源:filesrc (从文件读取) 设备源:v4l2src (摄像头, Video4Linux2), alsasrc (音频输入), pulsesrc (PulseAudio输入), audiotestsrc, videotestsrc (测试源) 网络源:udpsrc, tcpclientsrc, rtmpsrc, rtspclientsrc 特殊硬件源 (Jetson/NVIDIA):nvarguscamerasrc,...
20 sysfs
sysfs定义sysfs 是 Linux 内核提供的一个 虚拟文件系统(类似 /proc),挂载在 /sys 下 作用: 展示内核对象(kobject)及其属性给用户空间 提供用户态访问和控制硬件及内核状态的接口 支持驱动和设备管理、模块信息查看、电源管理等 特点: 虚拟文件系统,不占用实际磁盘空间 每个 kobject 对象在 sysfs 中对应一个目录 属性(attribute)以文件的形式暴露,读写这些文件会触发内核的回调函数 结构 目录 作用 /sys/class/ 按设备类别(class)组织的设备,如 net、gpio、leds 等 /sys/bus/ 按总线类型组织设备,如 pci、usb、platform 等;还包含驱动/设备信息 /sys/devices/ 所有 struct device...
10 Linux内核定时器
Linux内核定时器 在编写驱动的时候,可能也会用到定时器,比如按键消抖…由于驱动的代码是在内核态,所以就需要使用内核态的定时器,而不是用户态的定时器 Linux内核的定时器相对于以前STM32用的定时器,有以下区别: 内核定时器是软件定时器,采用系统时钟实现,并不是硬件定时器 定时器超时是由软件设置和管理的,通过内核或者应用程序来控制,而回调函数的执行是在预定的时间点或者时间间隔后发生的,不算中断 内核定时器不是周期运行的,超时后就会停止,需要手动再次开启(如果还需要用的话) 1.基本数据结构Linux内核使用如下的结构体来描述一个定时器: 12345678struct timer_list { struct list_head entry; unsigned long expires; /* 定时器超时时间,单位是节拍数 */ struct tvec_base *base; void (*function)(unsigned long); /* 定时处理函数 */ unsigned long data; /*...







