自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PCIe——学习计划

学习计划第1周:基础知识和总览目标:了解计算机架构基础,总线系统概述以及 PCIe 的基础知识。内容:计算机体系结构基础总线系统概述PCIe 的发展历史和基本概念第2-3周:PCIe 体系结构目标:理解 PCIe 的分层模型及其拓扑结构。内容:PCIe 分层模型(物理层、数据链路层、事务层)PCIe 链路和拓扑结构第4-5周:物理层目标:掌握 PCIe 物理层的信号传输、电气特性和速率。内容:信号传输与编码电气特性Lane 和带宽PCIe 各版本速

2024-06-11 19:28:41 273 2

原创 PCIe学习——重点提纲

PCIe学习-重点提纲基础知识计算机架构基础总线系统概述PCI vs PCI-X vs PCIePCIe 概述PCIe 的发展历史PCIe 与其他总线的对比PCIe 的优势和应用场景PCIe 体系结构PCIe 分层模型物理层(Physical Layer)数据链路层(Data Link Layer)事务层(Transaction Layer)PCIe 链路(Lane)PCIe 拓扑结构(Point-to-Point, Switch, Root Compl

2024-06-11 19:26:42 528

原创 DMA是什么,在PCIe中DMA如何理解

广义的DMA和PCIe中的DMA在基本原理上是一致的,都是为了实现设备与内存之间的直接数据传输,减轻CPU的负担。然而,PCIe中的DMA更加专注于高性能应用,结合了PCIe总线的高带宽特性和IOMMU的地址映射功能,为现代高性能计算设备提供了高效的数据传输机制。

2024-06-04 11:28:19 694

原创 主机CPU访问PCIe设备内存空间和PCIe设备访问主机内存空间

虚拟地址(VA) -> 物理地址(PA):通过MMU和页表转换。物理地址(PA) -> PCIe地址:通过PCIe BARs映射。通过PCIe总线传输到设备。

2024-06-04 11:21:35 569 1

原创 字符集与字符编码

字符集:定义了可以使用的字符以及每个字符的唯一编号。字符编码:定义了如何将字符集中的字符转换为字节序列以便存储和传输。理解字符集和字符编码的区别和联系,对于正确处理文本数据、避免乱码和确保跨平台兼容性是至关重要的。

2024-06-03 10:36:54 682

原创 ABI是什么,由谁提供,写在什么规范里

这些规范确保了不同组件之间的二进制接口的一致性,使得在不同的编译器和操作系统上生成的二进制代码能够正确地交互和执行。促进不同编译器、操作系统和硬件平台之间的二进制兼容性。通过遵循统一的ABI规范,不同的软件模块(如库、驱动程序和应用程序)可以在相同的操作系统和硬件平台上无缝地协同工作,即使它们是由不同的开发者、使用不同编程语言或编译器生成的。开发者在编写、编译和链接应用程序时,需要遵循相应的ABI规范,以确保生成的二进制代码能够与目标平台的ABI兼容,从而实现正确的函数调用、内存访问和数据传递。

2024-02-08 14:28:20 643

原创 Cpu指令集

ARM架构是一种低功耗、高性能的指令集架构,主要应用于移动设备和嵌入式系统。Power架构是由IBM开发的一种指令集架构,主要应用于大型服务器和超级计算机。x86架构的代表性处理器包括英特尔的Core系列和AMD的Ryzen系列。它定义了CPU能够理解和执行的指令集合,包括指令的格式、操作码(Opcode)、寻址模式和操作数等。除了上述常见的指令集架构,还有一些其他的指令集架构,如SPARC架构(Oracle的处理器架构)、Itanium架构(Intel和HP合作开发的处理器架构)等。

2024-02-08 14:26:18 518

原创 MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么

其中,LLVM编译器(clang)是LLVM项目的一个重要组成部分,它作为一个高质量、高性能的C、C++和Objective-C编译器前端,被广泛应用于各种开发工具和项目中。它支持多种C++标准,包括C++98、C++03、C++11、C++14、C++17和C++20,并提供了一系列的编译选项和优化选项,以满足开发者的需求。,其中包括一系列基本的系统工具和实用程序,如文本编辑器(Emacs)、编译器套件(GCC)、调试器(GDB)、构建工具(Make)、shell(Bash)等。

2024-02-08 14:08:58 2092

原创 UEFI HII驱动开发——HII资源绑定的方法

方法一 调用EFI_HII_DATABASE_PROTOCOL提供的NewPackageList()进行绑定在模块的inf文件中需要定义UEFI_HII_RESOURCE_SECTION = TRUE该方法不能满足模块中提供多个form的功能方法二 调用HiiLib中的HiiAddPackages接口进行绑定inf文件中不需要定义UEFI_HII_RESOURCE_SECTION = TRUE在源文件中需要声明extern UINT8 ModuleStrings[] 和 extern UIN

2023-06-19 15:08:39 712

原创 搭建linux环境uefi单元测试时遇到的问题

【代码】搭建linux环境uefi单元测试时遇到的问题。

2023-05-22 20:37:31 211

原创 声明、定义和extern

我们知道在预编译的时候会展开它所包含的头文件的内容。所以当多个文件都#include了这个.h文件,会导致.h中定义的全局变量多次定义(重复定义)编译器可能会报错。编译器会给该变量分配内存,并且还可以将内容初始化为某个值。

2023-02-07 09:22:09 333

原创 gcc编译/链接动态/静态库

I /home/hello/include表示将/home/hello/include目录作为第一个寻找头文件的目录,寻找的顺序是:/home/hello/include–>/usr/include–>/usr/local/include。-L /home/hello/lib表示将/home/hello/lib目录作为第一个寻找库文件的目录,寻找的顺序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib。问题2:如果同时有动态库和静态库如何链接静态库?

2023-02-07 09:20:25 832

原创 cmake和make

对于一个大工程编写makefile就很复杂,cmake工具是一个可以读入所有源文件自动生成makefile文件的工具,它可以输出各种各样的makefile或者project文件。同样cmake工具也需要有一个规则文件cmakelist文件,这个没有捷径可走需要脚踏实地的编写。源文件太多一个一个的编译特别麻烦。make工具就是一个批处理工具,是一个自动化编译工具,可以使用一条指令完成编译,但是需要写一个规则文件,make依据规则来进行批处理,这个文件就是makefile。

2023-02-07 09:16:34 82

原创 什么是Socket

套接字”。是计算机之间进行通信的一种约定或方式。可以理解为socket也是一种特殊的文件,一些socket函数是对其进行操作(读写、打开、关闭)Socket()函数返回的是一个整型的Socket描述符,随后的建立、数据传输等操作都是通过Socket实现的。

2023-02-07 09:13:13 1124

原创 UEFI调试环境搭建

步骤1中添加的内容会被打印出来,同时去debug.log中查看HelloWorld.efi加载的位置,后面会用到。以上是一个UEFI application的调试例子,驱动和应用的调试一样,都可以用上述的方法进行调试。首先将HelloWorl添加到OvmfPkg中,方便一起编译。主要是为了辅助调试,比如确定符号是否正确加载、程序是否正确执行等。接下来可以加载符号,设定断点,并将GDB挂载到QEMU上准备调试。在主程序UefiMain中添加获取程序入口地址的日志。计算完成后可以卸载GDB加载的efi文件。

2022-12-19 15:35:46 742

原创 linux 更改/home 挂载点

我的home目录默认挂载到了根目录/下,这就很难受。想要将/home单独挂载一块盘。上面设置完成后重启系统,/home挂载到了/dev/sdb1。将挂载在/分区下的/home 迁移到新盘中。

2022-09-11 11:15:20 4212

原创 Doxygen生成API接口说明文档配置

Doxygen是API文档生成工具,可以根据代码注释生成文档的工具。支持HTML、CHM、PDF等格式。主要支持C语言、Python语言,其它C语系语言也支持(如C++、Java、C#等)。本文档描述的内容包括:Doxygen工具下载安装、基本使用和配置、哪些注释支持Doxygen识别转换、Doxygen工具生成的LaTex文件转PDF的方法、Doxygen工具生成chm的方法等。1 下载安装软件Doxygen支持LINUX、Windows、Mac OSDoxygen下载路径:https://w.

2022-04-15 10:27:19 769 1

原创 vscode常用插件-c/c++开发

2022-03-20 21:43:59 1471

原创 终于找到了docker里面没有办法使用systemctl的解决方法了

之前看到的方案都是说在启动容器的时候添加–privileged=true就可以了。试了n遍,问题还是没有解决,奔溃了一段时间,继续找答案。发现了一个说法是:据说在 Linux Docker 中无法使用 systemd(systemctl) 相关命令的原因是 0 号进程不是 init,而是其他例如 /bin/bash ,所以导致缺少相关文件无法运行。具体的解决方案是通过 init 在后台运行一个 docker容器,然后再通过 exec 的方式进入到容器中,不过需要注意的是不同的系统 init 程序的路径

2022-01-25 16:44:51 11247 4

原创 TCP拥塞控制

什么是拥塞控制拥塞控制的方法

2022-01-04 17:47:42 1324

原创 TCP流量控制

为什么要有流量控制流量控制的方法什么是拥塞控制拥塞控制的方法

2021-12-31 19:04:09 1294

原创 TCP滑动窗口

为什么会有滑动窗口什么是滑动窗口

2021-12-28 16:23:21 1396

原创 tcpdump和wireshark抓包实践

tcpdump和wireshark有什么区别?tcpdump支持命令行模式,常用在linux下的抓包和分析wireshark除了抓包外还提供了可视化的查看分析界面。常用于windows下。可以在linux下使用tcpdump抓包后,拖出来使用wireshark进行分析。tcpdump抓包tcpdump使用----选项类tcpdump使用----过滤表达式抓包实战----例子1:场景:使用tcpdump抓取分析ping命令的网络包操作步骤:一个终端打开tcpdump抓包#-i

2021-12-22 18:04:20 840

原创 TCP重传机制

重传机制在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回⼀个确认应答消息,表示已收到消息。但在错综复杂的⽹络,并不⼀定能顺利能正常的数据传输,万⼀数据在传输过程中丢失了呢?所以 TCP 针对数据包丢失的情况,会⽤重传机制解决。什么是超时重传重传机制的其中⼀个⽅式,就是在发送数据时,设定⼀个定时器,当超过指定的时间后,没有收到对⽅的 ACK 确认应答报⽂,就会重发该数据,也就是我们常说的超时重传。TCP会在以下两种情况下进行数据的重传:数据包丢失应答包丢失RTT 和RTO

2021-12-21 16:46:56 847

原创 TCP的重传机制、滑动窗口、流量控制、拥塞控制

2021-12-21 15:47:11 459

原创 TCP连接为什么是三次握手

为什么是三次,不是两次、四次?三次握手可以阻止重复历史连接的初始化三次握手可以完成客户端与服务端的初始序列号同步三次握手可以避免资源浪费1. 如何阻止重复历史连接的初始化实际的网路情况往往比较复杂,经常会有阻塞情况的发送。客户端发送了一个syn请求,然后阻塞了很长时间,客户端已经判定为过期了,然后发送了新的syn请求,但是服务端先收到了之前阻塞的请求,发送给客户端ack消息。此时客户端需要丢弃过期的连接,会发送RST报文到服务端,服务端同时丢弃旧的连接。当新的连接到达时,回复新的连接的ack消

2021-12-20 16:38:33 214

原创 UDP的TCP的区别

一、 UDP基础UDP不提供复杂的控制协议,依靠IP协议提供无连接的通信服务。UDP的头部非常简单只有8个字节:源端口和目标端口:主要是告诉UDP协议要把数据发给哪个进程包长度:该字段保存了UDP首部长度和数据长度总和校验和:是为了提供可靠的UDP 首部和数据而设计的二、 TCP和UDP的区别:1. 连接TCP是面向连接的传输层协议,即传输数据前需要先建立连接。UDP是面向无连接的传输层协议,即刻传输数据。2. 服务对象TCP是一对一的两点服务,即一条连接只有两个端点。U

2021-12-19 17:17:18 383

原创 TCP四元组

TCP四元组可以唯一确定一个连接,四元组包括如下:源地址源端口目的地址目的端口源地址和目的地址字段都是32位,在IP头部,目的是通过IP协议发送报文给对端主机。源端口和目的端口字段也是32位,在TCP的头部,目的是告诉TCP协议应该把报文发送给哪个进程。...

2021-12-17 11:09:47 3469 2

原创 SMB CIFS NFS SAMBA NAS SAN

SMB/CIFS/NFS/SAMBA/NAS/SANSMB是由microsoft在SMB的基础上发展,扩展到Internet上的协议。他和具体的OS无关,在unix上安装samba后羿打野可使用CIFS。它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。NFSNetwork File System 网络文件系统。是一种分布式文件系统协议,力求客户端主机可以访问服务器

2021-11-08 16:11:12 555

原创 GFS/HDFS/TFS/FastDFS/Ceph/GlusterF

GFS/HDFS/TFS/FastDFS/Ceph/GlusterFS/…GFSTFSTFS(Taobao File System)是由淘宝开发的一个分布式文件系统,其内部经过特殊的优化处理,适用于海量的小文件存储,目前已经对外开源;TFS采用自有的文件系统格式存储,因此需要专用的API接口去访问,目前官方提供的客户端版本有:C++/JAVA/PHP。FastDFSFastDFS是国人开发的一款分布式文件系统,目前社区比较活跃。如上图所示系统中存在三种节点:Client、Tracker、

2021-11-08 16:08:26 1783

原创 docker常用操作和命令

一、启动docker为镜像创建一个容器并运行为centos-new这个镜像创建一个容器并进入容器。将本地目录/home/wangsiyao/code/work/挂载到容器目录/soft。载入容器后启动bash。$ docker run -it -v /home/wangsiyao/code/work/:/soft centos:latest /bin/bash-it 创建并启动容器进入到容器命令行-v 进行宿主机目录与容器目录挂载/路径映射/bin/bash 表示载入容器后运行bash

2021-10-28 11:31:01 159

原创 TCP基础

TCP头部序列号: 在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传送给接收端主机,每发送一次数据,就累加一次该数据字节数的大小。用来解决网络包乱序问题。确认应答号: 指下一次期望收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序列号以前的数据都已经被正常接收。用来解决不丢包的问题。控制位:ACK: 该位为1时,确认应答的字段变为有效,TCP规定处理最初建立连接时的SYN包之外该位必须设置为1。RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。SYN:该

2021-09-14 20:32:34 406

原创 TCP三次握手和四次挥手总结

1. TCP协议传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。2. TCP协议的交互过程3. 关于TCP协议的一些常见问题3.1 为什么连接的时候是三次握手,断链的时候需要四次挥手?很多人是不是这样想?为什么服务端的ACK报文和F

2021-09-13 22:14:45 156

原创 预编译、编译、汇编、链接

0 前提0.1 4个过程预处理(preprocessing) ----------------- gcc -E编译(compilation) ------------------ gcc -S汇编(assembly) -------------------- as连接(linking) --------------------- ld0.2 gcc指令-o:指定生成的输出文件;-E:仅执行编译预处理;-S:将C代码转换为汇编代码-wall:显示警告信息;-c:仅执行编译操作,不进行链

2021-09-07 20:17:10 1608

原创 字节序、大端存储、小端存储

大端存储现有4字节存储的整数 0x0A0B0C0D,内存中存放方式如下:最高位字节是0x0A存储在最低的内存地址处。下一个字节0x0B存储于随后的地址。类似于十六进制字节从左到右的阅读顺序。小端存储与大端存储正好相反。最高字节存储在高的内存地址处。同样的现有4字节存储的整数 0x0A0B0C0D,内存中存放方式如下:大小端的判断方式例一:#include <stdio.h>#include <stdint.h>int main(){ uint1

2021-09-06 13:52:32 624

原创 GDB查看指定内存地址的内容——指令x

以下是gdb help中的解释Examine memory: x/FMT ADDRESS.ADDRESS is an expression for the memory address to examine.FMT is a repeat count followed by a format letter and a size letter.Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary)

2021-09-06 11:38:15 3726

原创 vscode--git代码管理

前提安装vscode安装插件GitHub Pull Requests and Issues使用方法入口git addgit commitgit

2021-09-04 00:11:54 82

原创 extern “C“ 的作用

1. 为什么会有extern Cextern C 解决了C和C++不能相互调用的问题。通过查看C和C++编译生成的动态/静态库。可以看出其翻译的规则不一样,所以在跨语言的函数调用的时候,不能成功的找到想要调用的函数名称。所以我们要通过一种方式,让他们使用同一种翻译规则,这样就能找到想要的函数了。于是出现了extern C。2. 该怎么样使用extern “C”通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明#include <stdint.h>

2021-09-03 23:45:36 105

原创 vscode配置-在windows配置linux开发和编译环境

1. 安装VS code和Ubuntu WSL安装VS Code:https://code.visualstudio.com/download 下载后按提示安装即可安装Ubuntu 20.04 LTS可以从微软应用商店获取。直接在windows应用商店里面搜索ubuntu 20.04 LTS安装。安装完首次打开会有一个错误提示:The WSL optional component is not enabled. Please enable it and try again.See https

2021-08-22 23:03:52 12903 2

原创 C基础-表达式求值

http://blog.timd.cn/evaluation-order/

2021-08-19 21:29:08 231 1

空空如也

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

TA关注的人

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