linux平台设备驱动

[Linux外设驱动详解]11. 平台设备驱动(Platform Driver) 本文介绍了Linux内核中的平台设备驱动(Platform Driver)框架,主要内容包括: 平台设备驱动概述:用于管理片上外设(SoC内置外设),提供统一的注册和匹配机制。 平台总线(platform_bus):虚拟总线,负责平台设备和驱动的匹配,包含核心数据结构platform_bus_type。 平台设备(platform_device):描述硬件设备的结构体,包含资源定义(内存、中断等)。 平台驱动(platform_driver):设备驱动结构体,包含probe/remove等操作函数。 设备与 阅读详情
 一、platform_device的使用流程:声明struct platform_device *p_device

 

 

Platform_device的使用1、平台设备,通过struct platform_device 来进行描述。 struct platform_device {const char * name; //平台设备的名称 int id;//设备的ID,当ID=-1的时候,表示设备名称只有一个,否则表示设备编号struct device dev; u32 num_resources; struct resource * resource;struct platform_device_id *id_entry; };2、其中platform_device内包含两个重要的结构体,一个是struct device 该结构体描述设备相关的信息设备之间的层次关系以及设备与总线驱动的关系。struct device { struct device *parent;//指向父设备节点struct device_private *p;//描述的是klist,struct klist是对struct list_head的扩展,在此它的作用是连接设备列表中的孩子列表。Struct klist_node表示它的兄弟节点。struct kobject kobj;const char *init_name; /* initial name of the device */struct device_type *type; /*device_type结构表示设备的类型。一个设备类或者总线可以包含不同类型的设备,例如“分区”和“磁盘” , “鼠标”和“事件” 。device_type就可以标识某个设备类型和该设备的特有信息,它就等同于kobject结构中的kobj_type一样。如果name数据成员被指定,那么uevent成员函数就会把它包含在DEVTYPE变量中。*/struct semaphore sem; /* 该信号量用于同步其驱动 */struct bus_type *bus; /*设备所在的总线,指向所连接的总线 */struct device_driver *driver; /* 管理该设备的驱动 */void *driver_data; /* 设备的私有数据指针*/void *platform_data; /* Platform specific data, device core doesn't touch it */ struct dev_pm_info power; #ifdef CONFIG_NUMAint numa_node; /* NUMA node this device is close to */ #endifu64 *dma_mask; /*指向设备DMA屏蔽字。*/u64 coherent_dma_mask;/* Like dma_mask, but for alloc_coherent mappings as not all hardware supports 64 bit addresses for consistent allocations such descriptors. */struct device_dma_parameters *dma_parms;struct list_head dma_pools; /* dma pools (if dma'ble)聚集的DMA缓冲池 */struct dma_coherent_mem *dma_mem; /* 设备一致性DMA的屏蔽字 override *//* arch specific additions */ struct dev_archdata archdata;dev_t devt; /* dev_t, creates the sysfs "dev" */spinlock_t devres_lock; 设备自旋锁,用于互斥访问设备 struct list_head devres_head;struct klist_node knode_class; struct class *class;struct attribute_group **groups; /* optional groups */void (*release)(struct device *dev);释放设备描述符的回调函数。 };3、通过struct resource结构体来描述struct resource { resource_size_t start; resource_size_t end ;//资源起始的和结束的物理地址const char *name;//资源的名称 unsigned long flags;;//资源的类型,比如MEM,IO,IRQ类型struct resource *parent, *sibling, *child;;//资源链表的指针 }; 4、platform_device的使用1)声明该结构体struct platform_device *my_buttons_dev;//给该结构体分配空间和初始化。传入的参数为设备名字和设备ID,当ID=-1的时候表明该设备名称唯一my_buttons_dev = platform_device_alloc("my_buttons", -1);声明平台设备的资源struct resource static struct resource key_resource[]= { [0] = {.start = IRQ_EINT1, .end = IRQ_EINT1, .flags = IORESOURCE_IRQ, },[1] = { .start = IRQ_EINT2, .end = IRQ_EINT2, .flags = IORESOURCE_IRQ,}, }; //使用下面函数将该资源添加到平台设备里面去,使用该函数,会为 platform_device 中的resource结构体指针分配空间并且赋值//参数为 (struct platform_device *pdev,struct resource *res, unsigned int num)platform_device_add_resources(my_buttons_dev,key_resource,6); 3)//向系统注册该设备ret = platform_device_add(my_buttons_dev); if(ret)platform_device_put(my_buttons_dev); 并且在退出函数里面将该平台设备注销void platform_device_unregister(struct platform_device *pdev)


Linux驱动开发(5):平台设备驱动 本节实验使用到 EBF6ULL-PRO 开发板上的 RGB 彩灯我们需要将字符设备中的硬件信息提取出来,独立成一份代码,将其作为平台设备,注册到内核中。点亮LED灯,需要控制与LED灯相关的寄存器, 包括GPIO时钟寄存器,IO配置寄存器,IO数据寄存器等,这里的资源,实际上就是寄存器地址,可以使用IORESOURCE_MEM进行处理;除了这些之外,还需要提供一些寄存器的偏移量,我们可以利用平台设备的私有数据进行管理。#define CCM_CCGR1 0x020C406C //时钟控制寄存器。 阅读详情

相关推荐

Linux内核笔记(驱动篇)之 【平台设备驱动模型】

平台设备的资源包括内存、中断、IO端口等。这些资源通常在设备树中进行定义,设备树中的每个设备节点都可以定义其所需的资源信息。以内存资源为例,设备树中定义内存资源的方法如下:其中,memory节点是内存资源的名称,reg属性定义了内存资源的地址和大小。

哆哆jarvis的博客 638

linux设备驱动中ADC的使用

内核源代码arch\arm\plat-s3c24xx\s3c2410-clock.c /* standard clock definitions */ static struct clk init_clocks_off[] = { { .name = "nand", .id = -1, .parent = &clk_h, .enable = s3c2410_clkco

草原骑士的专栏 2556

告别仿真失败!用Sigrity 2022 SystemSI搞定DDR4信号质量仿真的保姆级流程

本文详细介绍了如何使用Sigrity 2022 SystemSI工具进行DDR4信号完整性仿真,提供了一套避免仿真失败、提高仿真精度和加速仿真流程的保姆级方法。从模型验证、设计数据预处理到拓扑构建和参数提取,再到高级调试技巧和仿真加速方案,帮助硬件工程师系统性地解决DDR4信号质量仿真中的常见问题。

weixin_42537499的博客 342

【Linux驱动】平台设备驱动

在之前的字符设备程序中驱动程序,我们只要调用open()函数打开了相应的设备文件,就可以使用read()/write()函数, 通过file_operations这个文件操作接口来进行硬件的控制。这种驱动开发方式简单直观,但是从软件设计的角度看,却是一种十分糟糕的方式。它有一个严重的问题,就是设备信息和驱动代码杂糅在一起,在我们驱动程序中各种硬件寄存器地址随处可见。本质上,这种驱动开发方式与单片机的驱动开发并没有太大的区别,一旦硬件信息发生变化甚至设备已经不在了,就必须要修改驱动源码。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1846

iPad秒变Mac副屏的隐藏技巧:用BetterDisplay实现无线竖屏+90度锁定

本文详细介绍了如何利用BetterDisplay软件突破苹果原生“随航”(Sidecar)功能的限制,将iPad无线设置为Mac的竖屏副屏,并实现90度方向锁定。通过创建虚拟显示器、配置分辨率与旋转参数,并校准鼠标指针,用户可以高效利用iPad的纵向空间进行文档阅读、编码等工作,显著提升多屏协作效率。

weixin_29266647的博客 603

WinDbg调试工具安装全攻略:从下载到配置的保姆级教程(Windows 10/11适用)

本文提供了一份详细的WinDbg调试工具安装与配置指南,适用于Windows 10/11用户。文章对比了WinDbg Preview独立版与SDK内置经典版的区别,并手把手指导从Microsoft Store或Windows SDK完成安装。核心部分重点讲解了如何配置符号文件路径与源代码路径,这是让WinDbg发挥强大调试功能的关键步骤,并针对常见安装问题提供了实用的排错方法。

hp777的博客 385

linux驱动 平台设备驱动模型

文章目录一、设备驱动模型的三大组件1. 总线1. 总线、设备、驱动关系2. 总线数据结构 bus_type3.bus_type声明实例4.总线私有数据bus_type_private5.总线注册bus_register()2. 总线属性和总线方法1. 总线的属性bus_attribute2. 创建和删除总线属性3. 总线上的方法3. 设备1. device结构体2. 设备注册和注销3. 设备属性4. 驱动1. 设备驱动device_driver2. 驱动举例3. 驱动程序注册和注销4. 驱动的属性二、平台设

weixin_42109053的博客 7016

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

weixin_45011386的博客 3823

【Linux】平台设备驱动

驱动代码中最好不要使用全局变量,因为驱动一般是支持多设备的,如果有全局变量会有冲突。字符设备驱动中在open函数中可以使用container_of拿到设备信息,但是杂项设备驱动中怎么拿到设备信息暂时未知。

目标:MVP 1380

图像去模糊(二)——Richardson–Lucy算法

Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)

xueruhongchen的博客 3万+

若依前后端分离版实战:MQTT集成保姆级教程(含MQTTX测试工具使用)

本文详细介绍了在若依前后端分离架构中集成MQTT协议的完整流程,包括环境搭建、核心配置、安全实践及性能优化。通过MQTTX测试工具的使用和实战代码示例,帮助开发者快速实现物联网场景下的实时通信功能,提升系统稳定性和效率。

weixin_30664051的博客 456

Linux——平台设备及其驱动

要满足 Linux 设备模型,就必须有总线、设备和驱动。但是有的设备并没有对应的物理总线,比如 LED、RTC 和蜂鸣器等。为此,内核专门开发了一种虚拟总线一-platfomm总线,用来连接这些没有物理总线的设备或者一些不支持热插拔的设备,DM9000 网卡设备就是挂接在这条总线上的。

qq_52479948的博客 1846

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1650

linux驱动开发篇(四)—— platform平台设备驱动

linux系列目录: linux基础篇(一)——GCC和Makefile编译过程 linux基础篇(二)——静态和动态链接 ARM裸机篇(一)——i.MX6ULL介绍 ARM裸机篇(二)——i.MX6ULL启动过程 ARM裸机篇(三)——i.MX6ULL第一个裸机程序 ARM裸机篇(四)——重定位和地址无关码 ARM裸机篇(五)——异常和中断 linux系统移植篇(一)—— linux系统组成 linux系统移植篇(二)—— Uboot使用介绍 linux系统移植篇(三)—— Linux 内核使用介绍 li

sinat_31039061的博客 6065

XRoboToolkit —— 基于 PICO 4 Ultra 的机器人遥操作方案(一)

视觉-语言-动作模型(Vision-Language-Action models)的快速发展催生了对大规模、高质量机器人演示数据集的迫切需求。尽管遥操作是数据采集的主要方法,但现有方法存在可扩展性有限、设置流程复杂以及数据质量不佳等问题。本文提出XRoboToolkit,这是一个基于OpenXR标准的跨平台扩展现实(XR)机器人遥操作框架。该系统具备低延迟立体视觉反馈、基于优化的逆运动学算法,并支持多种跟踪模态,包括头部、控制器、手部及辅助运动追踪器。

2506_90492529的博客 3306

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Linux驱动开发笔记(三)平台设备驱动

随着科技的飞速发展,平台设备已成为现代计算机系统不可或缺的重要组成部分。无论是智能手机、平板电脑,还是嵌入式系统、数据中心服务器,平台设备都承载着系统运行的核心功能。因此,平台设备驱动的开发与优化,对于保障系统稳定性、提升性能以及满足用户日益增长的需求具有至关重要的作用。在接下来的章节中,我们将详细介绍该驱动的设计思路、实现原理、功能特性以及使用方法,希望能够为广大读者提供有价值的参考和借鉴。//定义一个resource结构体,用于存放上述的寄存器地址,提供给驱动使用。

sincerelover的博客 2003

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux中的平台设备驱动模型

在 Linux 的设备驱动模型中,关心总线、设备和驱动这 3 个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。   平台设备匹配的依据是:          1)根据平台设备结构和平台驱动结构中的name成员进行匹配。-- 一个设备对应一个驱动          2)根据平台设备结构中的n...

