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中实现的,
需要先加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值