- 博客(1244)
- 资源 (46)
- 收藏
- 关注
原创 Makefile语法介绍
command......target 也就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。prerequisites 就是,要生成那个 target 所需要的文件或是目标。command 也就是 make 需要执行的命令。(任意的 Shell 命令)如果 Makefile 中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以“define”
2025-07-01 14:14:45
762
原创 官方 Linker Scripts 语法和规则解析(3)
当您将应用程序链接到具有版本化符号的共享库时,应用程序本身知道它需要每个符号的哪个版本,还知道它需要链接到的每个共享库中的哪个版本节点。另外,链接器接受后缀 ‘h’ 或 ‘H’ 表示十六进制,‘o’ 或 ‘O’ 表示八进制,‘b’ 或 ‘B’ 表示二进制,‘d’ 或 ‘D’ 表示十进制。例如,以下脚本片段演示如何将全局符号 ‘begin’ 设置为 ‘.text’ 段中的第一个位置,但如果名为 ‘begin’ 的符号已经存在,则其值将被保留。链接器不会为了把段更好的放入内存区域而打乱段的顺序。
2025-06-27 17:22:29
613
原创 官方 Linker Scripts 语法和规则解析(2)
在基于 DOS 的文件系统上,链接器会假定一个单字跟着一个冒号是一个特殊的驱动符,因此 ‘c:myfile.o’ 是一个文件的特殊使用,而不是关联库 ‘c’ 的 ‘myfile.o’ 文件。在只支持有限段数目的格式中,例如 a.out ,名称必须是该格式所支持的名称之一(例如 a.out ,只允许 ‘.text’,‘.data’,‘.bss’)。所有段的载入地址都被排布,使它们在内存中从整个 ‘OVERLAY’ 的载入地址开始都是连续的(就像普通的段定义,载入地址是可选的,缺省的就是开始地址;
2025-06-27 17:21:35
720
原创 官方 Linker Scripts 语法和规则解析(1)
符号可以是定义的也可以是未定义的。在插入前,因为 ‘-T’ 的脚本在默认脚本之前被解析,在 ‘-T’ 脚本中的声明会先于默认内部脚本的声明而执行。在此示例中, ‘.text’ 和 ‘.data’ 段的指定地址可以满足任何对齐方式约束,但链接器可能必须在 ‘.data’ 和 ‘.bss’ 段之间创建一个小的间隙。在特定的程序类型中,比如使用覆盖技术的嵌入式系统,当一个段被加载到内存中,另一个段不会被加载。因此,当您在源代码中使用链接器脚本定义的符号时,您应该始终获取该符号的地址,并且永远不要尝试使用它的值。
2025-06-27 17:19:41
844
转载 Linux 链接器 ld 的工作原理与应用实践
链接器是软件开发过程中的一个重要工具,它负责将编译器生成的多个目标文件和库文件合并成一个单一的可执行程序。在 Linux 系统中,ld 是常用的链接器,它执行的任务包括符号解析和重定位。符号解析是指链接器解决目标文件中引用的符号(如函数和变量)与定义这些符号的文件之间的映射关系。重定位则是指调整代码中的地址引用,使之适应最终加载到内存中的位置。通过这些操作,链接器确保程序中的各个部分能够正确地相互引用,并能够在运行时正确加载。在本节中,我们将简要介绍链接器的基本概念和 ld 链接器的主要功能。
2025-06-25 16:13:33
73
原创 PCIe Switch 问题点
全球PCIe交换芯片(PCIe Switch)核心厂商包括Broadcom、Microchip和Texas Instruments等,前三大厂商占有全球大约80%的份额。产品类型而言,PCIe 3.0是最大的细分,占有大约47%的份额。就下游来说,企业级是最大的下游领域,占有约45%的份额。青芯说,国内现在他们的 PCIe4 Switch 用的最多的是 Storage RAID 卡(下行多个x4,上行一般是x8或者x16),和 GPU的一卡双芯(上行X16,两个下行X16)
2025-05-16 18:43:11
1003
原创 Gen5 应用实例
SSw 模式下,两个 PCIe 交换机之间的链路可以连接两个交换矩阵端口,所有 TLP 都通过目标 ID 路由到这两个端口。全局 ID 的构成:GID 由 {domain[7:0],ID[15:0]} 组成,其中 ID 值是一个 PCIe 标准 ID,由 {bus[7:0], device[5:0], 和 function[2:0]} 组成。此外,光纤链路可以在对等端点(一个在 A0 上,一个在 A1 上)之间提供性能更高的路径(更高的吞吐量和更低的延迟),而不是在两个根联合体之间使用连接(图中虚线)。
2025-05-16 18:31:16
975
原创 PCIeSwitch 学习
一文读懂什么是PCIe SwitchPCIe Switch是一种硬件设备,提供扩展或聚合能力,并允许更多的设备连接到一个PCle端口。连接多个设备:PCIe switch允许多个设备通过单个PCIe总线连接到主机系统,从而扩展系统的连接性。数据交换:PCIe switch可以在多个设备之间传输数据,允许设备之间直接通信而无需通过主机处理器。动态分配:支持动态分配带宽和资源,根据需要调整设备之间的通信速率和优先级。:支持NTB技术,允许两个或多个系统之间直接通信,提高数据传输效率。
2025-05-16 18:25:29
1907
原创 SwitchtecPSX_Gen4
Switchtec PSX Gen4 可编程 PCIe 交换机系列包含可编程和高可靠性的交换机,支持多达 100 条通道、52 个端口、26 个虚拟交换机分区、48 个非透明桥(NTB)、每个端口的硬件和意外插拔控制器、高级错误隔离、全面的诊断和调试功能、广泛的 I/O 接口以及集成的 MIPS 处理器。PSX 系列的典型应用包括 PCIe SSD 机箱、闪存阵列、多主机架构、高密度服务器、刀片服务器、共享存储/计算以及需要定制化、高可靠性 PCIe 交换的应用。
2025-05-13 11:30:49
843
原创 85657_Gen5
Broadcom® BCM85657 是一款 16 通道、低功耗、低延迟、对称的 PCIe Gen5 和 CXL 集成 MAC 和 PHY retimer。该设备可在 32 GT/s 时在根复合体(RC)和端点(EP)之间扩展超过 40 dB 的损耗。每个通道支持多种数据速率,包括 Gen5(32G)、Gen4(16G)、Gen3(8G)、Gen2(4G)和 Gen1(2.5G)。一个 16 通道链路(1×16)两个 8 通道链路(2×8)四个 4 通道链路(4×4)
2025-05-13 10:03:49
934
原创 PEX88000_Gen4
这些交换机专为混合硬件/软件平台设计,提供高可配置性(主机数量、下游端口以及将这些端口分配给插槽的方式)。配置完成后,数据直接在连接的设备之间流动,硬件支持实现非阻塞、线速性能,并具备I/O共享和DMA等功能。该解决方案提供了一种创新的方法来设置和控制PEX88000交换机,配置路由表,处理错误、热插拔事件,并通过嵌入式CPU或外部CPU启用解决方案,而不会影响通过交换机的数据流。
2025-05-13 09:58:29
812
原创 PEX_8796_Gen3
在多主机模式下,PEX8796最多可配置四个上游主机端口,每个端口都有自己的专用下游端口。在故障转移模式下,如果主机发生故障,指定的故障转移主机将禁用连接到故障主机的上游端口,并将该主机的下游端口编程到自己的域中。图4b显示了主机1故障后主机2接管了主机1的所有端点。发送到不同 CPU 的数据包将发送到不同的(用户分配的)PEX8796 上行端口,允许更好的排队和负载平衡能力,从而实现更⾼的性能。在多主机模式下,可以选择最多四个端口作为主机/上游端口,并为每个主机分配所需数量的下游端口。
2025-05-13 09:43:15
1152
原创 威科夫操盘手法笔记
牛市终止于 需求减弱 和 供应扩大 。价格滞涨是因为市场上供应增加对价格产生压力,所以买方不用抬价,平价就能买到股票,这就导致价格滞涨。
2025-05-03 10:15:43
1196
原创 中断控制器及处理
是Linux中断子系统应对硬件多样性和复杂拓扑的核心机制,通过类型标签实现中断域的精准标识与隔离,保障了中断处理的灵活性与高效性。其设计体现了内核对可扩展性和硬件抽象的深刻考量。// 全局链表节点// 域名称// 回调函数集// 私有数据(如中断控制器状态)// 对应设备树节点// 最大 HW IRQ 号// 基数树根节点(用于树形映射)// 线性映射大小// 线性映射表(直接索引 HW IRQ)关键成员解析ops:指向,包含映射、解除映射、设备树解析等回调函数。例如:map()
2025-04-24 10:53:39
924
原创 PCIe 中断
PCIe(Peripheral Component Interconnect Express)中断是硬件设备与CPU之间通信的核心机制,用于在数据传输完成或事件触发时通知CPU进行处理。其设计目标包括提升实时性、降低延迟以及支持高吞吐量场景。PCIe中断机制经历了从传统INTx到现代MSI/MSI-X的演进,逐步解决了共享中断、扩展性差等问题。
2025-04-21 11:20:48
995
原创 经济指标学习(二)
基本定义经营现金流是企业通过日常运营(如销售商品、提供劳务、支付供应商货款等)产生的现金净流入,扣除与长期投资、证券交易相关的成本后的剩余资金。公式国际会计准则定义经营现金流 = 经营产生的现金流 - 息税 - 投资收益 - 股息支付其中,经营产生的现金流 = 从客户收到的现金 - 向供应商支付的现金。简化计算公式经营现金流 = 营业收入 - 付现成本 - 所得税或经营现金流 = (营业收入 - 付现成本) × (1 - 税率) + 折旧 × 税率。关键数据来源现金流入。
2025-04-18 18:29:40
1017
原创 经济指标学习(一)
营业成本(Cost of Goods Sold, COGS)是企业在一定时期内为生产和销售商品、提供劳务所发生的直接成本,需与营业收入配比。直接性:与生产或服务直接相关,如原材料、人工等。可变性:随产量或业务量变化,如制造业中原材料成本随产量增加而上升。可追溯性:可明确归属到具体产品或服务,如某批次产品的原材料消耗。营业成本是企业核心运营活动的直接成本体现,其准确核算与有效控制对利润分析和战略决策至关重要。不同行业的成本结构差异显著,需结合业务特点针对性管理。营业总成本。
2025-04-16 17:03:33
1167
原创 PCIe 学习笔记(一)
TS1和TS2是PCIe物理层链路训练的核心机制,通过有序集的交互实现参数协商与状态控制。其设计兼顾了灵活性与兼容性,支持从Gen1到Gen6的速率演进,并通过Modified TS优化了高速链路的均衡能力。
2025-04-15 16:01:49
987
原创 xHCI 上 USB 读写分析
函数用来处理发送给 RootHub 的控制传输。其通过 MMIO 直接获取相关的信息,如此处的设备描述符。USB 可以进行批量传输、中断传输、实时传输、控制传输。将URB提交给USB核心,后者根据URB的端点类型和设备地址路由请求。对于外接的 USB 设备(如 U 盘)的设备描述符获取,则走。其初始化两个有优先级的工作队列,工作队列执行函数为。函数来添加 HCD ,该函数中有如下代码来初始化工作队列。,该函数实现了成功发送完 URB 后的清理及通知工作。函数来对 URB 清理,同时通知。
2025-04-10 18:24:57
1299
原创 DMA 概念与讲解
但是,您可以再次将整个过程视为“从设备请求中收到 32 个字节的响应”。,理论上可以直接访问 ZONE_NORMAL 的物理内存(如 0x80000000 ~ 0x7FFFFFFFFF)。的关键技术,其核心目标是通过中间缓冲区实现数据的安全传输。(4GB),高端设备(如 NVMe SSD、GPU)可能支持。老旧设备(如 ISA 总线设备)的 DMA 控制器仅支持。但实际可用范围受限于设备硬件、控制器和操作系统的实现。PCIe 的 DMA 支持的内存寻址范围取决于。TLP 遍历层次结构。
2025-04-07 18:39:38
1402
原创 IO 端口与 IO 内存
IO端口:当寄存器或内存位于IO空间时,称为IO端口。一般寄存器也俗称I/O端口,或者说I/O ports,这个I/O端口可以被映射在Memory Space,也可以被映射在I/O Space。IO内存:当寄存器或内存位于内存空间时,称为IO内存。
2025-04-02 18:17:54
444
原创 Ubuntu 下 systemd 介绍
以下是systemd用途 :存放由软件包安装的systemd单元文件,包括各种服务(.service)、目标(.target)、挂载(.mount)等单元文件。特点 :该目录下的配置文件是由软件包管理器(如 apt、rpm 等)安装软件时自动放置的,通常不需要用户手动修改。它为系统提供了各种预定义的服务和功能配置。用途 :存放系统运行时动态生成的单元文件。这些文件通常是在系统运行过程中,由各种服务或进程根据需要创建的。
2025-02-17 17:10:59
1452
原创 制作Ubuntu根文件
qemu-user-static 是一个用于在 x86 主机上运行 ARM 或其他非 x86 操作系统的工具。它是一个静态版本的 QEMU,因此它可以直接从磁盘运行,而无需安装 QEMU 或任何其他软件.PS: LightDM 和 GDM 都是 Linux 系统的显示管理器,负责显示登录界面,并允许用户登录系统。安装它用于在PC主机上运行下载下来的UBUNTU镜像, 方便修改镜像的内容。最终生成的镜像文件:linuxroot.img。PC 上替换源好像有些问题,也许源不对。
2025-02-15 11:54:08
881
原创 QEMU 通过网络实现共享文件
在启动 QEMU 时,使用 -netdev user 和 -device virtio-net 参数来配置 NAT 网络。为了在虚拟机重启后自动挂载共享文件夹,可以将挂载命令添加到 /etc/fstab 文件中。选项用于指定共享目录的路径、安全模型以及挂载点等参数。是一种高效且灵活的文件共享方式,它基于 9p 文件系统协议。如果能够成功 ping 通,说明虚拟机已经可以访问外网。虚拟机启动后,QEMU 会自动为虚拟机分配一个。将需要共享的文件放入此目录中。
2025-02-14 18:01:22
1204
原创 Linux 文件系统挂载
虚拟根文件系统中没有/init在initrd阶段,如果虚拟根文件系统中没有/init文件,则会执行函数来挂载真实根文件系统。为了识别根文件系统所在的介质(如 SD、SCSI 等),内核会通过函数加载相关的介质驱动。这些驱动程序确保内核能够正确识别和访问根文件系统所在的设备。虚拟根文件系统中有/init在initrd阶段,如果虚拟根文件系统中有/init文件,则不执行函数来挂载真实根文件系统,真实根文件系统挂载将在/init脚本中进行。
2025-02-14 13:58:59
877
原创 Linux 下注册分析(4)
用于创建设备并在 sysfs 中注册指向该设备应该注册到的结构类的指针。这个函数可以被 char 设备类使用。在 Linux 系统中,是一个非常重要的概念。它是 Linux 内核中用来管理设备驱动程序的一种机制,通过对设备进行分类注册,实现设备间的协作和管理。在 Linux 系统中,设备驱动程序是连接硬件设备和操作系统内核的桥梁,而 class_register 机制可以帮助内核更好地管理这些设备驱动程序,并且提供一种灵活的方式来处理设备的注册和注销。
2025-01-24 17:39:07
1144
原创 Linux 下注册分析(3)
用于设备的注册,即将一个设备实例注册到设备模型中,使得系统能够识别和管理该设备。该函数通常由设备驱动的初始化函数调用,用于将设备的相关信息注册到设备模型中,包括设备的名称、设备的操作方法、设备的资源等。设备注册后,系统可以通过设备名称或设备号来访问和操作该设备。
2025-01-24 17:08:44
788
原创 Linux 下注册分析(2)
Linux 设备树Linux 下注册分析(1) 首先通过实例来看 bus/class/device/driver 的关系。下图绘制的是 qemu 启动 ARM64 后,sysfs 中 platform 总线下部分目录和文件的关系。框图说明:总结: 添加的 device 会在 /sys/devices 下生成子目录。注册的 driver 会在 /sys/bus 所属的总线目录(如 platform)下的 drivers 生成子目录。 注册的 class 会在 /sys/class
2025-01-23 19:12:27
918
原创 Linux 下注册分析(1)
用于驱动的注册,即将一个驱动实例注册到驱动模型中,使得系统能够识别和加载该驱动。该函数通常由驱动的初始化函数调用,用于将驱动的相关信息注册到驱动模型中,包括驱动的名称、驱动的操作方法、驱动支持的设备类型等。驱动注册后,系统可以根据设备类型来匹配并加载对应的驱动,从而实现设备的自动识别和驱动加载。驱动程序的探测函数(probe)将在设备与驱动程序匹配时调用,以便进行设备的初始化。移除函数(remove)将在设备从系统中移除时调用,以进行相关的清理操作。
2025-01-22 12:39:42
1213
原创 Linux 设备树
Linux 知识(2) 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等,如下图所示: 在以前的内核中,还没有采用设备树,内核源码中有大量的arch/arm/mach-xxx和arch/arm/plat-xxx文件夹,用于存储不同平台的板级信息,
2025-01-21 18:42:41
827
原创 树莓派 4B 指南
树莓派,(英语:Raspberry Pi,简写为RPi,别名为RasPi / RPI) [1]是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布,用户可以用上运行Windows的树莓派。
2025-01-15 15:07:02
1432
原创 Linux 工作队列
可以使用动态分配的也可以使用静态方式定义,最后再调用来初始化 work ,其次是衍生的一些其他接口,大多是标志位的不同,其次是delay_work这才是中断低半部常用的接口。
2025-01-09 17:03:31
840
原创 SCSI 简述
SCSI 协议主要是在主机和存储设备之间传送命令、状态和块数据。操作系统对外部设备(如磁盘、磁带、光存储、打印机和扫描仪)的I/O操作,可以通过SCSI协议来实现,一般情况下SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。因为SCSI协议层位于操作系统和外部资源之间,它具有不同的功能组件。例如,应用程序一般将数据作为文件或者记录来访问。尽管数据最终都将在磁盘或者磁带介质上以数据块的方式存放,但是文件的检索需要一系列功能将未加工的块数据装配成应用程序能够操作的连续文件。
2025-01-09 10:04:28
486
原创 Linux 知识(2)
Linux中 /boot 目录介绍Linux中/boot目录当前 Linux 系统的 kernel 配置文件,可以使用下面指令查看。initrd.img-4.14.0-kali3-amd64(cpio格式)initrd 全名 initial ram disk,启动系统所需加载的虚拟磁盘。它是 vmlinuz 的映像文件。linux 的正式内核。内核符号映射表,顾名思义就是将内核中的符号(也就是内核中的函数)和它的地址能联系起来的一个列表。grub引导加载程序相关的文件。
2025-01-06 11:00:41
1091
原创 Linux 内核调试
如果你需要在系统启动时自动加载特定的内核模块,你可以编辑/etc/modules-load.d目录下的配置文件或者在/etc/modules文件中直接添加模块名。自动加载驱动程序通常意味着当某些事件发生时,系统会自动加载相应的内核模块。modprobe基于内核配置中的依赖关系和模块参数来决定是否自动加载模块。默认的内核编译命令会编译使能的模块,但生成的ko文件分散在各个文件夹内可在编译时传入参数。在系统下次启动时,这些模块将会自动通过modprobe或insmod加载。
2024-12-31 14:32:34
666
Android开发艺术探索随书源码之PinExpandableListView
2016-08-30
Android内核剖析
2016-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人