- 博客(1228)
- 资源 (46)
- 收藏
- 关注
原创 威科夫操盘手法笔记
牛市终止于 需求减弱 和 供应扩大 。价格滞涨是因为市场上供应增加对价格产生压力,所以买方不用抬价,平价就能买到股票,这就导致价格滞涨。
2025-05-03 10:15:43
731
原创 中断控制器及处理
是Linux中断子系统应对硬件多样性和复杂拓扑的核心机制,通过类型标签实现中断域的精准标识与隔离,保障了中断处理的灵活性与高效性。其设计体现了内核对可扩展性和硬件抽象的深刻考量。// 全局链表节点// 域名称// 回调函数集// 私有数据(如中断控制器状态)// 对应设备树节点// 最大 HW IRQ 号// 基数树根节点(用于树形映射)// 线性映射大小// 线性映射表(直接索引 HW IRQ)关键成员解析ops:指向,包含映射、解除映射、设备树解析等回调函数。例如:map()
2025-04-24 10:53:39
778
原创 PCIe 中断
PCIe(Peripheral Component Interconnect Express)中断是硬件设备与CPU之间通信的核心机制,用于在数据传输完成或事件触发时通知CPU进行处理。其设计目标包括提升实时性、降低延迟以及支持高吞吐量场景。PCIe中断机制经历了从传统INTx到现代MSI/MSI-X的演进,逐步解决了共享中断、扩展性差等问题。
2025-04-21 11:20:48
918
原创 经济指标学习(二)
基本定义经营现金流是企业通过日常运营(如销售商品、提供劳务、支付供应商货款等)产生的现金净流入,扣除与长期投资、证券交易相关的成本后的剩余资金。公式国际会计准则定义经营现金流 = 经营产生的现金流 - 息税 - 投资收益 - 股息支付其中,经营产生的现金流 = 从客户收到的现金 - 向供应商支付的现金。简化计算公式经营现金流 = 营业收入 - 付现成本 - 所得税或经营现金流 = (营业收入 - 付现成本) × (1 - 税率) + 折旧 × 税率。关键数据来源现金流入。
2025-04-18 18:29:40
762
原创 经济指标学习(一)
营业成本(Cost of Goods Sold, COGS)是企业在一定时期内为生产和销售商品、提供劳务所发生的直接成本,需与营业收入配比。直接性:与生产或服务直接相关,如原材料、人工等。可变性:随产量或业务量变化,如制造业中原材料成本随产量增加而上升。可追溯性:可明确归属到具体产品或服务,如某批次产品的原材料消耗。营业成本是企业核心运营活动的直接成本体现,其准确核算与有效控制对利润分析和战略决策至关重要。不同行业的成本结构差异显著,需结合业务特点针对性管理。营业总成本。
2025-04-16 17:03:33
874
原创 PCIe 学习笔记(一)
TS1和TS2是PCIe物理层链路训练的核心机制,通过有序集的交互实现参数协商与状态控制。其设计兼顾了灵活性与兼容性,支持从Gen1到Gen6的速率演进,并通过Modified TS优化了高速链路的均衡能力。
2025-04-15 16:01:49
808
原创 xHCI 上 USB 读写分析
函数用来处理发送给 RootHub 的控制传输。其通过 MMIO 直接获取相关的信息,如此处的设备描述符。USB 可以进行批量传输、中断传输、实时传输、控制传输。将URB提交给USB核心,后者根据URB的端点类型和设备地址路由请求。对于外接的 USB 设备(如 U 盘)的设备描述符获取,则走。其初始化两个有优先级的工作队列,工作队列执行函数为。函数来添加 HCD ,该函数中有如下代码来初始化工作队列。,该函数实现了成功发送完 URB 后的清理及通知工作。函数来对 URB 清理,同时通知。
2025-04-10 18:24:57
1046
原创 DMA 概念与讲解
但是,您可以再次将整个过程视为“从设备请求中收到 32 个字节的响应”。,理论上可以直接访问 ZONE_NORMAL 的物理内存(如 0x80000000 ~ 0x7FFFFFFFFF)。的关键技术,其核心目标是通过中间缓冲区实现数据的安全传输。(4GB),高端设备(如 NVMe SSD、GPU)可能支持。老旧设备(如 ISA 总线设备)的 DMA 控制器仅支持。但实际可用范围受限于设备硬件、控制器和操作系统的实现。PCIe 的 DMA 支持的内存寻址范围取决于。TLP 遍历层次结构。
2025-04-07 18:39:38
1081
原创 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
317
原创 Ubuntu 下 systemd 介绍
以下是systemd用途 :存放由软件包安装的systemd单元文件,包括各种服务(.service)、目标(.target)、挂载(.mount)等单元文件。特点 :该目录下的配置文件是由软件包管理器(如 apt、rpm 等)安装软件时自动放置的,通常不需要用户手动修改。它为系统提供了各种预定义的服务和功能配置。用途 :存放系统运行时动态生成的单元文件。这些文件通常是在系统运行过程中,由各种服务或进程根据需要创建的。
2025-02-17 17:10:59
1310
原创 制作Ubuntu根文件
qemu-user-static 是一个用于在 x86 主机上运行 ARM 或其他非 x86 操作系统的工具。它是一个静态版本的 QEMU,因此它可以直接从磁盘运行,而无需安装 QEMU 或任何其他软件.PS: LightDM 和 GDM 都是 Linux 系统的显示管理器,负责显示登录界面,并允许用户登录系统。安装它用于在PC主机上运行下载下来的UBUNTU镜像, 方便修改镜像的内容。最终生成的镜像文件:linuxroot.img。PC 上替换源好像有些问题,也许源不对。
2025-02-15 11:54:08
824
原创 QEMU 通过网络实现共享文件
在启动 QEMU 时,使用 -netdev user 和 -device virtio-net 参数来配置 NAT 网络。为了在虚拟机重启后自动挂载共享文件夹,可以将挂载命令添加到 /etc/fstab 文件中。选项用于指定共享目录的路径、安全模型以及挂载点等参数。是一种高效且灵活的文件共享方式,它基于 9p 文件系统协议。如果能够成功 ping 通,说明虚拟机已经可以访问外网。虚拟机启动后,QEMU 会自动为虚拟机分配一个。将需要共享的文件放入此目录中。
2025-02-14 18:01:22
841
原创 Linux 文件系统挂载
虚拟根文件系统中没有/init在initrd阶段,如果虚拟根文件系统中没有/init文件,则会执行函数来挂载真实根文件系统。为了识别根文件系统所在的介质(如 SD、SCSI 等),内核会通过函数加载相关的介质驱动。这些驱动程序确保内核能够正确识别和访问根文件系统所在的设备。虚拟根文件系统中有/init在initrd阶段,如果虚拟根文件系统中有/init文件,则不执行函数来挂载真实根文件系统,真实根文件系统挂载将在/init脚本中进行。
2025-02-14 13:58:59
823
原创 Linux 下注册分析(4)
用于创建设备并在 sysfs 中注册指向该设备应该注册到的结构类的指针。这个函数可以被 char 设备类使用。在 Linux 系统中,是一个非常重要的概念。它是 Linux 内核中用来管理设备驱动程序的一种机制,通过对设备进行分类注册,实现设备间的协作和管理。在 Linux 系统中,设备驱动程序是连接硬件设备和操作系统内核的桥梁,而 class_register 机制可以帮助内核更好地管理这些设备驱动程序,并且提供一种灵活的方式来处理设备的注册和注销。
2025-01-24 17:39:07
1119
原创 Linux 下注册分析(3)
用于设备的注册,即将一个设备实例注册到设备模型中,使得系统能够识别和管理该设备。该函数通常由设备驱动的初始化函数调用,用于将设备的相关信息注册到设备模型中,包括设备的名称、设备的操作方法、设备的资源等。设备注册后,系统可以通过设备名称或设备号来访问和操作该设备。
2025-01-24 17:08:44
765
原创 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
880
原创 Linux 下注册分析(1)
用于驱动的注册,即将一个驱动实例注册到驱动模型中,使得系统能够识别和加载该驱动。该函数通常由驱动的初始化函数调用,用于将驱动的相关信息注册到驱动模型中,包括驱动的名称、驱动的操作方法、驱动支持的设备类型等。驱动注册后,系统可以根据设备类型来匹配并加载对应的驱动,从而实现设备的自动识别和驱动加载。驱动程序的探测函数(probe)将在设备与驱动程序匹配时调用,以便进行设备的初始化。移除函数(remove)将在设备从系统中移除时调用,以进行相关的清理操作。
2025-01-22 12:39:42
1176
原创 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
808
原创 树莓派 4B 指南
树莓派,(英语:Raspberry Pi,简写为RPi,别名为RasPi / RPI) [1]是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布,用户可以用上运行Windows的树莓派。
2025-01-15 15:07:02
1189
原创 Linux 工作队列
可以使用动态分配的也可以使用静态方式定义,最后再调用来初始化 work ,其次是衍生的一些其他接口,大多是标志位的不同,其次是delay_work这才是中断低半部常用的接口。
2025-01-09 17:03:31
792
原创 SCSI 简述
SCSI 协议主要是在主机和存储设备之间传送命令、状态和块数据。操作系统对外部设备(如磁盘、磁带、光存储、打印机和扫描仪)的I/O操作,可以通过SCSI协议来实现,一般情况下SCSI协议都嵌入到设备驱动器或者主机适配器的板载逻辑中。因为SCSI协议层位于操作系统和外部资源之间,它具有不同的功能组件。例如,应用程序一般将数据作为文件或者记录来访问。尽管数据最终都将在磁盘或者磁带介质上以数据块的方式存放,但是文件的检索需要一系列功能将未加工的块数据装配成应用程序能够操作的连续文件。
2025-01-09 10:04:28
395
原创 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
1064
原创 Linux 内核调试
如果你需要在系统启动时自动加载特定的内核模块,你可以编辑/etc/modules-load.d目录下的配置文件或者在/etc/modules文件中直接添加模块名。自动加载驱动程序通常意味着当某些事件发生时,系统会自动加载相应的内核模块。modprobe基于内核配置中的依赖关系和模块参数来决定是否自动加载模块。默认的内核编译命令会编译使能的模块,但生成的ko文件分散在各个文件夹内可在编译时传入参数。在系统下次启动时,这些模块将会自动通过modprobe或insmod加载。
2024-12-31 14:32:34
593
原创 USB Hub 检测设备
第二个函数,usb_set_device_state(),这个函数用来设置设备的状态,在 struct usb_device 结构体中,有一个成员 enum usb_device_state state,这一刻会把这个设备的状态设置为 USB_STATE_POWERED,即上电状态。第五个函数,usb_get_status(),这个函数是专门为 Hub 准备的,不是为当前的这个 Hub,而是说当前 Hub 的这个端口上连接的如果又是 Hub,那么和连接普通设备就不一样。后面会用实例来查看效果。
2024-12-25 17:19:28
2422
原创 USB Root Hub 分析
会向主机控制器返回一些信息,或者说 Data,这个 Data 被称作 “Hub and Port Status Change Bitmap”,而从软件角度来看,主机控制器的驱动程序接下来会在处理好这个过程的 urb 之后,调用该 urb 的 complete 函数,对于 Hub 来说,这个函数就是。这里是 Root Hub,所以相应的 hub 驱动会识别这些 device。在这里我们匹配的刚才的接口设备,所以其会调用 hub 驱动的。我们知道,每当驱动注册到总线上,其会识别挂载在总线上的设备。
2024-12-25 11:53:51
554
原创 xHCI 简单分析
struct bus_type 是 Linux 内核中用于表示一种特定类型总线的数据结构。在内核中,每种总线类型(如 USB、PCI、I2C 等)都有自己的 bus_type 实例,用于定义和管理该总线上设备的注册、枚举和驱动程序绑定等操作。// 总线名称,如:usb, pci等字符串;// 总线属性列表// 驱动程序列表// 设备列表// ... 其他字段 ...
2024-12-20 16:46:57
1224
原创 WSL Ubuntu
适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括:工具:vim、emacs、tmux。
2024-12-19 11:26:55
1270
原创 vscode 使用说明
中defines控制宏定义,控制头文件搜索。],"MODULE"],],vscode添加宏定义VSCode#include头文件时找不到头文件:我的解决方法。
2024-12-18 14:03:54
1331
原创 PCIe 与 USB 的补充知识
每次有一个新的设备注册到上面,都会去匹配右边的驱动,看是否能匹配上。然后将设备添加到驱动的 p->klist_devices 域。同理,每注册一个驱动,都会去匹配左边的设备,如果匹配成功,将则设备加到驱动的 p->klist_devices 域 ,再将设备的 is_registerd 置为 0。创建注册的这条总线需要的目录文件。初始化这条总线上的设备链表:struct klist klist_devices;将会在 /sys/class 目录下产生一个 “pci_bus” 的目录。
2024-12-11 09:06:41
238
原创 XHCI 1.2b 规范摘要(15)
如果要将设备模拟到 VM,则 VMM 应加载一个可以在多个 VM 之间共享设备资源的“主”驱动程序,并且对于将与之共享设备的每个 VF,模拟设备到 VM 的连接事件,建立模拟的设备槽,并将该槽映射到相应 VM 拥有的 VF。VF 生成的后续工作项将由 VMM 的设备主驱动程序处理,并转发到 VMM 拥有的物理 USB 设备。如上所述,当设备连接时,VMM 将对其进行评估并有选择地将其分配给 VM,但在这种情况下,VMM 将在 VM 的模拟外部集线器实例上模拟连接事件,而不是在 VM 事件环上生成。
2024-11-11 18:15:12
1179
原创 XHCI 1.2b 规范摘要(14)
当中断器分配给 VF 时,PF0 可用的中断器数量会相应减少。那么 PF0 将拥有中断器 0-3、VF 1 中断器 4-7、VF 2 中断器 8-11 和 VF 3 中断器 12-15。VM 中断器范围寄存器 0 在逻辑上将引用物理功能 0 (PF0),但 PF0 提供所有中断器分配的池。硬件重置后,所有 VF 中断器范围寄存器 = “0”,即 VF 不拥有任何中断器。软件使用这些寄存器来管理 VF 的状态和中断器资源。应使用此寄存器的中断器计数和中断器偏移字段将 PF0 中断器分配给关联的 VF。
2024-11-08 17:49:12
929
原创 XHCI 1.2b 规范摘要(13)
由于调试功能为 USB 提供了一个“设备端”接口,用于管理设备的上游端口,而不是根集线器的下游端口,因此调试功能中的某些寄存器定义可能看起来与 xHCI 中的非常相似,但它们可能存在细微的差异以支持“设备端”操作。例如,调试功能事件环管理寄存器块的操作和定义与第 5.5.2.3 节中定义的 xHCI 事件环寄存器相同,只是它提供了专用于调试功能的事件环。调试功能会自动分配给第一个 xHCI 根集线器端口,该端口可检测到具有增强型超高速功能的根集线器或外部集线器的下游端口的连接。
2024-11-07 18:12:53
1229
原创 XHCI 1.2b 规范摘要(12)
有关端口状态更改事件的使用和生成的更多信息,请参阅第 4.19.2 节。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关设置阶段 TRB 和控制端点操作的更多信息,请参阅第 3.2.9 节。另请参阅 USB2 规范中的第 8.5.3 节,了解有关 “控制传输” 的描述。有关控制传输和控制端点操作的更多信息,请参阅第 3.2.9 节。有关 Isoch TRB 和同步端点操作的更多信息,请参阅第 3.2.11 节。的使用和操作的更多信息,请参阅第 4.11.3.1 节。
2024-11-06 18:21:49
842
原创 XHCI 1.2b 规范摘要(11)
注意:控制端点上下文 0 的最大数据包大小字段应由系统软件设置为端点的默认最大数据包大小,该值取决于设备的速度。对于高速等时和中断端点,此字段应设置为每微帧的额外事务机会数,即 USB2 端点描述符 wMaxPacketSize 字段的位 12:11 中定义的值。字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。注意:添加上下文和删除上下文标志索引的计算方式与第 4.5.1 节中描述的输入上下文的设备上下文部分的设备上下文索引 (
2024-11-05 16:40:20
1032
原创 XHCI 1.2b 规范摘要(十)
USB3 端口电源管理状态()和控制(Control)寄存器控制增强型超高速(USB链路U-State超时。有关链路电源管理的更多信息,请参阅 USB3 规范的第 11 节。。USB2 端口电源管理状态和控制寄存器提供xHC生成LPM令牌给下游设备所需的USB2 LPM参数。有关xHCI链路电源管理功能的更多信息,请参阅第 4.23.5.1 节。有关USB2链路电源管理的更多信息,请参阅 USB2 LPM ECR。。USB3端口链路信息()寄存器报告链路错误计数。
2024-11-04 11:48:49
1102
原创 XHCI 1.2b 规范摘要(九)
字段内的字节/字符应采用小端顺序,即,字符串的第一个字符在最低有效字节,第二个字符在下一个有效字节,依此类推。基于 PCI 的 xHC 需要实现 PCI,即 0 类 PCI 设备标头,如下所示。有关电源管理寄存器块的定义,请参阅 PCI PM 规范中的第 3.2 节。,该寄存器与 PCI PM 规范中定义的结构几乎相同,但有一些额外的要求。这些 registers 的偏移量都是相对于主机控制器的 MMIO 地址空间的开头的。请参阅 PCIe 规范的第 7.8 节,了解有关此结构实现的详细信息。
2024-11-01 18:14:21
1031
原创 XHCI 1.2b 规范摘要(八)
在“轻度”硬件复位(通过 USBCMD 寄存器中的轻度主机控制器复位 (LHCRST) 位)后,只有辅助电源井中未包含的操作和运行时寄存器应保持其默认值。本规范中有关电源传输的任何讨论的主要目的是提高各种实现之间的互操作性,而不指定特定的电源传输方法。或对为支持主机控制器的电源管理功能而明确定义的配置、命令和状态寄存器的引用将帮助读者识别需要特别注意的那些构造。注意:本节提供的规范和白皮书参考资料并非详尽的清单,鼓励读者参考可能与设计人员的具体实现相关的其他规范。,辅助)井的预期功能。
2024-10-31 18:14:50
991
原创 XHCI 1.2b 规范摘要(七)
在正常模式下,xHCI 的设计使所有 USB 设备(设备插槽 0-n)都出现在单个功能中。在虚拟化模式下,xHCI 设计为不同的虚拟功能,其中每个 USB 设备(设备插槽 0-n)都可以专门映射到特定的虚拟功能。在正常情况下, xHCI 除其他寄存器外,还实现了 PCIe 设备头空间,如第 5.2 节所述。xHCI 根集线器端口的初始状态应为 Disconnected 状态,即端口电源 (PP) 已断言,并且端口正在等待 USB 上的信号,指示设备已连接。支持的协议功能结构标识,请参阅第 7.2 节。
2024-10-29 18:13:17
1251
原创 XHCI 1.2b 规范摘要(六)
此功能对于PCIe实现是可选的。如果设置了 PCI Express 功能结构 (5.2.8) 设备控制寄存器 (PCIe 规范第 7.8.4 节) 中的启用无监听位 (位位置 11,表 7-12),则允许 xHC 在其发起的不需要硬件强制缓存一致性的 PCIe 事务的请求者属性中设置无监听位 (请参阅 PCIe 规范第 2.2.6.5 节)。请注意,将此位设置为“1”不会导致 xHC 在其发起的所有 PCIe 事务上设置无监听属性。
2024-10-28 18:05:56
1054
Android内核剖析
2016-08-30
Android开发艺术探索随书源码之PinExpandableListView
2016-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人