自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奶牛养殖场小马

正经人谁写博客啊

  • 博客(423)
  • 收藏
  • 关注

原创 Socket缓冲区,可读可写条件

1 首先会检查缓冲区,如果缓冲区的可用空间长度小于要发送的数据,那么 write()/send() 会被阻塞(暂停执行),直到缓冲区中的数据被发送到目标机器,腾出足够的空间,才唤醒 write()/send() 函数继续写入数据。2 如果TCP协议正在向网络发送数据,那么输出缓冲区会被锁定,不允许写入,write()/send() 也会被阻塞,直到数据发送完毕缓冲区解锁,write()/send() 才会被唤醒。1 首先会检查缓冲区,如果缓冲区中有数据,那么就读取,否则函数会被阻塞,直到网络上有数据到来。

2023-01-30 11:21:33 1065 1

原创 RTSP,RTP,RTCP协议

比如,对于I帧、P帧、B帧数据,由于其重要性依次降低,故在网络状况不好的情况下,可以考虑在B帧丢失甚至P帧丢失的情况下不进行重传,这样,在客户端方面,虽然可能会有短暂的不清晰画面,但却保证了实时性的体验和要求。如果是UDP传输 则需要另外创建 RTP udp Socket 与 RTCP udp Socket,并且 RTP和RTCP分别使用两个相邻的UDP端口,RTP报文使用低端口,并且是偶数的UDP端口,RTCP报文使用高端口,并且是奇数的UDP端口(偶数的UDP端口+1)。

2023-01-30 10:08:34 1307 1

原创 sysfs--kset, kobj, kobj_type

内核sysfs文件系统使用kobject将上述目录中的各个对象链接起来,并组成一个分层的结构体系。内核为sysfs文件目录内的每个目录都创建一个kobject结构。

2023-01-26 20:48:48 762

原创 sysfs文件系统简述

当然跟设备驱动具体的实现方式有关,通常情况下,一般简单地设备会使用 sysfs 方式操控,其设备驱动在实现时会将设备的一些属性导出到用户空间 sysfs 文件系统,以属性文件的形式为用户空间提供对这些数据、属性的访问支持,譬如 LED、GPIO 等。编译为内联方式的模块则只在当他有非0属性的模块参数时会出现的对应的 /sys/module// ,这些模块的可用参数会出现在 /sys/module//parameter/中。

2023-01-26 12:17:13 1296 1

原创 Udev 为设备节点起别名

在插入u盘后,出现sdb相关节点, 则当前u盘对应的设备节点就是sdb。KERNELS - 硬件端口号,有些设备的 idVendor和idProduct 是相同,依靠这两个并不能完全准确的区分目标设备,这时候就需要用 KERNELS 硬件端口号。同理 SD卡 操作也类似: 示例中硬件端口号是随机写的,思路是一样的,只不过这里 也指定了原生的设备名为 “sd*”,增加了筛选条件。这样就为 sdb 取了一个别名为 “usb-Upan” ,以后在程序里直接访问 “usb-Upan”,就可以与该u盘通信了。

2023-01-19 17:45:29 1826

原创 Udev设备管理器

udev 引入在2.4内核中 引入了 devfs,他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是,设备命名策略是可管理的,不应该与内核混在一起,设备命名策略可以位于头文件,模块参数,或者用户空间中。而udev则将设备管理的任务推向了用户空间。

2023-01-19 14:52:04 1294

原创 USB大容量存储设备浅析

当插入U盘,USB主机控制器会识别到该设备是一个海量存储设备,然就就会根据SCSI协议,先发送CBW命令块包,U盘收到后根据SCSI协议解析该报,并回复命令执行状态包(CSW),就是应答,作为对前一个CBW命令块包处理结果的回应。同IDE(ATA)完全不同的接口, IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。IDE、SCSI、USB,并行口,串口,其中并行口与串口的速度非常慢,不提也罢,最主要的就是IDE,usb, SCSI。

2023-01-09 16:11:15 3163

原创 嵌入式系统IO体系简述

