关于驱动的概述

  1. Linux驱动包含三种:字符设备驱动、块设备驱动、网络设备驱动。块设备驱动主要包括存储类设备的驱动,比如RAM,SD卡等;网络设备驱动主要包括网络相关设备的驱动,比如以太网等;剩下的都属于字符设备驱动,比如IIC.UART,AD等。我们开发Linux驱动主要是字符设备驱动的开发。
  2. linux把led,蜂鸣器,IIC,LCD等等设备,都看成了文件
  3. 对于文件来讲,不管是什么设备,对它的操作无非是读和写
  4. 对于文件的操作一般有五个函数:
    open() 打开
    read() 读取
    write() 写入
    ioctl() IO控制
    close() 关闭
  5. 做驱动,尤其是字符类驱动,就是做好open() write() ioctrl()等几个函数的,然后等着上层去调用就可以了。
  6. 在linux文件系统里面,肯定有个目录叫做/dev,这个目录里的所有文件是设备文件,而不是普通文件。也就是说所有的设备,只要是做好了驱动,都要在这个目录里生成一个文件。比如对led操作,那就要用open这个函数打开设备文件/dev/leds。
  7. 设备文件里面包含两个信息,主设备号次设备号。主设备号用来区分不同类的设备,比如LED,串口,网络等。次设备号区分同类设备里的不同的硬件,比如迅为的板子有四个串口,这四个串口主设备号相同,次设备号却不相同。
  8. 设备号怎么和硬件对应起来呢?
    做驱动,其实就是做那几个函数而已,比如open,read等,但是做完那几个函数以后必须注册到系统!注册以后linux才能找到它,上层才能找到它并调用他。
  9. 怎么注册?
    Linux为了解决这个问题,专门做了一个函数,就是为注册而生的,register_chrdev()
    int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
    这个函数的第一个参数就是major ,也就是刚才说的主设备号
    第二个参数就是 name, 也就是设备文件的名字
    第三个是个结构file_operations,这个里面就是函数指针,实际就是我们做的那5个函数存在里面!我们先写 open, read,write, close 那几个函数,然后把这几个函数,放到一个结构里面,也就是file_operations。最后通过函数register_chrdev(),把我们做的那几个函数和设备文件以及设备号关联起来就可以了。
  10. 主设备号自己指定明知要保证和别的设备不一样就可以了。
  11. 驱动介于文件系统和底层硬件之间,是嵌入到内核中的程序
  12. 上层是文件系统和应用,中间是Linux内核和下层是硬件
    Linux设备驱动附着在Linux内核上。
    – 对上:Linux设备驱动要给上层提供调用的接口;
    – 对中:Linux设备驱动要注册到Linux内核中(或者挂载在总线);
    – 对下:操作硬件(GPIO,中断IO、PWM,I2C,SPI等等)
    – 以上三个,Linux内核均提供了接口函数。

Linux驱动(1)--关于驱动的概述相关推荐

  1. Linux和Windows设备驱动架构比较

    毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和 ...

  2. Linux驱动开发 -- touch驱动注册

    Linux i2c驱动开发 – touch 驱动 文章目录 Linux i2c驱动开发 -- touch 驱动 前言 一.i2c 驱动框架 二.Linux的MODULE声明 1. MODULE相关声明 ...

  3. Linux之PWM背光驱动

    Linux之PWM背光驱动 | DD'NotesLinux之PWM背光驱动概述 Platform: RK3588/RK356X OS: Linux Kernel: v5.10 通过PWM调光的背光一般 ...

  4. 零基础学Linux内核之设备驱动篇(8)_设备模型

    零基础学Linux内核系列文章目录 前置知识篇 1. 进程 2. 线程 进程间通信篇 1. IPC概述 2. 信号 3. 消息传递 4. 同步 5. 共享内存区 编译相关篇 1. GCC编译 2. 静 ...

  5. linux内核SPI总线驱动分析(一)

    下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) SPI总线驱动分析   1 SPI概述     ...

  6. linux驱动:音频驱动(六)ASoc之codec设备

    linux驱动:音频驱动(六)ASoc之codec设备

  7. linux驱动:音频驱动(五)ASoc之codec驱动

    linux驱动:音频驱动(五)ASoc之codec驱动

  8. linux驱动:音频驱动(四)ASoc之machine设备

    linux驱动:音频驱动(四)ASoc之machine设备

  9. 乾坤合一~Linux设备驱动之终端设备驱动

    多想拥你在我的怀里 却无法超越那距离 美好回忆渐渐地远去 盼望今生出现奇迹 无尽的想念 荒了容颜 无助的爱恋 从未改变 这是今天的旋律,,,,今生今世,遥不可及~ 1 终端设备 终端是一种字符型设备, ...

最新文章

  1. Seaborn可视化使用relplot函数可视化数据长度不同的时间序列实战:two Pandas Series of different lengths
  2. 电脑安装python为什么显示的是程序丢失-python报错:无法启动此程序,因为计算机中丢失...
  3. s2sh乱码一个小处理(新手按流程走)
  4. windows下安装Oracle10G
  5. SRV记录注册不成功的可能的原因
  6. MySQL基础篇(03):系统和自定义函数总结,触发器使用详解
  7. Bootstrap表单的默认布局
  8. sysV init服务脚本(入门级)
  9. 推荐一款免费开源的pdf编辑器
  10. stm32电容触摸按键实验
  11. ImportError: cannot import name ‘export_saved_model‘ from ‘tensorflow.python.keras.saving.saved_mode
  12. java-net-php-python-jspm毕业就业管理系统演示录像2019计算机毕业设计程序
  13. wpf给模板控件添加事件一
  14. Java猜拳游戏代码实验总结_java猜拳小游戏程序设计实验报告.doc
  15. Db2数据库:日期函数DATE函数
  16. 华为防火墙通用配置详解
  17. Sigma Designs SMP8910媒体处理器的3DTV、蓝光和OTT体验
  18. 【Apache S4 介绍】
  19. 如何在VMware里安装windows server 2003
  20. 手机短信验证码登录功能的开发实录(机器识别码、短信限流、错误提示、发送验证码倒计时60秒)

热门文章

  1. hive 修改分区备注_Hive分区、分桶操作及其区别
  2. ResNet原理和实现
  3. Java基础---循环结构+例题
  4. 《XXX重大技术需求征集系统》的可用性和可修改性战术分析
  5. 关于Linux开源项目基础组件make编译流程
  6. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例
  7. 剑指offer_第一个只出现一次的字符
  8. 状态模式(State Pattern)
  9. 泛型--泛型方法、委托--介绍篇
  10. CoordinatorLayout 使用综述系列(一)