【设备树笔记整理1】字符设备驱动程序的三种写法

本文介绍了如何在Linux4.14版本下编写驱动,包括查看原理图和芯片手册,分配file_operations结构体,以及通过传统方法、总线设备驱动模型和设备树三种方式指定硬件资源。文章比较了三种方法的优缺点,强调了扩展性和编译需求。
摘要由CSDN通过智能技术生成

 Linux version: 4.14

Code link: Linux source code (v4.14) - Bootlin


1 如何编写驱动

(1)看原理图  

         ① 查看引脚

         ② 查看芯片手册(确定如何操作引脚)

(2)写驱动

APP:                    open                    read                    write                    ioctl

————————————————————————————————————————

驱动:                 dev_open            drv_read             drv_write             drv_ioctl

————————————————————————————————————————

硬件:

① 分配一个 file_oprerations 

② 设置 

.open = led_open       把led引脚设置为输出

.write = led_write        根据app传入的值设置引脚状态

③ 注册(告诉内核)  [drv1]—[drv1]—[drv1]—[drv1]

④ 入口函数: register_chardev(主设备号,file_operations, name)

⑤ 出口函数: unregister_chrdev

(3)编写测试程序

2 在驱动中如何指定引脚

三种方法:

(1)传统方法,在代码中写死 (led_drv.c)

(2)总线设备驱动模型:

    ① led_drv.c     分配/设置/注册/入口/出口

    ② led_dev.c     指定引脚

(3)使用设备树指定引脚

    ① led_drv.c     分配/设置/注册/入口/出口

    ② dts文件       指定引脚

小结:这三种驱动的写法,核心不变,差别在于如何指定硬件资源

三种方法比较:

(1)第一种方法:传统方法

简单,不易扩展,需要重新编译

(2)第二种方法:总线设备驱动模型

稍复杂,易扩展,冗余代码太多,每次修改设备需要重新编译

(3)第三种方法:设备树的方法

稍复杂,易扩展,无冗余代码,修改设备后无需重新编译驱动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Vane Zhang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值