Linux -- 字符设备驱动--LED的驱动开发(初级框架)

这篇具有很好参考价值的文章主要介绍了Linux -- 字符设备驱动--LED的驱动开发(初级框架)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

驱动框架一阶段

我们怎样去点亮一个 LED 呢?分为三步:

  1. 看原理图确定引脚,确定引脚输出什么电平才能点亮/熄灭 LED
  2. 看主芯片手册,确定寄存器操作方法:哪些寄存器?哪些位?地址是?
  3. 编写驱动:先写框架,再写硬件操作的代码
注意 :在芯片手册中确定的寄存器地址被称为 物理地址 ,在 Linux 内核中无法直接使用。
需要使用内核提供的 ioremap 把物理地址映射为 虚拟地址 ,使用虚拟地址。
ioremap 函数的使用:
Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux

Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux

Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux

编写驱动程序的套路:

  • 确定主设备号,也可以让内核分配;
  • 定义自己的 file_operations 结构体;
  • 实现对应的 drv_open/drv_read/drv_write 等函数,填入 file_operations 结构体;
  • file_operations 结构体告诉内核:register_chrdev
  • 谁来注册驱动程序啊?得有一个入口函数:安装驱动程序时,就会去调用这个入口函数;
  • 有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用 unregister_chrdev
  • 其他完善:提供设备信息,自动创建设备节点:class_create, device_create
驱动怎么操作硬件?
通过 ioremap 映射寄存器的物理地址得到虚拟地址,读写虚拟地址。驱动层访问硬件外设寄存器依靠的是 ioremap 函数去映射到寄存器地址,然后开始控制寄存器。
驱动怎么和 APP 传输数据?
通过 copy_to_user copy_from_user 2 个函数。

驱动框架二阶段:分层思想

Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux

  • 上层实现硬件无关的操作,比如注册字符设备驱动:leddrv.c
  • 下层实现硬件相关的操作,比如 board_A.c 实现单板 A LED 操作

驱动框架三阶段:分离

引脚操作那么有规律,并且这是跟主芯片相关的,那可以针对该芯片写出比较通用的硬件操作代码。
比如 board_A.c 使用芯片 chipY ,那就可以写出: chipY_gpio.c ,它实现 芯片 Y GPIO 操作,适用于芯片 Y 的所有 GPIO 引脚。
使用时,我们只需要在 board_A_led.c 中指定使用哪一个引脚即可。程序结构如下:
Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux
以面向对象的思想,在 board_A_led.c 中实现 led_resouce 结构体,它定 义“资源”──要用哪一个引脚。
chipY_gpio.c 中仍是实现 led_operations 结构体,它要写得更完善,支持所有 GPIO
总结:
程序仍分为上下结构:
上层 leddrv.c 向内核注册 file_operations 结构体;
下层 chip_demo_gpio.c 提供 led_operations 结构体来操作硬件。
下层的代码分为 2 个:
  1. chip_demo_gpio.c 实现通用的 GPIO 操作,
  2. board_A_led.c 指定使用哪个 GPIO,即“资源”,也就是硬件的引脚信息,它实现一个 led_resource 结构体,并提供访问函数

Linux -- 字符设备驱动--LED的驱动开发(初级框架),Linux,linux文章来源地址https://www.toymoban.com/news/detail-861078.html

到了这里,关于Linux -- 字符设备驱动--LED的驱动开发(初级框架)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux下字符设备驱动开发以及流程介绍

    首先我们介绍一下什么是字符设备,然后讲解一下字符设备开发的具体的流程,分别详细介绍每一个流程中涉及到的结构体以及知识点,最后我们编写代码实现字符设备的开发以及测试。 Linux内核设计哲学是把所有的东西都抽象成文件进行访问,这样对设备的访问都是通过文

    2024年02月01日
    浏览(41)
  • Linux设备驱动开发学习笔记(等待队列,锁,字符驱动程序,设备树,i2C...)

    container_of函数可以通过结构体的成员变量检索出整个结构体 函数原型: 内核开发者只实现了循环双链表,因为这个结构能够实现FIFO和LIFO,并且内核开发者要保持最少代码。 为了支持链表,代码中要添加的头文件是linux/list.h。内核中链表实现核心部分的数据结构 是struct li

    2024年01月22日
    浏览(55)
  • 【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程

    开发环境: windows + ubuntu18.04 + 迅为rk3568开发板 相较于字符设备,杂项设备有以下两个优点: 节省主设备号:杂项设备的主设备号固定为 10,在系统中注册多个 misc 设备驱动时,只需使用子设备号进行区分即可。 使用简单:相比如普通的字符设备驱动, misc驱动只需要将基本信

    2024年01月21日
    浏览(51)
  • PCIE学习系列 五(Linux之PCIe设备驱动开发框架)

    本文讲述一个开源的PCIe设备驱动,通过这个例子可以基本上理解所有的PCIe设备驱动。后续也会做关于Linux各类驱动的文章。 通过前面的学习,我们知道PCIe设备访问之前需要先做枚举。一般来说,PCI设备的枚举操作不需要我们来做,BIOS或者系统初始化时已经做好了,当系统枚

    2024年02月05日
    浏览(57)
  • 驱动开发 day8 (设备树驱动,按键中断实现led亮灭)

    //编译驱动  (注意Makefile的编译到移植到开发板的内核)         make arch=arm //清除编译生成文件         make clean ****************************************** //安装驱动         insmod mycdev.ko //卸载驱动         rmmod mycdev   需要在内核路径/arch/arm/boot/dts/  修改 stm32mp157a-fsmp1a-dts 文件 *

    2024年02月14日
    浏览(41)
  • QEMU学习(二):LED设备仿真及驱动开发

    在仿真led之前,先来了解一下QEMU源码结构及GPIO仿真原理。 QEMU源码目录 我们只罗列出涉及的少许文件,由此可以看出,我们要仿真的设备文件都放在hw目录下,一般来说一个.c 文件会有一个.h 文件,它们的目录类似。 比如 hw/gpio/imx_gpio.c 对应的头文件为 include/hw/gpio/imx_gpio.

    2024年02月09日
    浏览(55)
  • 笔记:linux中LED驱动设备树配置和用法

    设备树中的LED驱动一般是这样写,LED驱动可以控制GPIO的电平变化,生成文件节点很方便 compatible = \\\"gpio-leds\\\"; 对应了驱动中 drivers/leds/leds-gpio.c这个驱动文件 label = \\\"gpio_demo\\\"; 这个名字会在文件系统中生成对应的设备节点 /sys/class/leds/gpio_demo linux,default-trigger = \\\"default-off\\\"; 指的是

    2024年02月10日
    浏览(42)
  • 驱动开发--字符驱动设备2

    字符设备驱动 1.定义 以字节流的形式进行访问,且只能顺序访问的设备,针对字符设备编写的驱动叫做字符设备驱动 2.字符设备框架 用户空间通过IO函数如open、read、write、close等函数接口,调用内核空间中的字符设备驱动函数中的用户自定义的open、read、write、close等函数,通

    2024年02月15日
    浏览(43)
  • 字符设备驱动开发

    1、字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动, 字符设备就是一个一个字节,按照字节 流进行读写操作的设备,读写数据是分先后顺序的。 比如我们最常见的点灯、按键、IIC、SPI, LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。 先来简

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包