自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大连民族大学C语言实训环境安装教程

WinLibs 就是把 Linux 里常用的 gcc 编译器搬到了 Windows 上,让我们在 Windows 也能用 Linux 的方式编译程序。devc++ 这个软件本质上是一个IDE:即包括写代码的编辑器+windows平台下的gcc编译器+运行程序的界面。也就是说git bash提供了最古老的代码编辑器vi 和 运行程序的界面。但是没提供编译器,把这个WinLibs引入过来就相当于引入了一个编译器。为了让大家体会linux下的开发环境指令+古老的苦难条件条件。输入gcc --version。

2026-03-05 15:16:28 357

原创 IIO子系统学习+杂项

2026-02-17 15:09:13 26

原创 REGMAP使用方法杂项

没啥说法,读写时候通过config设置一下,初始化,用api读写。

2026-02-15 22:04:27 50

原创 PWM子系统杂项笔记

在linux内核中,Gpio是linux入住的全封装Api开发者只管调用逻辑。,iic和spi是总线与设备分离的标准协议站, 开发者只需编写设备端驱动,而PWM则是一套只有框架,没有底层的毛坯房,它不提供任何计算机操作,要求开发者必须亲自实现pwmops结构体和config setenable来直接操作硬件时序。

2026-02-15 20:31:16 54

原创 二、代码案例+杂项

按下松开 启用中断。

2026-01-30 17:12:32 24

原创 一、Input框架基础

当使用hexdump /dev/input/event0 访问驱动节点,比如说event0代表触屏。那么 触屏的数据会经过底层层层递进,把这个数据传递到终端上。

2026-01-30 15:06:29 75

原创 五、杂项 关于earlayprintk和earlycon 以及RS485

用户通过内核命令行(cmdline)启用早期控制台输出,比如或直接使用。内核在启动的最初阶段就会解析这些参数,建立最基础的串口输出能力。这里解决的是系统"婴儿期"的输出需求——在普通硬件驱动还没初始化、内存管理还没完全建立时,就需要有能看到错误信息的手段。但是光有参数配置不行,还得有底层的支持。对于early printk,它是直接通过平台特定的汇编代码操作UART寄存器,完全绕过驱动框架;而对于earlycon,它会调用一个简化的、专门用于早期阶段的console驱动来初始化串口。

2026-01-29 16:28:25 609

原创 四、编写虚拟驱动程序运行+调试

本文介绍了一个虚拟串口驱动框架的实现。该驱动通过环形缓冲区管理数据收发,包含1024字节的发送和接收缓冲区。核心功能包括:通过virt_start_tx将数据存入发送缓冲区,virt_uart_rxint中断处理函数接收数据并传递给行规程层。驱动还实现了proc文件系统接口(virt_uart_buf_read/write)供用户空间读写数据,并模拟硬件中断触发机制。该虚拟驱动框架省略了真实硬件操作,重点展示了Linux串口驱动的核心流程和缓冲区管理机制。

2026-01-28 16:12:19 305

原创 三、stm32mp157的Usart通用驱动分析

本文分析了Linux TTY驱动架构的实现过程,主要包含四个部分:注册、打开、读取和写入。在注册阶段,构建了tty_driver结构体并完成了相关功能初始化。打开过程从整体tty驱动到具体硬件驱动逐层调用,最终执行底层startup函数。读取操作通过中断获取数据源。写入流程则通过n_tty_write函数处理,并利用中断和DMA进行数据传输。整个过程展示了Linux TTY驱动从高层抽象到底层硬件的完整调用链,实现了串口设备的统一管理和数据收发功能。

2026-01-28 13:41:46 136

原创 二、串口应用编程案例

行规程问题:如果两个参数都是0的话,就是在读取的时候,该串口是可以读取不到数据的。那么执行原本的代码那么就会写入的时候,比如输入 a 按下回车 出现小问题,a写入 读不出来,\n写入读不出来。两次都是can not再写入读取 就一直读取之前的。因为读取很慢。这个很简单的到底,c语言里面常常遇见 \n也是字符,而且有特殊含义:推出去 之前的字符。

2026-01-26 20:48:01 251

原创 一、串口基础知识

传输时序如下。

2026-01-26 11:38:32 210

原创 四、SPIMaster驱动详解+模拟

每一个spi_master(spi控制器现代linux称之为spi_controller)维护一个queue队列。这个队列中每一个元素对应着一个spi_device设备传过来的信息用spi_message来表示。。比如A设备有自己的spi_message注册在spi_master中比如B设备有自己的spi_message注册在spi_master中。

2026-01-23 15:57:48 319

原创 三、编写SPI设备驱动程序---两个案例

应用层测试代码,不涉及到硬件逻辑123spi_sync (代码中所用):同步接口。它会睡眠等待,直到硬件传输完成。简单可靠,适合对响应时间要求不是极高的传感器读写。spi_async:异步接口。调用后立即返回,传输完成后通过回调函数通知。适合高性能或中断上下文中。驱动程序代码123Makefile。

