07 计算机网络
计算机网络网络体系结构对于网络体系结构的划分,主要有2种形式: OSI七层网络模型 看赛博二哈的八股(第115条) OSI(Open Systems Interconnection)模型由ISO提出,是一个理论分层框架,用于标准化网络通信过程。虽然实际网络并未完全采用OSI,但它对理解网络协议分层至关重要 层数 名称 功能 协议/设备示例 关键词 7 应用层 提供用户接口,实现具体应用功能(如文件传输、邮件收发) HTTP、FTP、SMTP、DNS 6 表示层 数据格式转换(加密、压缩、编码) SSL/TLS、JPEG、ASCII 5 会话层 建立、管理、终止应用程序间的会话 NetBIOS、RPC 4 传输层 提供端到端的数据传输(流量控制、错误恢复) TCP、UDP 端口号、TCP、 UDP 3 网络层 实现主机间的逻辑寻址和路由选择,跨越不同网络 IP、ICMP、路由器 IP地址、路由 器、ping通 2 数据链路层 将比特流封装成数据帧(使用MAC地址在网卡间通信) ARP、网卡、交换机、...
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 封装/外壳 →...
07 V4L2框架
V4L2框架简介V4L2是Linux内核中的一套驱动框架,为视频类设备(USB、CSI摄像头…)的驱动开发和应用层提供了一套统一的接口规范 V4L2将视频设备视为字符设备,例如/dev/videoX,用户可以通过标准的文件系统接口(如ioctl、open、read、write等)与之交互 在音视频开发领域,许多框架比如FFmpeg都是以V4L2作为基础开发的,所以这个框架还是比较重要的 工作流程 从流程图中可以看到,几乎对摄像头的所有操作都是通过 ioctl()来完成,搭配不同的 V4L2 指令请求不同的操作,这些指令定义在头文件 linux/videodev2.h 中 打开设备打开设备其实和别的类型的设备一样,用open()系统调用就行了 1fd = open("/dev/video0", O_RDWR); 查询属性在V4L2中,使用ioctl()封装了一个指令和结构体用于属性的查询 1234567891011ioctl(int fd, VIDIOC_QUERYCAP, struct v4l2_capability *cap);struct...
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 ...








