当前位置: 首页 > news >正文

【Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述】

Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述

目录

  • Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述
      • 前述
      • 主要特点:
      • 平台设备的作用
      • 平台设备的注册与注销
        • 1. `platform_device_register_simple()`
        • 2. `platform_device_unregister()`
      • 平台设备注册示例
        • 示例代码:
      • 代码详细解释
      • 编译与加载
        • 1. 创建 `Makefile` 文件
        • 2. 编译内核模块
        • 3. 加载模块
        • 4. 查看设备
        • 5. 卸载模块
        • 6. 清理编译文件
      • 总结

前述

在嵌入式系统中,平台设备(Platform Devices)用于表示硬件设备,通常是与特定平台(如 ARM、MIPS 等)相关联的设备。平台设备不依赖于特定的总线(例如 PCI、USB 等),而是通过静态配置或设备树(Device Tree)来进行配置。平台设备广泛应用于嵌入式硬件,如 GPIO、SPI、I2C 控制器、内存等。

主要特点:

  1. 无需总线支持: 与常见的 PCI 或 USB 设备不同,平台设备直接与硬件平台相关联,不需要外部总线支持。
  2. 静态配置: 配置通常通过设备树(Device Tree)或静态方式进行,而不是动态的总线扫描。
  3. 注册方式: 平台设备使用 platform_device_register()platform_driver_register() 来注册。

平台设备的作用

平台设备通常用于嵌入式系统中,表示直接连接到处理器或 SoC(系统级芯片)的硬件设备。这些设备的驱动程序在内核中注册,并且设备通常在启动时通过设备树或手动配置进行注册。常见的硬件如:

  • GPIO 控制器
  • SPI 控制器
  • I2C 控制器
  • UART 设备
  • 内存映射设备(如 RAM、EEPROM)

平台设备的注册与注销

1. platform_device_register_simple()

该函数是一个简单的接口,用于注册一个平台设备。它将设备的名称、设备 ID、设备资源等信息注册到内核中。

2. platform_device_unregister()

该函数用于注销一个平台设备,将设备从系统中删除。

平台设备注册示例

在以下代码中,我们通过 platform_device_register_simple() 来注册一个平台设备,使用 platform_device_unregister() 来注销设备。

示例代码:
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/kernel.h>
#include <linux/init.h>// 设备对象指针
static struct platform_device *pdev;// 初始化函数
static int __init platform_dev_init(void)
{// 注册平台设备pdev = platform_device_register_simple("my_platform_device", -1, NULL, 0);if (IS_ERR(pdev)) {pr_err("Failed to register platform device\n");return PTR_ERR(pdev);}pr_info("Platform device registered successfully\n");return 0;
}// 卸载函数
static void __exit platform_dev_exit(void)
{// 注销平台设备platform_device_unregister(pdev);pr_info("Platform device unregistered successfully\n");
}module_init(platform_dev_init);
module_exit(platform_dev_exit);MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A simple platform device registration example");

代码详细解释

  1. platform_device_register_simple()

    • platform_device_register_simple() 是一个简化的接口,用于注册一个平台设备。
    • 参数说明:
      • "my_platform_device":设备的名称(设备在 /sys/class/platform/ 下的目录名称)。
      • -1:设备 ID(通常是一个唯一标识符,-1 表示自动分配一个设备 ID)。
      • NULL:设备资源(如内存、IO 地址等)。此处 NULL 表示没有资源分配。
      • 0:资源大小(如果没有分配资源,则为 0)。
  2. 设备注册

    • platform_dev_init() 函数中,调用 platform_device_register_simple() 注册一个平台设备。如果设备注册失败(返回 IS_ERR()),则返回错误代码。
    • 如果设备注册成功,会输出日志信息 "Platform device registered successfully"
  3. 设备注销

    • platform_dev_exit() 函数中,调用 platform_device_unregister() 注销平台设备。
    • 注销设备后,会输出日志信息 "Platform device unregistered successfully"

编译与加载

1. 创建 Makefile 文件

在当前目录下创建一个 Makefile 文件来编译这个内核模块:

obj-m += platform_device_example.oall:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
2. 编译内核模块

运行以下命令编译内核模块:

make

这将生成一个名为 platform_device_example.ko 的内核模块文件。
在这里插入图片描述

3. 加载模块

使用 insmod 命令加载内核模块:

sudo insmod platform_device_example.ko

成功加载后,你将看到设备成功注册的日志信息 "Platform device registered successfully"

4. 查看设备

加载模块后,你可以查看设备是否成功注册到 /sys 下:

ls /sys/class/platform/my_platform_device
5. 卸载模块

使用 rmmod 卸载模块:

sudo rmmod platform_device_example

卸载时,会看到 "Platform device unregistered successfully" 的日志信息。

6. 清理编译文件

清理编译文件:

make clean

总结

这个示例演示了如何通过 platform_device_register_simple() 注册一个平台设备,并使用 platform_device_unregister() 注销设备。它通过简单的内核模块来注册和注销平台设备,设备的相关信息可以通过 /sys/class/platform/ 目录查看。

相关文章:

  • 电影感户外柔和光线人像街拍摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 【内存】Linux 内核优化实战 - vm.max_map_count
  • Java枚举类如何避免反射攻击和序列化攻击
  • 零基础RT-thread第四节:电容按键
  • 自动化性能回退机制——蓝绿部署与灰度发布
  • Electron (02)集成 SpringBoot:服务与桌面程序协同启动方案
  • 回文链表C++
  • 设计模式精讲 Day 8:组合模式(Composite Pattern)
  • Transformer实战——Hugging Face环境配置与应用详解
  • 什么是seata
  • node.js在vscode的配置
  • 多线程八股
  • 【小程序】如何生成特定页面的小程序码
  • 代码审计-fastjson反序列化漏洞
  • .NET基于类名约定的自动依赖注入完整指南
  • python+uniapp基于微信小程序的高校二手商品交易系统
  • NVR的方法多种取决于应用场景
  • PVE使用ubuntu-cloud-24.img创建虚拟机并制作模板
  • 20250620在荣品的PRO-RK3566开发板的Android13系统的uboot阶段就拉高GPIO2C6【driver模式】
  • 第3讲、LangChain性能优化:上下文缓存与流式响应实战指南
  • 公司网站设计的公司/百度推广代运营
  • 郑州市建设劳务服务网站/2023免费推广入口
  • 灰色网站欣赏/360优化大师历史版本
  • 网站开发用什么开发工具好呢/智能识别图片
  • 山西网站建设平台/sem推广软件
  • 浙江网站建设网/seo常用工具包括