- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 【SDIO】【SDMMC】硬件层
Linux内核使用MMC子系统统一管理MMC、SD和SDIO等存储设备。MMC通信协议通过命令(CMD)、响应(RESP)和数据(DAT)三类信息流实现主机与设备的交互。硬件上采用CLK时钟同步、CMD命令传输和DAT0-7数据总线(可配置4/8位模式)的三线制设计。内核抽象出CID、CSD等关键寄存器管理设备信息,并通过状态机机制完成设备枚举和初始化流程(包括CMD0复位、CMD8版本检查、CMD2获取CID等关键命令)。SD卡在FTL层实现了LBA逻辑地址到物理块的映射,为上层提供统一的块设备接口。整个
2025-11-01 14:31:47
889
原创 【SDIO】【SDMMC】host层详解
本文介绍了MMC/SD主机控制器驱动架构中的关键数据结构和工作原理。核心结构包括mmc_host(描述主机控制器)、mmc_card(描述存储卡设备)和mmc_driver(描述设备驱动)。mmc_host通过mmc_host_ops结构将具体控制器操作抽象出来,实现核心层与硬件控制器的解耦。文章详细分析了mmc_host结构体中的关键参数,如工作频率、电压范围、能力标志等,以及mmc_card结构体对卡类型的区分和特性描述。整体架构通过分层设计,将设备管理、控制器操作等不同功能模块化,提高了系统的可扩展性
2025-10-24 17:42:23
920
原创 【SDIO】【MMC】core层详解
本文介绍了Linux内核中MMC/SD卡驱动核心层的实现机制。核心层通过抽象共性操作,封装了对MMC/SD卡的基本控制功能,包括设备识别、设置、读写等操作流程。文章详细分析了核心层的初始化过程,包括MMC总线的注册(生成/sys/bus/mmc节点)和主机控制器类的注册(生成/sys/class/mmc_host目录)。通过bus_ops结构体和mmc_ops等操作集合,实现了对不同类型存储卡(MMC、SD、SDIO)的差异化支持,并提供了热插拔检测、电源管理、硬件复位等关键功能接口。
2025-10-24 14:25:04
389
原创 【SDIO】【SDMMC】block层详解
本文分析了Linux内核中MMC/SD卡块设备驱动的实现机制。主要包含以下内容:1) 块设备驱动的初始化流程,包括register_blkdev注册块设备、mmc_register_driver注册驱动到MMC总线;2) MMC块设备的核心数据结构mmc_blk_data及其初始化过程;3) 关键函数mmc_blk_probe的实现细节,描述了设备探测、请求队列初始化和分区管理等核心功能;4) 同步机制和错误处理流程。该驱动采用标准的块设备驱动框架,通过request_queue实现异步I/O请求处理,支持
2025-10-18 15:30:37
937
原创 【SDIO】【SDMMC】应用层fio和dd测速
fio和dd测试读速率差异的主要原因是实现机制不同: 并发性: fio使用异步IO和并行处理(iodepth=32),可同时提交多个IO请求 dd是单线程串行处理,每次只能执行一个IO操作 IO机制: fio采用libaio引擎,支持批量IO提交和异步完成 dd使用同步阻塞IO,每次read/write都需等待完成 缓冲策略: fio预分配多个缓冲区,支持并行读写 dd仅使用1-2个缓冲区,无预读机制 系统调用: fio通过io_submit/io_getevents批量处理IO dd每次执行单个read/
2025-10-18 15:25:55
383
原创 【SDIO】【SDMMC】【驱动框架】
本文介绍了Linux内核中的MMC子系统架构及初始化过程。MMC子系统统一管理MMC、SD和SDIO三种相关技术,分为Host层(主控制器驱动)、Core层(协议实现)和Card层(块设备驱动)三个层次。子系统初始化包括总线、控制器和块设备三部分,分别位于drivers/mmc目录下的host、core和card子目录。主设备号179用于标识SD/MMC卡块设备,core层还提供主控制器对象管理接口。整体架构清晰体现了Linux内核设备驱动的分层设计思想。
2025-10-17 14:11:11
350
原创 【MMC】【FIO测试】
本文介绍了fio存储性能测试工具的使用方法。fio作为专业测试工具结果准确,但需要移植相关库且测试门槛较高。使用前需用dd命令清空测试分区(mmcbik0p10),否则可能导致读速率误差。文中提供了具体的读写测试命令:读测试采用128k块大小、32队列深度和4线程;写测试采用4k随机写入模式。两种测试均需先执行echo 3清除缓存,并设置1G测试数据量和100秒运行时间。测试结果通过group_reporting汇总显示,图示展示了实际测试效果。
2025-10-17 14:05:22
287
原创 【SDIO】【SDMMC】SDMMC快速使用
本文介绍了SD卡的基本技术参数和调试方法。主要内容包括:1)SD卡9个引脚功能说明;2)6种内部寄存器功能描述;3)不同协议规范下的速度等级划分;4)SD/SDHC/SDXC三种容量规格对比;5)设备树配置示例,详细说明时钟、总线宽度等关键参数;6)调试信息查看方法,包括/sys节点下的时钟、电压等参数查询;7)插入/拔出SD卡时的关键日志信息。文章为SD卡的技术应用和调试提供了系统性的参考信息。
2025-10-16 09:15:33
884
原创 【SDIO】【EMMC】EMMC驱动快速使用
摘要: 本文介绍了eMMC存储器的基本原理与配置方法。eMMC集成了控制器,采用标准接口管理闪存,开发者只需遵循协议即可操作。原理图分析重点说明了电源(VCC、VCCQ)、地线(VSS/VSSQ)以及信号线(CLK、CMD、DATA等)的连接设计。设备树配置部分详细解析了时钟参数(assigned-clocks/rates)、工作模式(HS200/HS400)等关键设置项。最后提供了三种调试方法:通过/sys节点查看实际工作频率、使用k3conf工具查询eMMC时钟状态,以及通用时钟树监控方式。
2025-10-16 09:11:01
727
原创 【DMA】【三】Linux DMA engine
DMA(直接内存访问)是一种无需CPU参与的数据传输方式,通过DMA控制器直接在内存间搬运数据,显著降低CPU占用率。其工作原理是CPU配置DMA控制器的源地址、目标地址和传输长度后,DMA自行完成数据传输并触发中断通知CPU。关键结构体dma_slave_config用于配置传输参数,包括方向、地址、数据宽度等。使用流程包括申请DMA通道、配置参数、提交传输请求、执行传输及释放通道。特别适用于SPI等外设数据传输场景,能有效提升系统性能。
2025-10-10 09:37:29
753
原创 【DMA】【二】Linux DMA mapping
Linux系统中的DMA映射机制为设备驱动开发提供了多种内存管理方式。主要类型包括一致性DMA、流式DMA、Scatter-Gather、DMA池和CMA,各具特点:一致性DMA操作简单但性能较低;流式DMA性能高但需手动同步;Scatter-Gather可处理分散内存但复杂度高;DMA池适合频繁分配小块内存;CMA则适用于大块连续内存需求。此外,缓存同步函数如dma_sync_sg_for_device()确保了DMA操作的数据一致性。开发者可根据具体场景选择合适方式,权衡性能与复杂度。
2025-10-10 09:34:46
758
原创 【DMA】【一】概述
Linux DMA子系统主要由5个模块组成:Dma-mapping API提供统一内存映射接口;dmaengine作为核心模块,为DMA设备驱动提供注册和调用接口;virt-dma支持虚拟DMA通道;of-dma处理设备树信息;DMA设备驱动程序实现具体功能;dmatest模块则用于测试DMA操作(如memcpy、memset等)的各种场景。
2025-10-10 09:32:30
284
原创 【SPI】【二】SPI控制器驱动代码详解
本文介绍了基于TDA4平台的SPI控制器驱动流程。首先展示了设备树配置,包括SPI控制器节点定义和参数设置。在驱动实现部分,详细分析了平台驱动注册和probe函数流程:1)获取设备树资源;2)提供SPI传输接口;3)初始化DMA通道;4)配置中断和时钟;5)注册SPI控制器。其中重点说明了transfer_one等关键接口的实现,以及DMA通道分配和资源初始化过程。文章通过代码片段和流程图,清晰地呈现了SPI控制器的完整驱动架构。
2025-09-13 17:46:11
965
原创 【SPI】【一】SPI驱动入门
SPI通信协议解析 SPI(串行外设接口)是一种同步串行通信协议,具有全双工、高速传输特点。其核心优势在于支持连续无中断数据传输,传输速率高于I2C(快近两倍)。SPI采用主从架构,通过4条信号线实现通信:MOSI(主出从入)、MISO(主入从出)、SCLK(时钟)和SS/CS(片选)。通信模式由CPOL(时钟极性)和CPHA(时钟相位)组合成4种工作模式。SPI协议还包含Dual SPI和Queued SPI变种,分别通过优化线路实现双倍和四倍的标准SPI传输速率。
2025-09-13 17:37:00
955
原创 【蓝牙协议】【四】AVRCP 协议详解
本文全面介绍了蓝牙音频控制协议AVCTP及其应用。AVCTP作为音频/视频控制信号传输协议,通过L2CAP通道实现设备间点对点通信,支持双向控制功能。协议采用事务标签(Transaction Label)匹配请求与响应,并通过包类型(Packet Type)字段处理数据分片传输。关键特性包括:支持多连接(每个连接对应唯一L2CAP通道)、命令/响应标识(C/R)区分指令方向。文章还详细解析了控制通道和浏览通道的不同用途,以及AVCTP封包格式(包括事务标签、包类型、C/R等字段)。最后通过实际抓包示例展示了
2025-09-01 07:24:29
1496
原创 【鸿蒙】【四】驱动篇-HDF驱动介绍2
文章摘要: 本文详细介绍了HDF驱动框架中设备启动流程的两个关键子流程。InstallDevices子流程通过while循环遍历hostClnt->unloadDevInfos链表,根据preload字段判断设备的启动条件,符合条件则调用AddDevice函数。AddDevice子流程负责实际加载驱动,包括获取driverLoader实例、创建设备对象和设备节点等步骤。文中提供了核心代码实现,展示了设备状态管理、错误处理等关键逻辑,并特别说明了快速启动模式的处理方式。这两个子流程共同完成了Host下设
2025-08-03 22:23:54
779
原创 【鸿蒙】【三】驱动篇-HDF驱动介绍1
HarmonyOS驱动框架(HDF)采用分层解耦设计,通过C语言面向对象编程实现跨平台兼容。框架分为硬件层、支撑层和内核空间:硬件层包含板级支持芯片和外设芯片;支撑层提供硬件适配和OSAL系统抽象服务;内核空间负责设备建模和管理。HDF通过平台解耦和内核解耦实现"一次开发,多系统部署",其中OSAL层屏蔽不同内核差异,使驱动无需关心底层实现。驱动架构采用模块化设计,包含设备主机管理、服务中枢等组件,为开发者提供统一接口。
2025-08-03 22:22:41
1123
原创 Android10 rk平台OTA升级过程梳理一
工作中需要使用OTA对设备进行升级,于是梳理了一下OTA前后的升级流程,将过程制作成了过程图,可以按这个过程图去查找代码,分析请看后面的梳理,所有的代码环境:android10。
2023-09-16 23:23:39
992
原创 【问题解决】【触摸屏】不跟手问题排查
我们平板设置适配别家的视频会议系统app,其中遇到了白板手写无法识别的问题,但是使用手机就可以正常识别,这个问题的迷惑性很强,首先,我们平板的触摸是可用的,正常使用没问题。一开始我们是怀疑是app的问题,但是解释不通为什么手机可以使用,幸亏继续往下查找了一步,最后与厂家沟通,定位原因是报点率比较低,低于硬件参数的一半。定义:触摸屏每秒钟向上报的触点信息的次数,跟通信协议也有关系,一般报点率会在60-100之间,意思是1s钟上报60个点或者100个点,如果为100个点,则2个点直接的时间间隔为10mss。
2023-09-06 17:27:14
1294
原创 android12 settingprovider cat乱码
注意,可能需要下一次设置才能生效,所有我将这个设置加到了ROM里,修改(device/rockchip/rk3588/rk3588_box/rk3588_box.mk)测试是可用的。经过查找,里面的内容并非是乱码,只是被写成了二进制文件,如果想修改成明文,可以使用。
2023-09-06 16:40:30
458
原创 【git管理工具】【二】android代码版本管理-gitweb安装
Gitweb提供了git版本库的图形化web浏览功能。可以到网站体验下效果安装系统 Ubuntu 18.04。
2022-10-07 10:07:42
1062
原创 【网卡驱动】【px30】 lan8720移植
公司需要移植一个LAN8720驱动过来,看了一下,不算复杂,只需要修改一下设备树和Makefile即可过程记录一下。
2022-10-02 21:31:44
487
原创 【git管理工具】【一】android 代码版本管理 - gerrit3 安装
现状:我们一直使用的是集中式的版本管理工具SVN,由专人维护,个人管理个人的代码,代码比较分散,代码分支和合并比较混乱,由此,考虑使用分布式版本管理工具git,但是对于android这种超大型的项目(数百个git库),使用单纯的git服务器已经不能满足需求了,需要采用google原厂的repo方式 (封装了git服务器),经过查找资料,服务端决定采用gitolite + gerrit + repo的方式管理源代码,正好我们新安装了一台服务器,在这台服务器安装最新gerrit3
2022-10-02 21:07:19
1228
原创 android4.4 dhcp莫名断网
android4.4 dhcp time out dhcp_do_request failed : eth0 (new)
2022-10-02 20:46:17
789
原创 0 android bringup过程梳理
android系统添加一个产品 编译遇到的问题 clang++: error: unable to execute command: Segmentation fault (core dumped)clang++: error: clang frontend command failed due to signal (use -v to see invocation)
2022-06-03 16:54:57
1495
原创 【瑞芯微】【sd卡驱动】sd卡移植的问题解决
写在前面在给px30移植sd的时候,发现有两个问题1 sd卡识别率低,有一部分sd卡识别不了,主要是一些老的sd卡2 即使sd卡已经识别,但是给sd卡写入内容之后,sync之后消失针对这两个问题,看了一下sd的相关的知识网上的一些基础知识已经很完善了,主要是记录一下遇到的问题和解决方法,取自网上,分享网上。问题1可以正确识别fat格式,可以正常读到sd卡内容,但是写操作之后,会打印 I/O error 或者写操作没报错 但是执行sync之后,内容消失查看内核打印信息6,843,148882
2022-05-15 17:02:58
785
原创 pinctrl 子系统
文章目录写在前面引入pinctrl的意义pinctrl的主要概念pin controller数据结构驱动代码执行流程client device:数据结构client节点的pinctrl构造过程设备树反汇编写在前面这一篇是学习韦东山老师视频随手做的笔记。引入pinctrl的意义Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:● 引脚枚举与命名(Enumerating and naming)● 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能●
2022-05-03 10:07:00
631
原创 【声卡驱动】【一】 px30 - rt5640音频驱动
文章目录写在前面ALSA代码架构重要概念a Kcontrolb widgetc route工具使用amixer 的用法arecordaplayalsactrl如何设置通路1 确认出入口2 mic通路3 speaker通路耳机拔插检测遇到mic不收声的问题写在前面这一章节主要是介绍px30移植5640驱动的过程,实现的目标如下1 rt5640驱动移植2 alsa通路配置3 alsa通路保存默认配置信息如果对alsa框架想详细了解可以参考这位大神的博客。https://www.cnblogs.c
2022-04-30 19:33:47
1716
3
原创 0 px30 linux bringup时buildroot的修改
文章目录写在前面buildroot简介修改编译选项文件系统分区buildroot遇到的问题(比较杂)1 UI界面方向翻转180度2 报错3 buildroot编译时文件下载失败写在前面主要是记录一下rk平台px30 linux移植过程中,buildroot做的一些修改和注意事项,记录一下,希望后来人可以少踩一点坑。buildroot简介Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile(*.mk)脚本和Kconfig(Config.i
2022-04-30 12:02:15
946
原创 3.0 rk平台如何操作GPIO
文章目录写在前面1 使用系统默认的方式2 使用IO命令控制写在前面想操作一下GPIO的原因是wifi软重启的时候起不来,但是断电重启就可以,所以怀疑可能不是驱动的问题,有可能是电源引脚需要拉低拉高刺激他一下,将这段经历记录一下以GPIO1_C0为例 说明RK平台如何使用GPIO系统1 使用系统默认的方式[root@px30_64:/]# cat /sys/kernel/debug/gpio GPIOs 0-31, platform/pinctrl, gpio0:gpio-2 (
2022-04-30 09:09:15
1461
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