CPU的主要职责是负责运算,而计算机是需要各种外设的,否则无法和人进行交互。早期x86体系的CPU,需要使用前端总线(fsb)和北桥芯片相连,北桥再和南桥相连。南北桥是一种架构的划分,设计者的原始图架构上,在上部的称为北桥,下部的成为南桥。典型上,北桥的功能主体是AGP控制、内存控制,南桥包括IDE、PCI、串并口多功能控制单元,集成网卡控制器、音效控制器就在南桥。而集成的图形控制单元,就是集成显卡核心了,就在北桥。总之,CPU控制外部设备需要依赖于南北桥,而南北桥中就集中了各种外部设备的控制器。

2023-01-06 15:55:51 934

原创 USB客户驱动简析

内核为我们提供了一个最基础的USB驱动,即USB骨架程序,是一个最简单的USB设备驱动实例。通过分析该驱动可以了解 USB设备驱动主要工作、如何读写数据。

2023-01-05 23:02:03 258

原创 USB子系统简述

引子:关于 lsusb 命令Bus 004 :表示第四个 usb 主控制器(机器上总共有四个 usb 主控制器,可以通过命令 lspci | grep USB 查看)。Device 001表示系统给 usb 鼠标设备分配的设备号(devnum),同时也可以看到该设备是插入到了第4个 usb 主控制器。ID 1d6b:0003 表示 usb 设备的 ID(这个 ID 由芯片制造商设置,可以唯一表示该设备)。

2023-01-05 22:04:29 1021

原创 USB基础

一个USB分层星型结构有且仅有一个USB主机控制器,并且USB主机控制器一般都伴随有一个Root Hub(根集线器),都在在最顶层,主机通过Root Hub提供若干个连接点,由于集线器和电缆中的信号传输有定时限制,该星形拓扑结构的最大层数为7层(包括根层)。当USB设备插入到USB集线器后,一切的工作都是由USB集线器开始的。当USB设备插入到USB集线器的一个端口后,该端口会检测到有设备插入,检测依据是USB设备在D+ 或 D- 数据线的上拉电阻,当设备的上拉电阻在D+时,为全速设备。

2023-01-03 20:00:50 4072

原创 PHY启动

stmmac_open()会去尝试到mdio总线上 匹配 phy device 与 phy driver。当匹配成功后 会调用 phy driver的 probe()函数,设置 phy 状态为准备状态PHY_READY,启动phy 状态机任务。然后做一系列操作后 最终 切换phy 状态为驱动 PHY_UP,这样 状态机任务就会继续执行下去。当执行ifconfig eth0 up 希望启动网络的时候,会执行 网卡设备的操作集 open()问题: PHY 是怎么启动的。

2022-12-30 23:56:55 630

原创 PHY驱动注册部分

所以 一般情况下,如果不需要使用PHY厂家提供的自定义的寄存器配置实现一些个性化的功能,那么PHY驱动就基本不需要修改。phy_driver注册成功了,那就差phy_device的注册。看代码就知道 phy_device的注册不依靠设备树,而是在GMAC控制器注册时候 在其中的mdiobus_register中会注册phy_device。对应的目录是/sys/mdio,在/sys/mdio/devices目录中会有挂载在mdio的phy设备,在/sys/mdio/drivers中会有phy设备的驱动。

2022-12-29 00:20:33 1077

原创 MAC控制器驱动

所以以太网模块的硬件相关的驱动代码主要包括 GMAC 和 PHY,其中MAC控制器驱动由SoC厂商开发,PHY芯片驱动由PHY厂商开发,PHY 驱动一般使用通用 PHY 驱动,如果有需要修改特殊寄存器,请使用对应的 PHY 驱动,代码都在 drivers/net/phy。对应的目录是/sys/mdio,在/sys/mdio/devices目录中会有挂载在mdio的phy设备,在/sys/mdio/drivers中会有phy设备的驱动。GMAC 驱动代码,高于3.10 的内核版本,

2022-12-28 23:52:19 2354

