自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 收藏
  • 关注

原创 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 9935

原创 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 61853

原创 关于路由器和交换机的区别图解(总结)

简介路由器是在交换机的基础上发展而来:路由器又被称为网关设备,用于连接多个逻辑上分开的网络,它是不同网段通信的桥梁。路由器是在交换机的基础上发展而来,它们之间在概念上有一定的重叠但也有很大的不同,交换机泛指工作在任何网络层次的数据中继设备,而路由器需要提供路由、传送路径的机制,路由器能够理解不同的协议,再根据特定的路由算法把相关的数据包按照最佳路线传送到指定位置。主要区别1、路由器在网络层,路由器根据IP地址寻址,路由器可以处理TCP/IP协议,交换机不可以,交换机根据MAC地址寻址。交换机在数据

2022-03-30 13:57:37 14693

原创 Linux网卡接收数据包过程图详细总结

简介本文对代码的详细实现过程不做过多的讲解,重点让读者熟悉数据的接收过程,如需进一步熟悉源码,可根据下面的链接做进一步学习:1、网卡驱动源码分析2、网卡结构和基础知识详解收包过程总览从TCP/IP网络分层模型中可以清楚当数据帧从网卡(物理层)接收到客户端(应用层)收到数据包的整个过程。通过网卡进行网络数据接收一般要经历下面两个过程:1、接收数据前的准备工作 1)网络子系统的初始化; 2)协议栈的注册; 3)网卡驱动的初始化; 4)启动网卡;2、接收和传输网络数据:一、接

2022-03-27 18:43:52 6670 5

原创 socket通信原理及相关函数(详细)总结

简介socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。socket就在应用程序的传输层和应用层之间,设计了一个socket抽象层,传输层的底一层的服务提供给socket抽象层,socket抽象层再提供给应用层,问题又来了,应用层

2022-03-22 11:11:59 9867

原创 I2C总线内容(详细)总结分享

简介IIC的全称是Inter-Integrated Circuit,串行总线的缩写,由duPhilips公司推出,是近年来在微电子通信控制制领域广泛采用的一种新型总线标准。具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。它是同步通信的一种特殊形式,仅需两根线(SLC、SDA)即可完成信息传输,并且通信速率较高。在主从通信中,可以有多个IIC设备同时接到IIC总线上,通过地址来识别通信对象。I2C总线时序详解1.1 总线数据有效性  I2C总线是单工,因此同一时刻数据只有一个流向

2022-03-15 16:28:56 7602

原创 Linux系统下dd命令详解

简介dd命令可以标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出,常用于刻录启动光盘、备份硬盘文件和格式化硬盘数据等操作。参数详解if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。obs=bytes:一次输出bytes个字节,即

2021-04-30 13:55:54 11509

原创 linux系统下grub.cfg详解和实例操作

简介grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文件系统对应的驱动,通过根分区文件系统对应的驱动,挂载根分区,从而达到启动操作系统的目的。特殊变量变量详解?上一条命令的返回值,零表示成功,非零表示失败[与bash一样]。由GRUB2自动设置。你只能使用此变量,而不能修改它check_signatures是否在加载文件时强制验证签名,可以设为’yes’或’no’chos

2021-02-02 17:23:26 12761 3

原创 Linux系统自动挂载设备配置文件fstab详解

Linux系统盘在系统安装完后会将各个分区自动挂载的参数写入到/etc/fstab配置文件中,因此我们可以参考系统挂载方式将其他磁盘写入配置文件中进行开机自动挂载。

2020-08-09 00:35:10 5330 2

原创 Linux系统下LightDM详解

简介LightDM(Light Display Manager)是一个全新的轻量级Linux桌面显示管理器,而传统的Ubuntu是使用GNOME桌面标准的GDM。LightDM是一个跨桌面显示管理器,其目的是成为X org的X Server的标准显示管理器。LightDM是2010年开始的新项目,且被设计为轻量、小巧、快速。相较于GDM-GTK、KDM-Qt、LightDM实际上与界面无关,...

2019-12-19 16:18:24 6472

原创 UEFI下命令参数详解快速掌握

本文主要是总结UEFI下常用的命令的使用。

2024-03-21 10:44:35 946

原创 Ubuntu下搭建UEFI下PXE服务端(详细)总结

系统:Ubuntu 22.04平台:X86_64本文介绍如何在Ubuntu下搭建PXE服务端,主要包含HTTP、DHCP、TFTP等服务端的搭建,以及基于Ubuntu22.04镜像实现PXE安装文件的配置。

2024-03-21 09:32:00 868 2

原创 Windows下EDK2快速搭建(详细)过程总结附软件包地址

本文详细介绍本人在windows平台搭建EDK2编译环境的流程,方便读者快速搞定,少走弯路。

2024-01-28 14:58:38 1296

原创 Linux下基于AHCI controller模块实现SATA Platform驱动附代码详细流程

本文主要是针对ARM A55集成了AHSATA controller模块开发sata驱动,通过Platform的形式在linux识别到SSD,本文详细讲述整个开发过程,同时对SATA Platform驱动进行讲解。1、配置SATA Phy的初始化;2、打开SATA Platform相关编译开关;3、配置设备树;4、linux启动识盘。