仗劍走天涯 2384

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux平台设备框架驱动

平台设备框架(platform)是将一个驱动分为设备层和驱动层两个部分,通过总线模型将设备和驱动进行绑定。在系统中每注册一个设备,都会与之匹配一个驱动,同样的,每注册一个驱动也会与之匹配一个设备。通常 Linux 设备和驱动通常都需要挂接在一种总线上,对于本身依附于 PCI、 USB、 I2 C、 SPI 等的设备而言,这自然不是问题,但是在嵌入式系统里面, SOC 系统中集成的独立的外设控制器、挂接在 SOC 内存空间的外设等却不依附于此类总线。

weixin_44453694的博客 1652

Linux平台设备驱动

Linux内核使用总线来处理设备,总线连接了CPU与这些设备。有些总线足够智能,并内嵌了可发现性逻辑以枚举连接到总线上的设备。在引导阶段的初期,Linux内核会请求这些总线提供它们所枚举的设备以及这些设备正常工作所需的资源(如中断线和内存区域)​。PCI、USB和SATA总线都属于这种可发现性总线的范畴。但实际情况往往并不能如我们所愿。有许多设备,CPU仍然无法检测到。其中大部分不可发现的设备位于芯片内部,尽管有些设备位于慢速或低级总线上,这些总线并不支持设备发现。