原创 嵌入式终端的以太网系统简析

比如发送数据时,MAC主要处理的数字信号,而 PHY芯片就是负责把MAC的数字信号进行编码,串行化等操作后,转化为模拟信号进行发送。就是PHY一旦连入网络,PHY 会和它相连接的端口的PHY进行协商,当前通信使用的速率是 1000M, 100M 还是10M?MII 数据接口总共需要 16 个信号,包括 TX_ER,TXD[3:0],TX_EN,TX_CLK,COL,RXD[3:0],RX_ER,RX_CLK,CRS,RX_DV 等。根据当前网络的传输速率,是否有数据传输,来自动控制LED 灯的行为。

2022-12-28 22:03:58 1047

原创 ASOC系统简析

ASOC系统简述

2022-12-22 13:20:22 817

原创 ALSA系统简析

Audio ALSA 概述

2022-12-12 11:19:31 1348

原创 音频基础概念

音频基础知识

2022-12-10 22:56:33 1484

原创 基于RV1126 Video分析-----添加所有media模型到多媒体设备

添加所有media模型到多媒体设备

2022-12-04 00:43:34 424

原创 基于RV1126 Video分析-----链接 mipi csi phy与 sensor 的media模型

链接 mipi csi phy与 sensor 的media模型

2022-11-30 23:50:57 911 1

原创 基于RV1126 Video分析-----链接 mipi csi 与 mipi csi phy 的media模块

链接 mipi csi 与 mipi csi phy 的media模块

2022-11-30 23:38:17 662

原创 基于RV1126 Video分析-----链接 isp 与mipi csi 的media模块

链接 isp 与mipi csi 的media模块

2022-11-30 22:54:59 1594

原创 基于RV1126 Video分析-----图像处理media模块注册

图像处理模块所代表的media模块注册

2022-11-29 04:06:25 308

原创 基于RV1126 Video分析-----mipi协议解析media模块注册

mipi协议解析模块所代表的media模块注册

2022-11-29 03:45:26 780

原创 基于RV1126 Video分析-----mipi dphy模块media模块注册

mipi dphy模块所代表的media模块注册

2022-11-29 03:36:32 405

原创 基于RV1126 Video分析-----sensor 的 media模块注册

sensor模块所代表的media模块注册

2022-11-29 03:30:08 513

原创 V4L2视频驱动框架---meida_device管理模块简述

V4L2视频驱动框架 之 media device 管理简述

2022-11-29 03:19:40 949

原创 TTY驱动读写流程随笔

TTY驱动读写流程的一点随笔

2022-11-14 00:23:00 297

原创 TTY驱动分层思想

TTY驱动的分层思想

2022-11-14 00:17:17 353

原创 基于RV1126 Video分析-----图像处理模块所代表的V4L2设备注册

图像处理模块所代表的V4L2设备注册

2022-11-13 23:45:43 1283

原创 基于RV1126 Video分析-----mipi协议解析模块所代表的subdev子设备注册

mipi协议解析模块所代表的subdev子设备注册

2022-11-13 23:28:36 508

原创 基于RV1126 Video分析-----mipi dphy模块所代表的subdev子设备注册

mipi dphy模块所代表的subdev子设备注册

2022-11-13 23:12:01 580

原创 基于RV1126 Video分析-----sensor模块所代表的subdev子设备注册

sensor模块所代表的subdev子设备注册

2022-11-13 22:45:11 719 1

原创 基于RV1126 Video分析-----驱动各模块总览

Video驱动通用理论, 数据流,各模块,以及各模块关系说明

2022-11-13 01:35:10 4058 4

原创 X86系统中断处理与特权级转移 软中断实现系统调用 用户态程序使用软中断扎内核调用内核态程序