2024-01-21 23:58:43 1121

原创 SATA驱动中FIS命令处理(详细)流程附代码和协议解析

本文主要讲述在SATA模块命令的处理、数据的传输和内存分布详细过程,同时讲述如何通过FIS用于Host和device之间信息传输。1、构造FIS命令;2、填充Command Table;3、填充Command Header;4、通知Host或Device处理命令;

2024-01-21 11:16:40 1284

原创 网络包IP首部(详细)解析附图快速掌握

本文主要讲解网络包IP首部各部分的作用。IP报头默认为20 byte,后面可自定义增加,具体报头长度IHL部分控制。版本:占4位,指IP协议的版本。首部长度:表示IP包首部长度,最短20字节,最长60字节。区分服务:8位,用于指明要求网络提供的服务,目前主要包括D、T、R等三种,分别代表延迟、吞吐量和可靠性要求。即使如此,依然没有真正使用。总长度:16位,包括了首部长度和数据长度,最长为65535个字节。标识:16位,数据报计数器,用于区分数据报的唯一标识符。

2024-01-18 23:37:12 989

原创 C语言中宏定义中#和##使用详解

本文主要讲解C语言中宏定义使用#和##的场景,通过实例方便大家快速掌握。

2024-01-18 22:59:11 542

原创 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 1564

原创 SATA信息传输FIS结构总结通过实例代码(快速)掌握(二)

FIS是一种用于Host和device之间信息传输的机制,每个FIS的格式都是固定的,并且对应唯一的ID。当双方都空闲时,都在持续发送 SYNC 原语,这种状态称为空闲状态(IDLE)。发送方想要发起 FIS 发送,它开始持续发送 X_RDY 原语。经过一段延迟后,接收方收到了 X_RDY (该延迟来自链路层、物理层的信号处理延迟),此时如果接收方准备好接收 FIS 了,就持续发送 R_RDY 原语。

2023-11-26 21:58:39 1466

原创 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 1179

原创 芯片设计中RTL级别总结

芯片设计级别简介行为级(Behavior Level):通过行为级算法描述数字系统。寄存器传输级(Register Transfer Level)RTL:在寄存器传输级,通过寄存器之间的数据传输进行电路功能设计, 例如有限状态机。门级(Gate level):数字系统按门级(AND,OR,NOT,NAND等等…)描述。通常不会进行门级设计,门级网表网表一般是通过逻辑综合的输出。

2023-10-29 18:43:25 1115

原创 Linux多核CPU启动内核调试(详细)总结

1、uboot编译;2、内核相关配置打开;3、内核相关模块驱动确认;4、内核编译;5、linux系统定制;

2023-10-29 18:25:07 975

原创 C语言内联汇编(详细)介绍附实例快速掌握

使用内联汇编主要目的是为了提高效率,同时还是为了实现 C 语言无法实现的部分。asm("汇编语句": 输出部分: 输入部分: 会被修改的部分);asmvolatile(“汇编语句”: 输出部分: 输入部分: 会被修改的部分);各部分使用“:”格开,汇编语句必不可少,其他三部分可选,如果使用了后面的部分,而前面部分为空,也需要用“:”格开,相应部分内容为空。第一部分是汇编语句,其中 “asm” 是内联汇编语句关键词。

2023-10-02 17:46:30 826

原创 AMBA总线APB、AHB、AXI(详细)总结附实例便于快速掌握

本文主要介绍APB、AHB和AXI总线的相关内容,同时对比三种总线的差异,附图和应用场景方便读者快速掌握。

2023-10-02 16:52:14 1658

原创 Centos系统常见配置(详细)总结

1、设置静态ip2、重启网络3、ssh登录时自动运行命令4、新增用户并创建家目录5、终端显示bash-4.2#6、更换yum源7、centos系统串口终端自动登陆8、系统启动通过rc.local自动执行脚本9、关闭防火墙10、设置samba11、设置打开终端快捷键12、搭建VNC服务端13、搭建samba服务端。

2023-09-17 10:01:53 688

原创 PCIe中断之MSI和MSI-X的区别(详细)总结附图文快速掌握

本文主要介绍MSI和MSI的基本概念和差异,通过图文的方式方便读者快速掌握,最后章节也简单介绍了INTx的基本概念。MSI(Message Signaled Interrupts)是一种通过在内存中写入信息来产生中断的方式,其中内存地址由设备驱动程序和硬件设备协商确定。MSI与传统的中断线不同,它不需要单独的中断线,而是通过PCI总线进行通信。

2023-08-19 17:41:50 4659

原创 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 2242

原创 SPI协议详细总结附实例图文讲解通信过程(快速掌握)

