自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SPI通信协议与Linux设备驱动框架解析

SPI是一种高速全双工的同步串行通信协议,采用主从架构,通过MOSI、MISO、SCK和CS四线实现设备间数据交互。其核心特性由时钟极性(CPOL)和相位(CPHA)定义四种工作模式,模式0(上升沿采样)和模式3(高电平初始+上升沿采样)最为常用。在Linux驱动框架中,SPI子系统由控制器(spi_master)和设备(spi_device)构成,驱动层通过spi_driver实现设备绑定与数据传输,关键函数包括旧版transfer(消息队列)和新版transfer_one(单次传输优化)

2025-03-24 08:00:00 1004

原创 24年总结 -- 共赴心中所向往的未来

我又回来了,前阵子忙着期末考试的东西,也是快半个月没更新了,刚好前几天报名了博客之星的评选,也很幸运的入围了,也借此机会来回顾一下关于2024年的个人成长、创作经历等。

2025-01-20 10:46:49 2009 43

原创 PCIe设备MSI/MSI-X中断源码分析与驱动编写

本文详细分析了PCIe设备中断分配过程,特别是如何通过内核代码启用MSI-X和MSI中断。介绍了如何在设备驱动程序中使用pci_alloc_irq_vectors分配中断向量,包括MSI-X、MSI和传统的INTx中断机制。探讨了如何通过__pci_enable_msix_range和__pci_enable_msi_range为设备分配中断向量,处理中断亲和性设置,并确保设备没有重复的中断请求。通过描述如何通过msi_domain_alloc_irqs和irq_domain分配硬件IRQ以及如何激活IRQ

2025-01-06 00:09:36 1123 4

原创 GICv2与GICv3中断架构对比与LPI中断机制分析

