linux驱动:(14)平台总线模型 (platform设备 一)

目录

作用

 优点

注册platform设备

平台总线注册一个 device.c

用蜂鸣器举一个例子device.c

注册platform驱动driver.c

注册一个driver.c驱动 

platform_driver 结构体

用蜂鸣器举一个例子driver.c

运行步骤

下面我们就开始讲解prove函数,请看下一章


平台总线模型也叫platform总线模型,是linux内核虚拟出来的一条总线,不是真实的导线

平台总线是以名字来匹配的,实际上就是字符串比较,

主要就是把原来的驱动.c文件分为两个c文件,一个驱动,c,一个设备,c

  • 把稳定不变的放到驱动,c
  • 需要变得放在设备.c
  • 一个是 device.c,一个是 driver.c,然后分别注册 device.c和 driver.c
    • device是设备,主要处理与具体设备相关的配置和操作。这个文件通常包含平台设备的定义、资源分配、设备初始化以及设备注册等操作
      • 定义设备的硬件资源,如 I/O 端口、内存区域、中断号等
      • 设备初始化和退出函数。这些函数负责在设备加载和卸载时,进行硬件初始化和资源释放
      • 通过 platform_device_register 函数将设备注册到内核中,使得设备可以被相应的驱动程序识别并操作
    • driver是驱动,处理驱动程序的实现,负责与设备进行交互,管理设备的生命周期(例如初始化和清理),并提供设备与操作系统之间的接口
      • 定义驱动程序的 proberemove 回调函数,这些函数在设备被检测到和移除时被调用
      • 处理设备的注册和注销。通过 platform_driver_registerplatform_driver_unregister 函数将驱动程序注册到内核中
      • 实现设备的操作逻辑,如打开、关闭、读写操作等 

作用

  • 可以提高代码的重用性
  • 减少重复性代码

 优点

  • 驱动和设备代码分开
  • 都挂在总线上,方便管理

注册platform设备

平台总线注册一个 device.c

device.c里面写的是硬件资源,这里的硬件资源是指寄存器的地址,中断号,时钟等硬件
资源。

在linux中是用一个结构体来描述硬件资源,定义在linux/include/platform_device.h中

struct platform_device{
    const char *name;
    int id;
    bool id_auto;
    struct device dev;
    u32 num_resources;
    struct resource *resource;
    const struct platform_device_id *id_entry;
    char *driver_override;
    struct mfd_cell *mfd_cell;
    struct pdev_archdata archdata;
};
  • 主要参数
    • name:平台总线进行匹配的时候用到的name,并且在sys/bus/platform.devices/目录下会生成一个name文件
    • id:设备id,一般为1,相同name的设备编号
    • dev:设备通用储存的部分,内嵌的device机构提
    • numresources:资源的个数
    • resources:硬件资源
      struct resource{
          resource_size_t start;
          resource_size_t end;
          const char *name;
          unsigned long flags;
          struct resource *parent,*sibling,*child;
      };
      • start:资源的起始
      • end:资源的结束
      • name:资源的名字
      • flags:资源的类型
        • IORESOURCE_IO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值