自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下设备树解析流程

本文主要介绍设备树相关概念,重点介绍内核设备树根结点下的compatible匹配开发板,以及设备树DTB文件如何解析为device_node Tree

2026-04-28 20:53:52 431

原创 Linux下单总线通信协议时序被破坏分析及解决

本文分析了Linux平台下DHT11温湿度传感器驱动中出现的时序问题。通过ftrace追踪发现,由于Linux线程调度机制导致DHT11单总线协议的100us级数据脉冲被中断(调度延迟可达1000us)。解决方法是在数据读取关键代码段使用preempt_disable()禁止内核抢占,确保时序完整性。测试表明该方法有效解决了数据读取失败问题,同时避免了长时间禁止中断的风险。文章提供了详细的内核配置、ftrace使用方法和代码修改方案,为类似嵌入式Linux驱动开发中的时序问题提供了参考解决思路。

2026-04-20 19:19:29 387

原创 中断+定时器+异步通知实现人体红外传感器驱动

本文介绍了基于platform驱动框架的HC-SR501人体红外传感器驱动实现方案。驱动采用中断+定时器+异步通知机制,支持同时管理多个传感器设备。主要内容包括:1) 通过platform框架实现驱动与设备的分离,支持多设备兼容;2) 使用中断检测传感器状态变化,配合定时器消除引脚抖动;3) 采用异步通知机制唤醒应用程序读取数据;4) 详细展示了驱动架构,包括设备号分配、字符设备注册、GPIO申请等关键实现。该方案实现了高效的多设备管理,并为应用程序提供了事件驱动的数据获取方式。

2026-04-12 16:54:15 350

原创 一文打通Linux下 ov5640摄像头驱动移植(实践部分)

本文介绍了在i.MX6ULL开发板上移植OV5640摄像头驱动的过程。首先分析了NXP提供的设备树配置,发现电源引脚与正点原子开发板原理图不符,修改了设备树中的GPIO引脚配置。其次在驱动层修改了像素格式设置函数,新增了RGB565格式支持,并完善了分辨率设置逻辑。最终实现了OV5640摄像头在1024×600分辨率LCD上的图像显示功能。文章提供了设备树修改细节和驱动代码关键部分的实现方法,为类似嵌入式摄像头移植项目提供了参考。

2026-04-08 19:15:02 581

原创 一文打通Linux 下ov5640 摄像头驱动的移植(理论部分)

本文主要是基于正点原子linux 的imx6ull阿尔法开发板,在nxp出厂的内核和设备树上移植ov5640摄像头驱动,使之适配阿尔法开发板的lcd,成果显示摄像捕获的头图片

2026-04-08 18:57:05 601

原创 手把手教你imx6ull dht11驱动编写

本文介绍了基于i.MX6ULL平台的DHT11温湿度传感器驱动开发。主要内容包括:1) 设备树配置,选用GPIO1_IO02引脚并添加上拉电阻;2) DHT11单总线通信协议实现,包括初始化流程、起始信号发送和从机响应检测;3) 数据读取方法,通过判断高电平持续时间区分0/1数据位,并完成40位数据的校验;4) 驱动框架采用platform+misc杂项设备驱动模式,实现了数据读取和校验功能。开发过程中需注意GPIO空闲状态保持高电平,读取间隔需大于2秒。该驱动可稳定获取温湿度数据,精度达到湿度±1%、温度

2026-03-26 16:29:40 257

原创 正点原子imx6ull iic驱动无法probe原因分析

摘要:本文分析了I2C驱动中仅使用设备树compatible匹配方式失败的原因。通过设备检测、内核源码调试发现,虽然of_driver_match_device()匹配成功,但i2c_device_probe()函数会强制检查id_table存在性,导致仅使用compatible匹配时无法执行probe。这与platform驱动不同,是I2C总线特有的限制。最终确认需同时提供id_table才能正常加载驱动,解释了混合使用两种匹配方式才能成功的原因。

2026-03-20 10:55:45 387

原创 xv6 lab6 cow

本文介绍了xv6操作系统中实现写时复制(Copy-on-Write, COW)的实验过程。实验通过修改fork机制,使子进程共享父进程的物理页而非直接复制,仅在需要写入时才进行实际复制。关键实现包括:1) 添加PTE_COW标志位标记共享页;2) 引入引用计数机制跟踪物理页使用情况;3) 修改内存管理函数kalloc和kfree以支持引用计数;4) 在页错误处理中实现COW逻辑。实验还解决了父子进程生命周期不同步、内核空间写操作等问题,最终实现了高效的写时复制机制,显著减少了不必要的内存复制开销。

2026-01-10 15:44:52 1096

原创 xv6 lab4 trap

lab4 trap实验思路及解析

2026-01-01 22:43:38 1194

原创 xv6 进程调度

xv6 操作系统的进程调度机制的概述,以及程序实现分析

2026-01-01 21:35:43 714

原创 xv6 lab3 pagetable

xv6 2020 lab3 实验详解

2025-12-20 09:53:12 1003

原创 xv6 页表部分源码解析

本文介绍了页表的基本原理及其在xv6操作系统中的实现。主要内容包括:页表的作用是实现进程间强隔离,通过虚拟地址映射保护物理内存;RISC-V Sv39架构使用39位虚拟地址和三级页表结构,每级页表通过9位索引查找页表项;内核地址空间采用直接映射和非直接映射相结合的方式,保护内核栈和用户空间;详细解析了xv6中页表操作的三个核心函数(walk、mappages、kvmmap)的实现逻辑,以及如何为内核页表建立直接映射。文章还讨论了页表的内存开销、虚拟地址空间划分等关键问题。

2025-12-19 21:45:53 682

原创 xv6 2020 lab2

本文摘要主要介绍了xv6操作系统中的系统调用机制及其实现流程。首先分析了系统调用的完整执行路径,从用户态封装函数、ecall指令触发陷阱,到内核态处理流程。然后详细解析了关键文件的作用:user.h声明用户空间系统调用,usys.pl生成汇编存根,syscall.c实现系统调用分发和处理逻辑。重点描述了trace系统调用的实验实现方案,通过在进程结构体中添加mask数组来标记需要追踪的系统调用,并修改syscall()函数在调用前后进行判断和输出。最后给出了syscall.c中系统调用名称数组的定义和追踪逻

2025-12-06 17:23:45 1059

原创 nfs虚拟机直连imx6ull开发板

本文介绍了如何配置NFS虚拟机直连imx6ull开发板的方法。主要包括三个部分:1) IP地址设置,确保主机、虚拟机和开发板处于同一网段;2) 网络配置步骤,详细说明如何设置主机有线网卡、虚拟机桥接模式以及开发板静态IP;3) NFS服务配置,包括创建NFS共享目录、修改exports文件以及在开发板上挂载NFS目录。通过这种方法,开发板可以方便地访问虚拟机共享目录中的文件,实现了主机-虚拟机-开发板三者的网络互通和文件共享功能。

2025-11-14 19:25:22 537 2

修改过后的驱动源码,可以参考

修改过后的驱动源码,可以参考

2026-04-08

空空如也

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

TA关注的人

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