本文章深入分析了ARM架构中通用中断控制器(GIC)的两种版本:GICv2与GICv3,重点讨论了其在中断管理方面的不同特点和进化。首先介绍了GICv2中断类型,包括软件触发中断(SGI)、私有外设中断(PPI)和共享外设中断(SPI),并讨论了传统的物理信号线路传递方式。接着,详细分析了GICv3的创新,尤其是如何通过MSI(方式触发SPI中断,并引入了LPI机制,显著提高了虚拟化环境中的中断处理能力。文中还阐述了LPI的触发方式及其在GICv3中如何通过寄存器与表格查找机制实现低延迟的中断传递。

2025-01-02 00:17:21 2345 26

原创 RK3399 PCIe 中断处理与映射分析(INTx中断机制源码分析)

本篇文章深入分析了 RK3399 平台上 PCIe 中断处理与映射的全过程,结合相关文档和开发板资料,详细介绍了 PCIe 设备、控制器和中断管理系统的工作机制。文从 PCIe 设备发生中断的流程入手,逐步分析了 PCIe 控制器如何将中断信号传递到 GIC(通用中断控制器)以及最终处理的过程。探讨了设备树中中断定义与映射的作用,特别是如何通过 interrupt-map 和 interrupt-map-mask 在设备树中为 PCIe 设备分配中断号。此外,还分析了如何通过创建 IRQ 域以及相应的中断控

2024-12-30 13:53:51 1400 30

原创 MSI-X中断机制、MSI/MSI-X操作流程详解

MSI和MSI-X是PCI/PCIe设备中用于替代传统中断机制(INTx)的两种高效中断机制。与传统方法依赖物理引脚不同,MSI/MSI-X通过发送消息触发中断,具备更高的灵活性和性能。MSI支持最多32个中断向量,适用于一般设备;而MSI-X支持多达2048个中断向量,适合复杂、高性能设备。MSI-X将中断信息存储在设备内存空间中的MSI-X Table和Pending Bit Array中,并允许每个中断向量拥有独立的地址和数据,显著提升并行处理能力。

2024-12-29 00:22:23 1524 34

原创 PCI/PCIe设备INTx中断机制和MSI中断机制

本文档详细解析了PCI/PCIe设备的中断机制及其实现原理,重点阐述了INTx、MSI和MSI-X三种中断方式的差异及特性。通过结合硬件示意图和寄存器配置,对INTx传统中断的物理引脚通信、PCIe通过TLP模拟INTx的兼容方式、以及MSI基于消息传递机制的高效中断实现进行了深入剖析。此外,还详解了MSI/MSI-X中断在PCI配置空间中Capability结构的作用及具体配置方法,解释了中断地址与数据的分配、控制寄存器的意义、以及中断向量的扩展功能。

2024-12-26 00:08:47 1738 36

原创 PCIe_Host驱动分析_设备枚举

本文通过深入分析 pcie-rockchip.c 文件,详细解读了 Rockchip PCIe 驱动中关键的资源管理与设备配置过程。文章首先回顾了 PCIe 控制器的资源解析机制,包括设备树中地址资源的解析与映射,将资源信息记录到链表中的具体实现。接着,对 PCIe 配置空间的基本概念和 BAR(Base Address Register)的结构与用途进行了说明,分析了如何通过配置空间确定设备所需的内存或 I/O 地址范围及分配策略。此外,文章重点剖析了 PCIe 总线扫描和设备初始化的核心代码

2024-12-23 22:48:37 1415 33

原创 PCIe_Host驱动分析_地址映射

本文针对RK3399开发板的PCIe控制器驱动程序,解析了其实现原理和流程。首先,通过设备树文件获取控制器寄存器和Region 0的配置空间地址,确保CPU能够访问PCIe设备的配置空间。随后,从设备树中解析ranges属性,获取Region 1~32的CPU和PCIe地址空间基地址,用于内存和I/O资源的映射。驱动程序通过配置寄存器,实现CPU地址空间与PCIe地址空间的映射关系,确保CPU能够通过转换后的PCIe地址(addr_pcie)直接与外设交互。

2024-12-21 22:15:37 1367 34

原创 深入解析PCIe地址空间与寄存器机制:从地址映射到TLP生成的完整流程

本文详细解析了PCIe控制器的地址空间划分、寄存器配置及其在主机与PCIe设备之间通信中的核心作用。从两个主要的地址空间(内部寄存器和远程设备)入手,分析了其地址映射机制和分区设计,并解释了如何通过Region映射访问外部设备的配置空间和内存空间。结合寄存器功能,本文介绍了如何通过地址转换寄存器和描述符寄存器生成TLP,实现主机对PCIe设备的精确操作。此外,还通过具体示例演示了配置空间和内存/IO空间的读写流程,以及如何通过寄存器配置实现对PCIe设备的访问和控制,帮助读者全面理解PCIe通信的底层实现。

2024-12-19 00:02:39 2207 35

原创 PCI驱动与AXI总线框架解析(RK3399)

本文介绍了PCI驱动框架和AXI总线在嵌入式系统中的应用。PCI驱动分为PCI Host(Root Complex, RC)和PCIe设备两个部分,RC通过设备树和平台总线完成初始化,扫描挂载的PCIe设备,生成pci_dev结构体;PCIe设备通过匹配pci_driver完成初始化,使其正常工作并与RC通信。此外,文章详细描述了PCIe设备资源分配中BAR寄存器的配置过程。对于AXI总线,以RK3399为例,解析了CPU与外设之间的通信,通过五大通道和丰富的信号集实现高效的数据传输。

2024-12-16 00:10:10 1481 45

原创 PCIe的三种路由方式

PCIe协议定义了三种路由方式:基于ID的路由、基于地址的路由和隐式路由,用于实现设备间高效的数据传输。基于ID的路由通过设备的Bus、Device、Function号标识目标,用于设备配置和响应。基于地址的路由依赖分配的内存或I/O地址,用于数据读写。隐式路由则无需明确目标设备,通过消息类型或特定字段确定传输路径。PCIe桥和设备根据配置阶段的分配信息决定报文的转发或接收,确保网络的高效通信。这些路由方式相辅相成,构建了灵活的PCIe通信机制,支持多设备协同与高性能数据交互。

2024-12-13 00:00:33 1445 44

原创 深入解析PCIe设备事务层与配置过程

本文通过剖析PCI Express(PCIe)协议的事务层(TLP)结构和配置过程,详细阐述了PCIe系统硬件结构及数据传输的关键机制。重点关注Posted与Non-Posted事务的差异、TLP格式中各字段的功能,以及PCIe设备的配置空间访问逻辑。文章介绍了设备地址映射机制及BAR寄存器在PCIe地址解析中的作用,并通过具体示例解析了多级桥接设备的枚举和配置过程。这一系统性探讨有助于理解PCIe数据传输效率优化及复杂网络架构的实现方法,为从事硬件设计和系统集成的专业人士提供了实用参考。

2024-12-11 00:07:08 1191 35

原创 PCI桥设备的访问方法、软件角度讲解PCIe设备的硬件结构

介绍了PCI桥设备如何在PCI总线中传递配置命令,涉及设备地址空间的管理与配置过程。详细讲解了PCIe的硬件接口,强调了差分信号在高速数据传输中的重要性,及其在传输过程中如何减少噪声干扰、保证信号完整性。不同于传统的并行PCI接口,PCIe采用串行通信方式,通过点对点链路提升带宽与扩展性。从软件层面分析了PCIe协议的三层结构(事务层、数据链路层、物理层),逐步解构了PCIe数据传输的封装与传输机制,包括事务层的TLP封装、数据链路层的错误校验与确认机制、以及物理层的信号传输与编码方式。

2024-12-09 00:24:34 1650 31

原创 深入解析非桥PCI设备的访问和配置方法

本文详细解析了PCI/PCIe设备的访问与配置流程,分步骤讲解了如何通过主机读取设备配置信息、分配地址空间,以及实现CPU地址空间与PCI/PCIe地址空间的转换。重点剖析了PCI/PCIe设备的硬件结构、配置空间的组织及功能,介绍了配置事务的实现方式和具体的配置过程。此外,文中通过对PCI本地总线信号分类及其功能的分析,阐明了PCI设备在访问内存空间和I/O空间时的核心机制。最后,通过配置PCI Agent设备的示例,直观展示了如何为设备分配资源并完成数据传输。

2024-12-07 00:09:15 2182 32

原创 嵌入式系统的内存访问和总线通信机制解析、PCI/PCIe引入

本文探讨了嵌入式系统中内存与外设通信的基础原理,涵盖从简单的“ram-like”设备读写操作到复杂的外设控制器工作机制。文章首先分析了内存控制器如何通过地址范围映射与片选信号实现对多种设备的高效管理,接着以 eMMC 和 PCI/PCIe 为例,详细说明控制器的功能及其对协议转换、数据管理和传输优化的关键作用。同时,通过形象的类比展示了不同设备间地址空间的分层结构,并对 PCI 和 PCIe 接口的信号定义及差异进行了比较。

2024-12-06 00:20:54 1433 40

原创 Linux内核早期打印机制与RS485通信技术

本文围绕Linux内核早期打印机制和RS485通信技术展开,详细解析了early_printk和earlycon的实现与使用场景,以及RS485的基础原理和应用实践。在早期打印部分,阐明了early_printk和earlycon的区别:前者通过手动实现打印函数实现早期日志输出,后者则结合设备树实现灵活硬件映射,适用于现代系统。在RS485部分,介绍了其差分信号传输、抗干扰能力强等技术特点,并结合SP3485芯片说明了发送与接收的硬件原理,同时提供了Linux环境下的标准驱动编程示例.

2024-12-05 00:01:19 1689 38

原创 深入解析Linux内核Console框架及虚拟UART控制台的实现

本文深入探讨Linux内核的Console框架,解析其设计思路及作用,特别是在TTY框架基础上构建Console接口的意义。从内核日志输出与人机交互需求出发,剖析Console结构体的关键字段和功能。同时,结合具体代码实例,展示如何编写虚拟UART控制台驱动,包括控制台的初始化、日志写入、与TTY设备的绑定等过程。通过对驱动注册、命令行参数解析及设备关联的详细介绍。

2024-12-04 00:01:59 1691 66

原创 Linux 内核日志系统—printk的机制与应用

在 Linux 内核开发中,printk 是最常用的调试工具之一,主要用于输出内核日志信息。printk 不仅类似用户空间的 printf,还提供了日志级别管理功能。本文系统梳理了 printk 的使用方法、日志级别管理、日志信息的存储位置,以及输出过程的核心机制。通过解析源码和示例,详细展示了如何利用 console_loglevel 等宏调控日志输出行为,并剖析了内核是如何通过call_console_drivers 将日志发送到不同设备。

2024-12-01 07:30:00 2999 82

原创 深入浅出UART驱动开发与调试:从基础调试到虚拟驱动实现

本文全面介绍了UART驱动开发与调试的关键技术和方法。首先,通过分析UART驱动中接收和发送数据的流程,展示了如何在中断函数中捕获数据,以及利用proc和sys文件系统获取串口信息。接着,深入探讨了如何实现虚拟UART驱动,包括核心数据结构、环形缓冲区设计、中断处理机制、文件操作接口以及设备树的集成方式。文章还包含详细的代码解析,展示了虚拟串口与用户空间的交互实现。

2024-11-28 10:17:10 6144 82

原创 IMX 平台UART驱动情景分析:write篇--从 TTY 层到硬件驱动的写操作流程解析

本文深入剖析了 Linux 串口子系统中的数据写入过程,重点涵盖 TTY 层、行规程、核心层及硬件驱动层的协作机制。通过对 tty_write、do_tty_write 等关键函数的详细代码解析,逐步追踪数据从用户空间到硬件层的传递路径。文章还探讨了数据写入的分块机制、线程安全处理以及中断与 DMA 方式的硬件发送逻辑。

2024-11-27 00:19:38 1617 72

原创 IMX 平台UART驱动情景分析:read篇--从硬件驱动到行规程的全链路剖析

本文系统性分析了Linux TTY子系统的核心工作流程及代码实现,涵盖硬件驱动(如imx.c、stm32-usart.c)、串口核心层(serial_core.c)及TTY层(tty_io.c)。重点探讨行规程在数据流和控制流中的桥梁作用,包括默认的n_tty规程如何处理规范与非规范模式的数据。通过对tty_read的深入剖析,从用户态调用到硬件中断处理,再到行规程的数据加工,逐步揭示TTY系统的设计逻辑与关键技术细节。文章同时提供关键结构体如tty_ldisc_ops的解读。

2024-11-26 00:01:10 1715 62

原创 IMX 平台UART驱动情景分析:open篇

本文是IMX平台UART驱动系列的第二篇,聚焦于应用层通过open调用串口设备时,内核驱动如何进行处理的详细分析。从设备节点的创建到tty_open流程,文章逐步剖析了涉及的关键函数和结构体,包括设备类与节点的生成(通过class_create与device_create)、TTY子系统中tty_open的执行过程,以及tty_driver和uart_ops的功能模块。配合内核代码与流程框图,本文深入讲解了第一次打开TTY设备的初始化过程以及后续复用逻辑

2024-11-25 00:01:40 1542 40

原创 IMX 平台UART驱动情景分析:注册篇

本文全面解析了 Linux 4.9.88 内核中 UART 子系统的驱动架构和注册流程。首先梳理了 IMX 平台串口驱动的硬件相关代码,并从框架图着手分析驱动在串口核心层与 TTY 层的交互。详细解读了 uart_register_driver 函数如何通过 tty_register_driver 实现驱动向 TTY 层的注册,同时展示了关键结构体 uart_port 和 tty_driver 的配置与初始化过程。此外,结合 IMX 平台驱动的 serial_imx_probe 函数。

2024-11-24 00:19:48 1456 35

原创 理解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解

本文详细探讨了 Linux 内核中串口(UART)和 TTY 驱动的核心数据结构及其作用。通过分析 uart_port、uart_driver、tty_port、tty_driver 等关键结构体,阐述了串口硬件配置、驱动信息管理、TTY 端口资源状态维护,以及驱动与设备交互的实现细节。此外,还介绍了 uart_state 和 tty_operations 的核心功能,展示了 UART 与 TTY 子系统如何协同工作,完成设备控制和数据传输任务。

2024-11-23 00:30:52 2141 47

原创 Linux串口应用编程:从UART到GPS模块及字符设备驱动

本文详细讲解了Linux设备编程的核心知识点,涵盖了UART通信、GPS模块数据处理和字符设备驱动开发的两种注册方法。在UART通信部分,介绍了设备操作的基本流程以及如何通过termios结构体配置串口参数。在GPS模块实验中,解析了NMEA0183数据格式,展示了如何提取关键定位信息及实现硬件通信。在字符设备驱动开发部分,阐述了传统register_chrdev和改进的cdev注册方法,结合实例代码和流程图,分析了资源分配和驱动管理的优化策略。

2024-11-22 00:44:04 1351 47

原创 深入理解TTY体系:设备节点与驱动程序框架详解

TTY(Teletype)体系是Linux系统中处理终端设备的核心框架,它贯穿了字符设备的历史演进与现代虚拟终端的实现。本篇文章深入解析常见设备节点(如/dev/ttyS0、/dev/console等)及其功能差异,详细梳理TTY框架中虚拟终端、串口终端、控制台终端的原理与应用场景。通过探讨teletype的历史发展、虚拟终端的引入以及TTY驱动框架的设计,揭示行程规(line discipline)在输入输出中的关键作用,并结合实验分析各类设备节点的实际行为。

2024-11-21 00:16:00 1932 85

原创 UART硬件介绍

串口(UART)作为嵌入式系统中广泛应用的通信接口,以其结构简单、稳定可靠的特点,成为调试与模块连接的首选。串口硬件由发送与接收部分组成,通过三根线(TXD、RXD、GND)实现数据交互。本文介绍了串口的基本参数,如波特率、数据位、校验位等,分析了不同逻辑电平(TTL/CMOS与RS-232)的差异及其在实际应用中的适配性。现代ARM芯片通常采用TTL电平,通过转换芯片支持RS-232或USB接口,实现与外设或电脑间的数据通信。还讲解了串口的内部结构与数据传输流程。

2024-11-20 00:00:57 1317 64

原创 Linux 链式与层级中断控制器讲解:原理与驱动开发

Linux 内核中链式和层级中断控制器的工作原理与实现细节,基于 4.9.88 版本的源码,深入对比两种中断控制器的处理流程,剖析其特点及适用场景。文中不仅涵盖了中断处理流程中重要的结构体与函数,还详细解读了 irq_domain 的核心作用。同时,通过虚拟硬件模型与实际代码示例(包括 gpio-mxc.c、设备树配置等),分步骤介绍链式与层级中断控制器的驱动开发方法。

2024-11-19 00:15:00 3826 72

原创 GIC中断申请和中断处理流程代码解析、中断调试技巧介绍

本文讲解了在Linux内核中GIC中断的申请、解析与处理的完整流程。介绍了通过设备树申请中断的方法,并解析了内核对设备树中断信息的处理过程,包括中断映射和创建过程。分析了GIC中断的处理机制,以`gic_handle_irq`函数为起点,阐述了从中断号的确认到中断事件的处理过程,层层剖析了内核的中断分发机制以及各关键函数的实现逻辑,如`handle_domain_irq`、`generic_handle_irq`和`handle_irq_event`。讲解了中断屏蔽、处理中断事件及解屏蔽的具体操作。

2024-11-17 00:01:08 1946 71

原创 深入解析GIC中断处理与内核初始化:基于Linux 4.9.88内核的详细分析

本文以Linux 4.9.88内核为基础,系统解析了通用中断控制器(GIC)的中断处理与初始化机制。介绍了一级和多级中断控制器的处理流程,包括中断号映射(hwirq与virq)和中断服务函数的调用。梳理了GIC驱动的关键结构体与核心函数,阐述了GIC的功能及其内核表示方法。以设备树为线索,详细剖析了GIC初始化过程,解读了`IRQCHIP_DECLARE`宏及其如何与设备树节点匹配并触发初始化。通过源码分析与注释,逐步讲解了GIC的域操作和分层中断处理流程。

2024-11-16 00:03:18 1948 55

原创 ARM架构中断与异常向量表机制解析

探讨了ARM架构中断发生的硬件和软件流程,异常向量表的安装与映射过程,以及相关代码的实现细节。首先,介绍了中断的触发及其处理流程,CPU在检测到中断后,如何借助向量表进行跳转处理并恢复现场。接着,阐述了异常向量表在ARM系统中的两种典型位置(0和0xffff0000)及其应用场景,以及在Linux内核中的初始化和映射过程。本文通过汇编与C代码展示了向量表的复制、内存分配、页表清理、高低向量映射、以及异常处理辅助功能的初始化,帮助读者深入理解异常处理的机制和实现。

2024-11-15 00:01:48 1853 61

原创 GIC寄存器介绍

介绍了ARM的全局中断控制器(GIC)的结构与工作原理。GIC分为Distributor和CPU接口两部分,分别负责中断的分发和处理。文章详细解读了多个重要寄存器,包括Distributor控制寄存器(GICD_CTLR)、中断优先级寄存器(GICD_IPRIORITYRn)、中断使能寄存器(GICD_ISENABLERn)、以及CPU接口控制寄存器(GICC_CTLR)等。每个寄存器的作用、位域及其功能、偏移地址和如何找到对应的寄存器及位操作规则均有详尽说明。

2024-11-14 00:12:27 1338 13

原创 GIC介绍

通用中断控制器(GIC)是一种用于管理单核或多核系统中断的硬件结构,包括分发器(Distributor)和CPU接口(CPU Interface)两个主要模块。分发器负责连接所有中断源,并通过寄存器配置中断的优先级、路由、状态等属性。它将中断分发到指定的CPU接口,以保证高优先级中断的及时处理。CPU接口则与处理器交互,接收、屏蔽和识别中断,并支持优先级掩码、抢占等功能。GIC支持三种主要中断类型:软件触发中断(SGI)、私有外设中断(PPI)、共享外设中断(SPI),并可设置中断的触发方式.

2024-11-13 00:00:32 971 17

原创 中断的硬件框架

概述了嵌入式系统中断机制的构成及在不同芯片平台中的实现。介绍了中断路径上的关键部件:中断源、中断控制器、CPU,以及它们在中断流程中的作用,如优先级设定和中断触发方式的选择。STM32F103通过EXTI管理GPIO中断信号,而STM32MP157、IMX6ULL等使用外部中断控制器(如GIC)与CPU对接。说明了中断配置,包括GPIO引脚的中断触发设置、优先级设定、屏蔽控制等。对于不同平台,具体的寄存器配置有所差异,且各自支持不同类型的中断控制器,如NVIC和GIC,满足单核和多核系统的中断管理需求。

2024-11-12 00:02:05 1358 13

原创 Linux 内核中断描述符 (irq_desc) 的初始化与动态分配机制详解

介绍了 irq_desc 的初始化流程及相关 API 的使用。在内核中,IRQ_BITMAP_BITS 决定了可用的中断号范围,根据配置不同可支持稀疏分配模式。静态和动态分配模式的 irq_desc 初始化略有不同,其中静态初始化在系统启动时完成,而动态分配则通过 irq_alloc_descs() 实现。此外,内核提供了诸如 irq_set_chip、irq_set_chip_data 等接口,用于配置中断描述符的硬件关联信息。本文也深入探讨了 early_irq_init 函数的执行过程。

2024-11-11 00:18:12 1659 30

原创 中断描述符irq_desc成员详解

在 Linux 内核中,IRQ(中断请求)处理机制是一个复杂而关键的组成部分。对于处理外部设备的中断需求,系统需要有一套有效的机制来管理和分发中断请求。Linux 内核通过 irq_desc、irq_data、irq_chip、irq_domain 等多个结构体来实现中断的管理和控制。这些结构体相互协作,不同层次地处理中断,从 GIC(通用中断控制器)到外部设备的中断请求,再到具体的设备驱动程序的中断处理函数。

2024-11-10 01:25:27 1728 12

原创 Linux内核中IRQ Domain的结构、操作及映射机制详解

本文系统地介绍了Linux内核中IRQ(中断请求)Domain的基本概念、数据结构和使用方法。通过struct irq_domain结构体,内核管理HW interrupt ID和IRQ number之间的映射。不同映射类型如线性映射、树状映射和无映射,满足了各种硬件需求,适配从小型嵌入式系统到复杂的多级中断控制器架构。文中详细说明了irq_domain_ops回调函数、映射注册流程以及分配策略,并探讨了DTS(设备树)与中断拓扑的结合与初始化过程,使驱动程序能动态管理IRQ,确保中断的高效处理与硬件解耦。

2024-11-09 00:31:10 1317 8

原创 深入解析Linux内核中断管理:从IRQ描述符到irq domain的设计与实现

探讨了Linux内核中断管理的核心结构与流程,涵盖从IRQ编号到中断描述符(irq_desc)的构建,揭示了内核如何通过irq domain将硬件中断ID映射为逻辑IRQ编号,从而实现跨平台的灵活中断管理。介绍了IRQ number与HW interrupt ID的区别与映射关系,解析了irq_desc结构体的各个字段在中断处理中的作用,如高层中断处理函数(handle_irq)、中断操作链(action)、状态字段(status)等。还讨论了IRQ共享、irq domain的解耦设设计等。

2024-11-08 00:02:09 1892 20

原创 编写虚拟的GPIO控制器的驱动程序:和pinctrl的交互使用

讲解了如何在Linux 4.9.88内核中为虚拟GPIO控制器编写驱动程序,并展示了GPIO和Pinctrl子系统之间的交互方式。假设该虚拟GPIO控制器有4个引脚,然后在设备树中为其设置相应的设备节点和引脚配置。通过代码示例展示了如何实现GPIO的输入、输出功能,包括GPIO的值读取与设置。文介绍了GPIO控制器与Pinctrl的关系以及两者的映射机制,解释了gpio_pin_range和pinctrl_gpio_range结构体的作用,并提供了GPIO子系统中调用Pinctrl的流程示例。

2024-11-07 00:09:13 2368 16

空空如也

空空如也

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

TA关注的人

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