SPI(Serial Peripheral Interface,串行外设接口) 协议是一种高速高效率、全双工的通信总线,允许CPu与低速的外围设备之间进行同步串行数据的传输,主要是用同步的时钟信号对串行的数据同时进行发送和接收操作,从而实现全双工。常用于短距离通讯,主要是在嵌入式系统中。SPI接口在芯片内部只占用四根线,主要有两条数据线、一根片选线和一根时钟信号线。这四根线分别对应SPI协议传输时的四种信号,分别有主机输出信号MOSI、从机输入信号MISO、片选信号sS n以及输出的时钟信号SCK。

2023-06-20 07:50:55 10364 1

原创 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 1249 1

原创 PCIe热插拔机制(详细)总结-PCIe专题知识(五)

本文主要讲述PCIe热插拔机制,通过图形方式方便读者快速掌握。如果在PCIe设备不支持热插拔的条件下,在不断电的情况下插拔一块PCIe SSD时,很可能会对主板或PCIe插槽造成损毁。为了放置意外的发生,PCIe Spec设计了一种"No Surprise"热插拔机制,即,当用户要插拔PCIe设备时,必须先通知系统软件做好准备,然后通过指示灯告知用户热插拔的状态。PCIe总线的热插拔主要指的是PCIe卡设备的热插拔以及相关的实现机制等。

2023-05-10 00:02:57 6694

原创 PCIe物理层弹性缓存机制(详细)解析-PCIe专题知识(四)

本文主要介绍PCIe物理层弹性缓存机制用于同步时钟。PCIe物理层弹性缓存(Elastic Buffer,又称为CTC Buffer或者Synchronization Buffer)。其本质上是一种FIFO,主要用于解决跨时钟域问题。当然,PCIe的弹性缓存还用于补偿时钟误差(Compensate for the clock differences)。

2023-05-05 22:14:10 2168

原创 PCIe物理层链路训练和初始化(详细)总结附图文解析-PCIe专题知识(三)

本文主要介绍PCIe物理层链路训练和链路初始化的详细过程。物理层实现了链路训练(Link Training)和链路初始化(Link Initialization)的功能,这一般是通过链路训练状态机(Link Training and Status State Machine,LTSSM)来完成的主要流程为上电后两侧根据PCIe总线协议进入LTSSM流程;该过程是一套硬件自动化的流程,链路双方自动协商速率和宽度,调节发送和接收参数,从而达到最佳信号质量。1、初始状态,探测对方是否存在。

2023-05-04 23:41:40 6993

原创 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 7150 2

原创 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 3012

原创 PCIe物理层详细总结-PCIe专题知识(一)

本文主要对PCIe物理层的组成、功能进行详细的总结,通过图文的方式方便读者快速掌握。物理层是PCIe总线的最底层,将PCIe设备连接在一起。PCIe总线的物理电气特性决定了PCIe链路只能使用端到端的连接方式。PCIe总线的物理层为PCIe设备间的数据通信提供传送介质,为数据传送提供可靠的物理环境,发送端数据链路层(Data Link Layer)的DLLP和TLP报文通过物理层(Physical Layer)发送至接收端的物理层,再传送至接收端的数据链路层。

2023-05-01 08:01:34 5284 1

原创 Linux内核Kernel panic常见问题(详细)总结

本文主要总结linux系统触发Kernel panic的常见报错总结。Kernel panic它表示Linux kernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息,那就看是那种情况导致它panic了。1.hard panic(也就是Aieee信息输出)2.soft panic (也就是Oops信息输出)

2023-04-24 23:41:28 6225

原创 c语言函数指针、指针数组、二级指针、结构体、联合体、枚举实例解析(一文快速掌握)

本文主要讲解函数指针及用法,同时实例讲解结构体和枚举。函数指针是指向函数的指针变量。因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。//typedef可以使用stFunc_t去申明一个函数指针//成员申明一个函数指针对结构体进行赋值_CleanShutDownStateFuncs,//将最开始的指针数组传入(每个成员指向设置的函数 )

2023-02-25 22:47:47 642

原创 ARM全汇编指令(详细)整理附实例快速掌握

本文主要整理了arm常用的汇编指令,同时通过实例进一步讲述语句的用法。

2023-02-25 20:55:38 13163

原创 c语言attribute关键字参数(详细)总结附示例快速掌握

GNU C编译器增加了一个__attribute__ 关键字用来声明一个函数、变量或类型的特殊属性。申明这些属性主要用途就是指导编译程序进行特定方面的优化或代码检查。attribute 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。关键字__attribute__ 也可以对结构体(struct )或共用体(union )进行属性设置。

2023-01-19 23:31:03 7492

原创 c语言gcc编译常见报错及解决方法整理

本文主要是整理c程序编译过程的常见报错的解决方法,方便大家及时解决问题。^~~~定义一个数组 a[n],说明该数组有n个元素,那么这个数组中元素最大的下标是 n–1;而元素 a[i] 表示数组 a 中第 i+1 个元素,数组修改为如下表示即可。关于警告Warning:Implicit declaration of function “xxx” is invalid in C99!1.函数的声明放在头文件(H文件);2.函数定义在源文件(C文件);3.函数的名称是否一致(大小写要一致);

2023-01-19 18:20:50 5837

空空如也

空空如也

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

TA关注的人

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