LED模板驱动程序的改造_总线设备驱动模型-linux

旧程序格式

  1. 应用程序调用open/write 函数
  2. 驱动程序提供对应的open/write 函数(led_drv_open作用:调用底层提供的Led_drv_open(指针,底层芯片chip_demo_gpio.c提供的指针)->init成员 把led引脚配置成输出引脚; /led_drv_write作用:调用底层提供的Led_drv_open->ctl成员 把led引脚配置成输出高电平或低电平)
  3. 具体操作那个引脚,由board_A_led.c指定
  4. 驱动程序为leddrv.c,注册file_operation结构体(open/wirte成员: open成员指向led_drv_open函数,write成员指向led_drv_write)
    在这里插入图片描述

新格式结构

注释:上层leddrv.c调用底层(chip_demo_gpio.c)提供的函数(get_board_led_opr),之后得到board_demo_led_opr结构体
在这里插入图片描述
两个platform: platform_device & platform_driver(里面有probe函数,该函数做驱动程序相关的事情)
probe作用:

  1. 从 platform_device 获得资源-即记录资源,有几个引脚,引脚分别是什么
  2. 对于每个引脚都要调用device_creat(根据平台的资源,来确定创建多少个device)

board_A_led.c: 里面有入口函数,在入口函数注册platform_device
chip_demo_gpio.c:里面有入口函数,在入口函数注册platform_driver
leddrv.c: 入口register_chrdev
在这里插入图片描述

写程序

通过两种方式指定资源:1.通过platform_data这个私有数据指定硬件资源 2. 通过resource数组指定硬件资源

- 修改board_A_led.c

  1. 定义入口函数,并注册platform_device
    在这里插入图片描述
  2. 定义出口函数,并注销platform_device
    在这里插入图片描述
  3. 使用module_init修饰入口出口函以及 声明模块的许可证
    在这里插入图片描述
  4. 定义资源数组
    在这里插入图片描述
  5. 定义资源之后,将resource添加到platform_device里面来
    在这里插入图片描述

- chip_demo_gpio.c

  1. 定义入口函数,并注册platform_driver
    在这里插入图片描述

  2. 定义出口函数,并注销platform_driver
    在这里插入图片描述

  3. 使用module_init修饰入口出口函以及 声明模块的许可证
    在这里插入图片描述

  4. 构造结构体: 确定platform_driver的成员,name配对之后,调用probe函数,当设备去掉之后调用remove函数
    在这里插入图片描述

  5. 实现chip_demo_gpio_led_probe函数,当发现匹配成功之后,下一步记录引脚(先定义数组g_ledpins,定义计数g_ledcnt,后从资源里确定引脚),之后创建device_create。
    在这里插入图片描述
    从资源里确定资源的引脚 通过while循环
    在这里插入图片描述

创建device_create之前是在上一层(leddrv.c)创建,要把device_create封装到led_device_create函数里面,文件leddrv.c作为ko加载,别的驱动程序想要引用这个函数,则需要把这个函数提前导出来
在这里插入图片描述
导出
在这里插入图片描述

  1. 实现chip_demo_gpio_led_remove函数

销毁device_destroy之前是在上一层(leddrv.c),要把device_destroy封装到led_device_destroy函数里面,文件leddrv.c作为 ko加载,别的驱动程序想要引用这个函数,则需要把这个函数提前导出来
leddrv.c 在这里插入图片描述
chip_demo_gpio.c
在这里插入图片描述

leddrv.c 文件的 led_init函数 调用get_board_led_opr函数,但是get_board_led_opr是在底层chip_demo_gpio.c中实现的,
需要先加载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux驱动总线设备模型(Driver model)是一种抽象的设备模型,用于描述系统中各种设备设备之间的关系。它提供了一种标准的设备访问接口,使得设备驱动程序可以独立于硬件平台而存在,从而提高了设备驱动程序的可移植性和可维护性。 在Linux中,驱动总线设备模型包括以下几个主要的概念: 1. 总线(Bus):总线是一种连接设备的物理或逻辑结构,用于实现设备之间的通信。Linux支持多种总线类型,例如PCI、USB、I2C等。 2. 设备(Device):设备是指在总线上注册的硬件设备,每个设备都有一个唯一的设备树路径和设备标识符。设备可以包括子设备和属性,例如硬件资源、中断、供电等信息。 3. 驱动程序(Driver):驱动程序是指用于控制设备的软件程序,它通过向设备发送命令和读取设备的状态来实现对设备的控制。驱动程序可以注册到总线上,当设备被插入到总线上时,总线会自动匹配相应的驱动程序并加载它。 4. 类(Class):类是一组具有相似功能的设备的集合,例如输入设备、网络设备、存储设备等。类提供了一些通用的接口和属性,使得驱动程序可以更加方便地操作设备Linux驱动总线设备模型的主要优点包括: 1. 支持多种总线类型,使得驱动程序可以在不同的硬件平台上运行。 2. 提供标准的设备访问接口,使得驱动程序可以独立于硬件平台而存在。 3. 支持设备热插拔和动态配置,使得系统更加灵活和可扩展。 4. 提供了类的概念,使得驱动程序可以更加方便地操作设备

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值