
驱动
文章平均质量分 89
快乐的学习
越努力、越幸运
展开
-
Linux驱动快速加入ftrace函数示例讲解
在驱动源文件中,包含必要的头文件,例如<linux/ftrace.h>。使用DEFINE_TRACE宏来定义一个 ftrace 事件追踪点。// 定义一个ftrace事件这个宏会创建一个名为my_trace_event的 ftrace 事件,后续可以在驱动中触发这个事件来进行追踪。原创 2025-03-07 17:13:01 · 465 阅读 · 0 评论 -
SATA驱动中FIS命令处理(详细)流程附代码和协议解析
本文主要讲述在SATA模块命令的处理、数据的传输和内存分布详细过程,同时讲述如何通过FIS用于Host和device之间信息传输。1、构造FIS命令;2、填充Command Table;3、填充Command Header;4、通知Host或Device处理命令;原创 2024-01-21 11:16:40 · 2475 阅读 · 0 评论 -
SATA模块物理层OOB信号分析总结(三)
本文主要讲解SATA底层FW中HOST和DEVICE进行FHY LINK过程中OOB(Out-of-Band)信号的产生与检测。OOB主要的作用如下:1、初始化(initialization);2、传输速率的协商与对接(Speed negotiation); 透过OOB handshake,host与device可以决定要在Gen1,Gen2或Gen3做data传输。3、重置(Reset);4、从省电状态(Slumer/Partial)的唤醒。原创 2023-12-02 11:34:25 · 2964 阅读 · 0 评论 -
AHSATA模块之AHCI HBA卡开发,结合SPEC文档和项目实际底层FW开发总结(一)
本次开发是基于ARM A55芯片AHSATA模块开发firware实现AHCI HBA功能,本篇文章主要讲解AHCI HBA底层的实现流程,具体细节再后续文章中进行针对性的总结。AHCI HBA独立于SOC芯片以外的AHCI HBA是一个PCI类设备。在主机下为一个SATA controller PCI设备,在controller下可以外挂多个ATA DEVICE。在linux下输入lspci可以看到controller设备SATA3协议一共分为五层:应用层、命令层、传输层、链路层和物理层。原创 2023-11-25 10:45:21 · 1687 阅读 · 0 评论 -
Linux多核CPU启动内核调试(详细)总结
1、uboot编译;2、内核相关配置打开;3、内核相关模块驱动确认;4、内核编译;5、linux系统定制;原创 2023-10-29 18:25:07 · 1609 阅读 · 0 评论 -
uboot下UCLASS框架详解---结合项目工作中spi master和flash驱动开发
lists_bind_fdt是从dtb中解析udevice和uclass的核心,通过读取dts内容读取相应的driver生成相应的 udevice,再根据driver中对应的UCLASS_ID绑定对应的uclass,如dts中定义一个spi master驱动,对应的驱动名字为mxc_spi,id为UCLASS_SPI,则该udevice会追加到spi uclass节点下,同时也会加到gd->root下。调用driver的ofdata_to_platdata,将dts信息转化为设备的平台数据。原创 2023-06-20 23:19:08 · 3327 阅读 · 0 评论 -
SPI协议详细总结附实例图文讲解通信过程(快速掌握)
SPI(Serial Peripheral Interface,串行外设接口) 协议是一种高速高效率、全双工的通信总线,允许CPu与低速的外围设备之间进行同步串行数据的传输,主要是用同步的时钟信号对串行的数据同时进行发送和接收操作,从而实现全双工。常用于短距离通讯,主要是在嵌入式系统中。SPI接口在芯片内部只占用四根线,主要有两条数据线、一根片选线和一根时钟信号线。这四根线分别对应SPI协议传输时的四种信号,分别有主机输出信号MOSI、从机输入信号MISO、片选信号sS n以及输出的时钟信号SCK。原创 2023-06-20 07:50:55 · 25087 阅读 · 2 评论 -
PCIe事务层(详细)总结-PCIe专题知识(六)
本文主要讲解PCIe事务层(Transaction Layer)的主要功能,通过图文解析方便读者快速掌握,同时有PCIe专题讲解整个PCIe的相关知识。在PCIe体系结构中,数据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要通过物理层、数据链路和事务层,并最终到达Device Core。原创 2023-05-14 22:08:25 · 2378 阅读 · 1 评论 -
PCIe热插拔机制(详细)总结-PCIe专题知识(五)
本文主要讲述PCIe热插拔机制,通过图形方式方便读者快速掌握。如果在PCIe设备不支持热插拔的条件下,在不断电的情况下插拔一块PCIe SSD时,很可能会对主板或PCIe插槽造成损毁。为了放置意外的发生,PCIe Spec设计了一种"No Surprise"热插拔机制,即,当用户要插拔PCIe设备时,必须先通知系统软件做好准备,然后通过指示灯告知用户热插拔的状态。PCIe总线的热插拔主要指的是PCIe卡设备的热插拔以及相关的实现机制等。原创 2023-05-10 00:02:57 · 13895 阅读 · 0 评论 -
PCIe物理层弹性缓存机制(详细)解析-PCIe专题知识(四)
本文主要介绍PCIe物理层弹性缓存机制用于同步时钟。PCIe物理层弹性缓存(Elastic Buffer,又称为CTC Buffer或者Synchronization Buffer)。其本质上是一种FIFO,主要用于解决跨时钟域问题。当然,PCIe的弹性缓存还用于补偿时钟误差(Compensate for the clock differences)。原创 2023-05-05 22:14:10 · 3758 阅读 · 0 评论 -
PCIe物理层链路训练和初始化(详细)总结附图文解析-PCIe专题知识(三)
本文主要介绍PCIe物理层链路训练和链路初始化的详细过程。物理层实现了链路训练(Link Training)和链路初始化(Link Initialization)的功能,这一般是通过链路训练状态机(Link Training and Status State Machine,LTSSM)来完成的主要流程为上电后两侧根据PCIe总线协议进入LTSSM流程;该过程是一套硬件自动化的流程,链路双方自动协商速率和宽度,调节发送和接收参数,从而达到最佳信号质量。1、初始状态,探测对方是否存在。原创 2023-05-04 23:41:40 · 14268 阅读 · 0 评论 -
8b/10b编码方式(详细)总结附实例快速理解
本文主要通过图文方式介绍8b/10b编码,具体转换方式通过实例解析,方便读者快速掌握。8b/10b编码也叫做8字节/10字节,是目前高速串行通信中经常用到的一种编码方式,直观的理解就是把8bit数据编码成10bit来传输。该编码方式最初是由IBM公司在1983年发明并应用于ESCON[200M互联系统],由AI widmer和Peter Franaszek在IBM的刊物“研究与开发”上提出。原创 2023-05-03 11:44:17 · 15975 阅读 · 4 评论 -
PCIe数据链路层图文详细总结-PCIe专题知识(二)
本文主要介绍数据链路层的相关知识,通过详细的图文解析,方便读者快速掌握。PCIe 总线的数据链路层(Data Link Layer)处于事务层和物理层之间,主要进行链路管理(Link Management)、TLP错误检测,Flow Control和Link功耗管理,负责数据链路层包(Data Link Layer Packet,DLLP)的创建,解码和校检,保证来自事务层的 TLP 在 PCIe 链路中的正确传递。原创 2023-05-03 08:29:06 · 5247 阅读 · 0 评论 -
PCIe物理层详细总结-PCIe专题知识(一)
本文主要对PCIe物理层的组成、功能进行详细的总结,通过图文的方式方便读者快速掌握。物理层是PCIe总线的最底层,将PCIe设备连接在一起。PCIe总线的物理电气特性决定了PCIe链路只能使用端到端的连接方式。PCIe总线的物理层为PCIe设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境,发送端数据链路层(Data Link Layer)的DLLP和TLP报文通过物理层(Physical Layer)发送至接收端的物理层,再传送至接收端的数据链路层。原创 2023-05-01 08:01:34 · 9527 阅读 · 1 评论 -
Linux下spi网卡dm9051驱动移植及(具体)驱动调试分析总结
本文重点总结spi网卡在linux下的驱动移植以及根据板子的走线如何进行debug,最后定位到具体问题后正常使用的详细过程。DM9051NP SPI接口网卡芯片是为了方便互联网行业进行以太网通信而开发出的解决方案。DM9051NP芯片是带有行业标准串列外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。DM9051NP符合IEEE 802.3 规范,它还支持以DMA 模式來传输,以实现资料传送快速。原创 2022-11-06 14:19:27 · 2976 阅读 · 0 评论 -
Linux下uboot添加自定义命令(详细)实例及原理解析
本文主要讲述如何在uboot下新增自定义命令,同时解析uboot命令执行的原理。U-boot全称UniversalBootLoader,即通用bootloader.它是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,它还支持NetBSD、VxWorks、QNX、RTEMSARTOS、LynxOS嵌入式操作系统。原创 2022-11-06 10:17:48 · 2144 阅读 · 0 评论 -
Linux驱动移植USB网卡r8156驱动(详细)总结
本文主要在arm主板中移植usb网卡驱动,因为内核自带的r8152驱动有问题,因此移植了千兆网卡的usb驱动,在ubuntu下交叉编译内核模块然后在主板系统下安装,下面介绍本人移植的详细过程。系统版本:Ubuntu 22.04 LTS主板型号:armv8。原创 2022-09-17 11:54:33 · 3688 阅读 · 0 评论 -
Linux下设备树dts内容(详细)总结及示例解析
文章目录一、简介二、设备树基础内容2.1 设备树文件存放路径2.2 DTS、DTB和DTC关系2.3 传统驱动代码和使用设备树的对比三、设备树内容属性介绍3.1 节点名称3.2 compatible3.3 model 属性3.4 status 属性3.5 #address-cells 和 #size-cells 属性3.6 ranges 属性3.7 aliases 节点3.8 chosen 节点四、设备树文件内容示例解析4.1 设备树关键内容解析一、简介设备树是在PowerPC平台最先使用,后来2原创 2022-05-14 20:07:43 · 13100 阅读 · 0 评论 -
Kdump调试机理详细总结(一)
一、简介本文主要讲解Kdump的运行机理,后续两个章节会详细介绍kdump的使用和如何分析coredump文件信息。Kdump 的概念出现在 2005 左右,是迄今为止最可靠的内核转存机制,已经被主要的 linux™ 厂商选用。kdump是在系统崩溃、死锁或者死机的时候用来转储内存为vmcore保存到磁盘的一个工具和服务。1、Kdump相关名词定义:(1)生产内核:第一个运行的内核(正常的系统运行内核)(2)捕获内核:第二个运行的内核(系统异常时,会启动捕获内核,用以对生产内核下的内存进行收集和转原创 2022-05-03 22:50:50 · 2848 阅读 · 0 评论 -
编译linux内核常见报错(最全)总结讲解
一、简介本文主要介绍在编译内核中常见的报错问题的处理方法,编译过程中的主要报错有缺少本地依赖库、config设置、gcc版本与内核版本不匹配、内核源文件版本问题等,具体问题请看第二章。二、常见报错1、CC arch/arm/kernel/asm-offsets.scc1: error: invalid option `abi=aapcs-linux'make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1make: *** [prepar原创 2022-05-02 18:22:12 · 20824 阅读 · 8 评论 -
交叉编译linux内核实例(最详细)总结
本文主要用实例详细讲述了如何用交叉编译工具编译内核的操作。1、本地环境搭建过程:包括gcc工具链和本地编译依赖库配置;2、下载内核源码;3、配置.config 文件;4、交叉编译内核;5、打包编译好内核文件。gcc交叉编译工具搭建学习链接。原创 2022-05-01 21:09:11 · 10692 阅读 · 3 评论 -
Linux下gcc交叉编译工具链制作实例详细总结(附下载地址)
本文主要讲解gcc交叉编译工具链搭建的全过程,以本人实际的操作去讲述整个工具链的搭建,希望对大家有所帮助。原创 2022-04-25 19:17:30 · 13148 阅读 · 6 评论 -
Linux下块驱动(总结)和源码解析
一、简介Linux三大驱动类型包括字符驱动、块驱动和网络驱动。块设备是针对存储设备的,比如 SD卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等;块驱动和字符驱动的区别如下:1、字符设备是以字节为单位进行数据传输的,不需要缓冲;2、块设备只能以块为单位进行读写访问,块是linux虚拟文件系统(VFS)基本的数据传输单位,块设备在结构上是可以进行随机访问的,对于这些设备的读写都是按块进行的,块设备使用缓冲区来暂时存放数据,根据回写机制条件将缓冲区中的数原创 2022-04-24 11:23:41 · 3258 阅读 · 2 评论 -
SSD硬盘SATA接口和M.2接口区别(详细)总结
一、简介目前主流的SSD硬盘都是SATA接口或者M.2接口。本文主要接收SATA和M.2硬盘的结构,并对两种硬盘从多个方面进行对比阐述。二、SATA接口详解SATA(Serial Advanced Technology Attachment)硬盘,又称串行ATA,是串行SCSI(SAS:Serial Attached SCSI)的孪生兄弟,两者的排线相容,SATA硬盘可接上SAS接口。它是一种电脑总线,主要功能是用作主板和大量储存装置(如硬盘及光驱)之间的数据传输之用。目前主流SATA 3.0通道,原创 2022-04-22 11:25:57 · 89261 阅读 · 0 评论 -
Linux下进程管理知识(详细)总结
一、简介本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。二、常用的命令解析1、ps命令命令选项解析-a显示一个终端所有的进程-u显示进程的归属用户和内存占用情况-x显示没有控制终端的进程-l长格式显示更详细的信息-e显示所有进程-w宽行显示,可以使用多个w进行加宽显示进程常见状态有:R运行状态(running)S睡眠状态(sleeping)D磁盘休眠状态(Disk sleep),不可中断T停止状态(stopp原创 2022-04-01 23:54:37 · 1703 阅读 · 0 评论 -
Linux系统top命令(最详细)总结
简介top命令可以动态查看进程变化,监控linux的系统状况。Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。[root@localhost 桌面]# toptop - 22:33:04 up 2 min, 2 users, load average: 0.85, 0.62, 0.25Tasks: 155 total, 2 running, 153 sleeping, 0 stopped, 0 zombie%Cpu(s):原创 2022-04-01 23:29:06 · 16193 阅读 · 0 评论 -
关于linux下内存管理内容(详细)总结
一、简介内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存分配、内存回收、页面映射、页面交换等方面进行整体说明。Linux将32位设备4G的线性地址空间分为2部分,0~3G为userspace,0~4G为kernel space。由于开启了分页机制,内核想要访问物理地址空间的话,必须先建立映射关系,然后通过虚拟地址来访问。为了能够访问所有的物原创 2022-04-01 12:17:37 · 2965 阅读 · 0 评论 -
Linux下中断机制之tasklet执行过程(详细)总结
一、简介由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍;但是在实际系统中,当中断到来时,要完成工作往往进行大量的耗时处理。因此期望让中断处理程序运行得快,并想让它完成的工作量多,这两个目标相互制约,诞生——顶/底半部机制,本文主要介绍tasklet的执行过程。读者可根据情况了解以下知识:软中断过程总结中断机制详细总结由于软中断必须使用可重入函数,这就导致设计上的复杂度变高,作为设备驱动程序的开发者来说,增加了负担。而如果某种应用并不需要在多个CPU上并行执行,那么软原创 2022-03-31 19:09:32 · 4074 阅读 · 0 评论 -
Linux下软中断过程(详细)源码总结
一、简介由于中断会打断内核中进程的正常调度运行,所以要求中断服务程序尽可能的短小精悍;但是在实际系统中,当中断到来时,要完成工作往往进行大量的耗时处理。因此期望让中断处理程序运行得快,并想让它完成的工作量多,这两个目标相互制约,诞生——顶/底半部机制,本文主要介绍中断机制底半部的软中断的详细执行过程。如需了解中断的整体过程请点击链接:****Linux中断机制详解二、软中断过程分析软中断可以使内核延期执行某个任务,他们的运作方式和具体的硬件类似,甚至可以说这里就是模拟的硬件中断,所以称之为软件中断原创 2022-03-31 12:33:14 · 3908 阅读 · 0 评论 -
Linux中断分类总结(详细)图解
一、 简介中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。1.1中断类型同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括原创 2022-03-30 20:41:21 · 5434 阅读 · 0 评论 -
关于路由器和交换机的区别图解(总结)
简介路由器是在交换机的基础上发展而来:路由器又被称为网关设备,用于连接多个逻辑上分开的网络,它是不同网段通信的桥梁。路由器是在交换机的基础上发展而来,它们之间在概念上有一定的重叠但也有很大的不同,交换机泛指工作在任何网络层次的数据中继设备,而路由器需要提供路由、传送路径的机制,路由器能够理解不同的协议,再根据特定的路由算法把相关的数据包按照最佳路线传送到指定位置。主要区别1、路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以,交换机根据MAC地址寻址。交换机在数据原创 2022-03-30 13:57:37 · 43447 阅读 · 0 评论 -
Linux网卡接收数据包过程图详细总结
简介本文对代码的详细实现过程不做过多的讲解,重点让读者熟悉数据的接收过程,如需进一步熟悉源码,可根据下面的链接做进一步学习:1、网卡驱动源码分析2、网卡结构和基础知识详解收包过程总览从TCP/IP网络分层模型中可以清楚当数据帧从网卡(物理层)接收到客户端(应用层)收到数据包的整个过程。通过网卡进行网络数据接收一般要经历下面两个过程:1、接收数据前的准备工作 1)网络子系统的初始化; 2)协议栈的注册; 3)网卡驱动的初始化; 4)启动网卡;2、接收和传输网络数据:一、接原创 2022-03-27 18:43:52 · 7752 阅读 · 5 评论 -
Linux网卡基本结构和传输流程总结
简介网卡的功能主要有两个:一、是将电脑的数据封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;二、是接收网络上其它设备传过来的帧,并将帧重新组合成数据,发送到所在的应用层中。本文介绍网卡的结构和基本的网卡传输流程。网卡的结构网络设备主要分为 PHY、MAC 和 DMA 三个硬件模块。以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY,同时通过DMA进行数据的传输。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路原创 2022-03-27 14:44:54 · 2945 阅读 · 0 评论 -
socket通信原理及相关函数(详细)总结
简介socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。socket就在应用程序的传输层和应用层之间,设计了一个socket抽象层,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层,问题又来了,应用层原创 2022-03-22 11:11:59 · 11038 阅读 · 0 评论 -
Linux系统e1000e网络驱动源码(最深入)分析过程
简介本文讲解得e1000e网卡驱动主要用于intel网卡,以驱动的设计流程,分析整个驱动的接收和发送包过程。首先介绍4个e1000e基础知识:1)PCIE的配置空间初始化:PCIE卡都遵循一个标准, x86通过往2个内存地址读写就可以控制IO桥访问一个内部寄存器+一个地址偏移, 就可以读写PCI的配置空间, 操作系统实际上就是用这个机制, 判断卡位是否插上了卡, 卡是否合法, 以及写对应的配置区域(相当于初始化);2)msix机制及初始化:OS在初始化配置区的时候, 会根据卡将pci卡的msix起原创 2022-03-22 00:09:59 · 8983 阅读 · 0 评论 -
TCP三次握手和四次挥手(最详细)实例图总结
简介本文主要接收TCP三次握手和四次挥手的信号传输过程,并在后面总结三次握手和四次挥手真正含义。三次握手三次握手即TCP连接的建立。这个连接必须是客户端一方主动打开,服务端一方被动打开的,以下为客户端主动发起连接的图解:1、三次握手总体过程:首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。2、三次握手过程详解:1)序列号seq:占4个字节,用原创 2022-03-20 23:46:55 · 8399 阅读 · 0 评论 -
Linux下tty串口驱动数据的发送、接收过程源码实例详解
简介本文主要时讲解tty驱动文件的打开、数据的发送、数据的接收相关的源码解析,从用户层到硬件层的源码追踪过程。具体的读写操作可先大致看一下流程图,下面的源码分析也依然是围绕该流程进行函数追踪。一、tty数据接收流程分析:对于tty设备的打开操作,即用户调用read函数来读取设备的文件的数据,首先经过vfs层、字符设备驱动层,到达tty_open()函数,经过tty_core层、serial_core等层后,主要完成一下工作:1、首先通过dev_t,再tty_driver链表中查找对应的驱动,并返原创 2022-03-19 00:36:12 · 9314 阅读 · 1 评论 -
Linux系统TTY串口驱动实例详解
在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。由于串口也是一种终端,因此这里引入终端这个概念。Linux tty子系统包含:tty核心,tty线路规程和tty驱动。tty核心是对整个tty设备的抽象,对用户提供统一的接口,tty线路规程是对传输数据的格式化,tty驱动则是面向tty设备的硬件驱动。原创 2022-03-18 17:56:07 · 7839 阅读 · 0 评论 -
Linux内核中kzalloc分配内存时用的参数GFP_KERNEL详解
简介GFP(Get Free Pages缩写)在include/linux/gfp.h中定义。GFP_KERNEL是内核内存分配时最常用的,无内存可用时可引起休眠。GFP_ATOMIC用来从中断处理和进程上下文之外的其他代码中分配内存,从不睡眠。GFP_KERNEL内核内存的正常分配,可能睡眠。GFP_USER用来为用户空间页来分配内存,它可能睡眠。GFP_HIGHUSER如同 GFP_USER, 但是从高端内存分配, 如果有, 高端内存在下一个子节描述.GFP_NOIO根本不允许任原创 2022-03-17 23:34:32 · 5102 阅读 · 0 评论 -
Linux常见内核错误返回值宏定义
#ifndef _ASM_GENERIC_ERRNO_BASE_H#define _ASM_GENERIC_ERRNO_BASE_H#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#define EINTR 4 /* Interrupted system call */原创 2022-03-17 23:27:42 · 1634 阅读 · 0 评论