2026-01-23 11:26:27 1167

原创 二、spidev.c通用驱动程序分析

本文分析了Linux内核中spidev.c通用SPI设备驱动框架的关键实现。该驱动包含设备树兼容性数组,但内核新版本已禁止直接使用"spidev"作为设备树属性。文章详细解读了probe函数的实现逻辑,包括设备号分配、数据结构初始化和设备创建过程;展示了重要的file_operations结构体,特别是ioctl接口的实现细节,该接口通过不同的命令号支持SPI模式、位序、速度等参数的读写操作。驱动通过锁机制确保并发访问安全,并严格区分硬件描述和软件实现。

2026-01-22 10:34:22 254

原创 一、Linux下SPI驱动基础知识

本文介绍了SPI总线的基础知识和工作原理。主要内容包括:1) SPI硬件连接示意图;2) SPI运作的两个核心驱动结构体spi_master和spi_device,它们分别维护控制器和设备的相关属性和功能函数;3) 这些结构体的部分信息来源于设备树文件。文章指出这些是SPI驱动的基础核心内容,并预告下节将讲解如何使用Linux提供的通用驱动来操作SPI设备,类似于I2C子系统中的i2c-dev机制。

2026-01-20 09:36:03 154

原创 五、GPIO模拟IIC

本文介绍了I2C协议的GPIO模拟实现方法。当芯片资源不足或缺乏I2C适配器时,可通过GPIO模拟I2C通信。实现需要:1)配置GPIO引脚为输出/开漏模式;2)外加上拉电阻。内核提供了i2c-gpio.c驱动,通过解析设备树、注册适配器并提供功能函数。文中展示了设备树配置示例,并指导如何确认内核支持此功能,最后给出了挂载启动的操作流程。该方法为资源受限系统提供了I2C通信的替代方案。

2026-01-20 09:32:00 288

原创 四、IIC虚拟Adapter驱动实现

本文介绍了Linux I2C虚拟驱动程序的实现原理与代码。驱动程序通过模拟I2C总线行为,创建了一个地址为0x50的512字节EEPROM虚拟设备空间。关键点包括:1) 实现了i2c_algorithm结构体中的master_xfer函数进行数据传输模拟;2) 定义了功能支持函数i2c_bus_virtual_func;3) 在probe函数中初始化并注册i2c_adapter;4) 使用平台设备驱动模型与设备树兼容。该驱动通过内存缓冲区模拟EEPROM的读写操作,可作为学习I2C驱动开发的参考实现。

2026-01-19 10:29:20 264

原创 三、STM32MP157 下 ap3216c驱动实现

本文主要探讨AP3216C驱动开发中的I2C总线设备-驱动模型。驱动本质是调用I2C-CORE提供的底层函数,与通用驱动i2c-dev.c原理相同。重点在于驱动需配合i2c-client使用,可通过DTS配置或多种方法动态创建client。无论采用echo命令、DTS还是API方式,都必须指定总线、设备名和I2C地址三个关键属性。文章还指出,I2C-Tools的核心功能本质上也是通过调用这些底层接口实现设备访问的。

2026-01-19 10:28:55 196

原创 二、基于I2C-Tools工具实现直接访问EEPROM

该代码引用以上函数针对at24c02进行读写。

2026-01-16 11:23:04 160

原创 一、MP157配合I2C-Tools+APC3216C案例分析

解压修改Makefile编译完成tools文件夹下有文件。

2026-01-16 10:51:36 201

原创 六、层级中断控制器处理流程+代码

1.理清层级中断控制器驱动的处理流程2.写出来代码。

2026-01-07 11:41:05 382

原创 五、链式中断控制器处理流程+代码

1.写明白链式中断控制器处理流程以及代码。

2026-01-06 19:50:26 255

原创 四、STM32MP157 GPIO 中断机制解析:从 EXTI 到 GIC 的完整工作流程

1.STM32MP157的GPIO中断框架以及涉及到的寄存器…2.中断类型,中断状态,GIC工作流程。

2026-01-06 10:54:01 935

原创 三、手写按键驱动程序流程

本文介绍了基于Linux GPIO子系统的按键驱动开发流程。驱动程序通过设备树匹配GPIO资源,在probe函数中获取GPIO编号和中断号,注册中断处理函数。核心内容包括:1) 定义gpio_key结构体管理GPIO资源;2) 实现中断处理函数gpio_key_isr响应按键事件;3) 使用platform_driver框架实现设备树匹配和资源管理。驱动支持多个GPIO按键,通过of_gpio_count获取设备树中定义的按键数量,并为每个GPIO分配中断处理。代码示例展示了完整的驱动实现,包括模块初始化、

2026-01-05 16:46:11 315

原创 二、中断过程处理以及涉及到的结构体详解

其实整体流程就是1.GIC初始化的时候,属于系统初始化,特别早。把irq_domain建立好了,这里边的映射关系都没搞好,只有空的映射表。一堆hwirq,以后留着用2.用到的外设驱动,probe的时候,读取设备树,影射了hwirq和irq之间的关系。irq_desc把这些中断处理函数ISR也挂宅好了。3. 触发了外设,cpu第一时间读取hwrq 查irq_domian表 找到irq的值进而找到irq_desc能执行里边的处理函数总结硬件给 hwirq,Linux 认 irq,