不会,中断整体是由 处理器 与 8259A中断控制器 共同管理的,虽然8259A可以不停的将中断请求发送给处理器,但是处理器有屏蔽中断的开关,只要当前中断处理还没有完成,就可以将IF置0 即不接受其他中断请求。处理器没有中断优先级的概念,它只有响应与不响应的概念,当在执行中断处理时,屏蔽外部中断请求时 不响应8259A发来的中断请求。相反 当中断服务程序完成时,重新开始响应8259A的中断请求。处理器拿到中断向量之后,就会到中断描述符表中查找对应的中断向量,进而找到一个中断描述符,然后继续特.

2022-01-29 20:58:04 2239 1

原创 X86系统中断代理8259A 说明与控制

学习自唐佐林老师问题:不同外设如何向处理器发送中断信号?当多个外设同时产生中断时,处理怎么处理?我们想象中的 外设与CPU的连接方式大致是这样:然而 真实的情况并非如此,真是的情况 是 CPU 将外设的中断的管理交给了8259A控制器 ,CPU 只做中断处理,如下图:对于处理器而言 只有一个中断引脚,也就是说 只能有一个8259A直接连接到处理器的中断引脚上面。下图的 从8259A接到了 主8259A的 IR2,所以当 从8259A 有多个中断时,就需要设定优先级,所以

2022-01-29 14:03:09 1007

原创 x86系统的中断机制

提炼:1 中断基本概念 (外部中断 内存中断,以及区别)2 实模式下 与 保护模式下 中断响应过程 以及 中断与对应的中断服务程序 如何映射关联外部中断:外部设备向处理器发出的中断,如网卡 键盘 鼠标等等内部中断:处理器自己所发出的中断软中断:由代码来产生,在形式上 类似于函数调用异常:处理器是逐条指令执行的 如果遇到不认识 不合法的指令 就会发出异常中断 很形象的比喻:INTR 可屏蔽中断NMI 不可屏蔽中断不论工作在什么模式(实模式,保护模式),处理器和

2022-01-15 23:21:36 1594 1

原创 X86系统内存分页机制--加载不同的页表并读取同一个虚拟地址中内容 或者 调用同一个虚拟地址的函数

实验1 :加载不同的页表并读取同一个虚拟地址中内容%include "inc.asm";两个页目录 子页表 起始地址 对应两个不同的任务;简单的分页构建方法,所有的子页表顺序的连续排列;注意: 因为我们设计的也表示连续的内存排布,所以单个任务的页表总大小就是 :1024(页表个数)*4096(单个子页表大小) ;所以 设计多个页表的时候 需要注意 每个页表的基地址之间的差值 要大于页表总大小;页目录0起始地址PageDirBase0 equ 0x200000;子页表0..

2022-01-15 13:31:30 326

原创 X86系统内存分页机制--将同一个虚拟地址映射到不同的物理地址 并反编译验证

实验 : 将同一个虚拟地址映射到不同的物理地址说明:此处所讲的 <将同一个虚拟地址映射到不同的物理地址> 是指 将 同一个虚拟地址 在不同的页表中进行映射,并直接指定映射的物理地址,此处直接指定的物理地址 依然是某个物理页的起始地址,特点式目标物理地址 低12位为0,即目标物理地址是4K的整数倍 说明是某个物理页面(一页4K大小)的起始地址。所以最终的映射方式不变,依然是虚拟地址高10位 作为 子页表在页目录的位置,中间10位是 目标物理页号地址 在子页表中的位置,最后低12位是 ...

2022-01-10 23:28:10 709

原创 X86系统上的内存分页机制 --页表映射 与 切换页表

操作系统里面的每一个任务都有自己独立使用的页表,当操作系统切换任务来执行的时候,也要对应的切换页表,另外每一个任务都有自己独立的虚拟地址空间,而每个任务 虚拟地址空间中数据的分布肯定是不一样的,因此会出现这样的情况:同一个虚拟地址 在不同的页表的映射下 ,被转换成了不同的物理地址。切换页表实验%include "inc.asm";两个页目录 子页表 起始地址 对应两个不同的任务;简单的分页构建方法,所有的子页表顺序的连续排列;页目录起始地址PageDirBase0 equ .

2022-01-08 07:52:00 840

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除