zhuzewennamoamtf的博客 765

Linux平台设备驱动模型详解

摘要 本文以Rockchip RK3568芯片的PWM驱动为例,深入分析Linux平台设备驱动模型。通过研究drivers/pwm/pwm-rockchip.c源码,阐述了平台设备、总线、驱动程序之间的关系,重点探讨了设备树节点到平台设备的转换机制、设备与驱动的匹配绑定流程,揭示了平台总线的软件实现本质。文章详细解析了PWM驱动的核心数据结构、功能函数及关键机制,包括寄存器锁定、原子性更新等特性,为理解Linux平台设备驱动开发提供了实践参考。 关键词:Linux驱动、平台设备、设备树、PWM驱动

siny_hj的博客 1328

Linux驱动编程 - platform平台设备驱动总线

Linux系统中的platform平台设备驱动

hinewcc的博客 1719

【linux】驱动-7-平台设备驱动

目录前言7. 平台设备驱动7.1 平台总线7.1.1 平台总线注册和匹配方式7.1.2 源码分析7.2 平台设备7.2.1 platform_device7.2.2 设备信息7.2.3 注册/注销平台设备7.3 平台驱动7.3.1 platform_driver7.3.2 注册/注销平台驱动7.3.3 平台驱动获取设备信息参考 前言京东优惠券 https://m.fenfaw.net/ 区分设备驱动模型和平台设备驱动模型。设备驱动模型 可以理解为 总线、设备、驱动。平台设备驱动模型 就是那些 Linux .

nidongla的博客 747

S3C2440驱动篇—Linux平台设备驱动

Linux平台设备驱动中platform_device、platform_driver怎么在驱动中实现

Zechin的专栏 3458

linux设备驱动开发详解_Linux设备驱动开发 - 平台设备驱动

Linux2.6的内核中引入了一种新的设备驱动模型-平台(platform)设备驱动,平台设备驱动分为平台设备(platform_device)和平台驱动(platform_driver),平台设备的引入使得Linux设备驱动更加便于移植。一、平台设备平台设备结构体:struct platform_device { const char * name; ...

weixin_39840733的博客 232

Linux platform平台设备驱动

Linux platform平台设备驱动

opang的博客 2197
上一篇: Linux 中的 VFS 文件系统机制
下一篇: platform平台设备学习
ADC0809608
博客等级 码龄17年 44粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值