2026-01-05 11:51:39 354

原创 一、中断的概念以及触发流程(图片版)

本文提出了一套通过任务关卡学习Linux中断子系统的方法,替代传统视频教学。该方法设计了系列实践任务,包括理解中断基础知识、绘制中断处理流程图等。关键点包括:1)Linux中断不允许嵌套以防止栈溢出;2)中断处理必须快速响应;3)CPU通过中断控制器(GIC)识别外设中断;4)Linux抽象中断机制实现硬件无关性。通过任务驱动的源码分析和问题解答,帮助学习者系统掌握中断处理流程、GIC作用及内核中断抽象层的设计原理。

2026-01-02 23:21:58 301

原创 五、GPIO x pinctrl 真正合体

本文介绍了Linux内核中pinctrl和GPIO子系统的映射机制及LED驱动实现。pinctrl负责引脚复用功能配置,GPIO子系统管理引脚读写操作,二者通过gpio-ranges建立映射关系。具体实现包括:①设备树声明pinctrl、GPIO bank和gpio-ranges;②pinctrl子系统注册引脚功能;③GPIO子系统注册gpio_chip并建立映射。在LED驱动示例中,通过设备树配置PF10为GPIO输出模式,驱动代码使用pinctrl_get_select_default()使能引脚配置,

2025-12-23 16:33:27 765

原创 四、虚拟LED驱动调用虚拟GPIO驱动

本文介绍了如何通过虚拟LED驱动配合GPIO控制器驱动来操作GPIO。主要内容包括: 区分GPIO控制器驱动(底层)和LED驱动(业务层)的不同作用 LED驱动通过GPIO控制器驱动操作GPIO0,低电平点亮LED 提供了完整的虚拟GPIO控制器驱动代码,实现了GPIO方向设置、值读写等功能 给出了LED驱动框架代码,包括文件操作接口和GPIO操作 通过设备树将LED驱动节点与虚拟GPIO关联 该方案展示了Linux驱动分层设计思想,业务驱动通过标准GPIO接口调用底层控制器驱动,实现了驱动模块间的解耦与复

2025-12-23 10:38:45 357

原创 三、用「虚拟 GPIO」搞懂抽象(最关键)

本质上是调用了gpiolib里边的函数层层进入了我们写了的chip里的函数。

2025-12-22 16:00:07 196

原创 二、顺着源码“走一遍 GPIO 生命周期

为什么stm32mp157的GPIO驱动在pinctrl目录下而不在gpio下?因为STM32是GPIO控制器和pinctrl强耦合的。GPIO是pinctrl的一个功能子集。找pinctrl-stm32.c 而不是 pinctrl-stm32mp157.c后者描述的是mp157有哪些引脚以及服用能力前者才是真正的驱动实现gpio_chip / irq_chip / pinctrlgpio_chip 不是“独立存在的”它是 STM32 GPIO bank 的一个成员。

2025-12-22 12:36:08 929

原创 一、GPIO子系统概念解析

本文介绍了一个Linux驱动开发学习专栏,通过五个阶段任务式学习GPIO子系统。首先通过手绘全景图展示子系统架构,然后解答两个关键问题:1) GPIO子系统的作用是统一接口、屏蔽硬件差异、资源管理和功能扩展;2) GPIO子系统与Pinctrl子系统的边界在于,前者负责逻辑GPIO管理,后者处理引脚物理复用和电气配置。文章采用通俗易懂的语言,帮助初学者理解Linux驱动开发中的GPIO子系统框架设计思想及其实际应用价值。

2025-12-17 19:48:53 180

二、代码案例+杂项124

二、代码案例+杂项124

2026-01-30

二、代码案例+杂项124

二、代码案例+杂项124

2026-01-30

二、代码案例+杂项124

二、代码案例+杂项124

2026-01-30

一、Input框架基础

一、Input框架基础

2026-01-30

五、console驱动注册过程+编写

五、console驱动注册过程+编写

2026-01-28

四、编写虚拟驱动程序运行+调试

四、编写虚拟驱动程序运行+调试

2026-01-28

五、SPI SLAVE MODE框架详解

五、SPI SLAVE MODE框架详解

2026-01-23

三、编写SPI设备驱动程序-两个案例

123

2026-01-23

四、IIC虚拟Adapter驱动实现

四、IIC虚拟Adapter驱动实现

2026-01-16

三、STM32MP157 下 ap3216c驱动实现

三、STM32MP157 下 ap3216c驱动实现

2026-01-16

二、基于I2C-Tools工具实现直接访问EEPROM

二、基于I2C-Tools工具实现直接访问EEPROM

2026-01-16

五、GPIO x pinctrl 真正合体

五、GPIO x pinctrl 真正合体

2025-12-23

空空如也

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

TA关注的人

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