• 第1节 Linux设备驱动


    设备驱动:驱使硬件设备按照指令行动

    Linux一切都是文件

    • 字符设备:/dev/存放设备所对应的文件。通过文件操作字符设备,/dev/目录下每一个文件对应一个硬件设备,Linux通过文件来访问硬件,而不是在无操作系统的情况下访问接口。eg.lcd、串口、触摸屏都是文件,这些文件都在dev下面。
      tty 终端设备(串口也属于tty),新打开两个窗口输入tty,返回/dev/pts/6和/dev/pts/7
      在/dev/pts/7中输入echo "hello" > /dev/pts/6,/dev/pts/6终端有hello出现
    • 块设备:/sda/ /sda1/ /sda2/ /sdb/ ...磁盘上的分区,通过mount命令访问ext
    • 网络设备:唯一一个不体现一切都是文件。eg.网卡驱动/dev/下找不到

    设备驱动模型

    • 总线:设备和驱动挂载的总线,做关键动作,匹配驱动和设备。
    • 设备:每一个设备在注册的时候会寻找匹配的驱动。
    • 驱动:每一个驱动在注册的时候会寻找匹配的设备。

    总线的驱动、设备的驱动、设备的注册三个不同的组成部分。

    probe函数执行的前提是驱动匹配到了一个设备,总线做这个匹配,匹配的原则每一种总线都不一样。
    eg.系统注册了一个A设备,然后加载了一个A驱动,这个设备和驱动都叫A,因为它们都挂载在platform总线上。
    总线匹配后,驱动进入到运行周期,可以在板级包里丢任何一行代码,但驱动不需要改动,移植不用改动驱动,改了叫“破坏”。

    Linux中有一个抽象基类叫Kobject,kernel对象都继承自kobject。虽然Linux内核是汇编C语言写的,但是处处都体现了面向对象(有继承、重载、多态存在)的思想,如文件系统的结构,设备驱动的模型。

    Linux内核用同样的一份源代码支持了20多种体系结构(支持X86、ARM、powerPC、Platform等),又支持了同意体系结构的几百种芯片,同样的ARM结构的芯片有很多的电路板。

    同一个芯片在不同的电路上有不同的源代码是错误的。

    因为继承kobject,所以总线、设备、驱动在注册的时候都会产生kobject事件。

    主机驱动与client驱动分离

    驱动和设备要分离,驱动和驱动要分离。

    • I2C adapter和I2C client分离
    • SPI adapter(总线驱动)和SPI client(设备驱动)

    在I2C的触摸屏上去访问I2C触摸屏时不再需要去访问I2C controller,只是调用一个通用的I2C interface,这个interface通过I2C controller去实现I2C message收发,I2C看不到任何一行和I2C controller相关的代码,所以触摸屏可以放到其他地方。

    驱动和驱动要分离:假如有A个adapter驱动,B个外设驱动,如果不进行分离,需要A*B份代码,分离只需要A+B份代码。

  • 相关阅读:
    java布尔运算中的短路运算
    java基本数据类型和引用数据类型
    人工智能,自然界四大奥秘之一
    关于PHP导出数据超时的优化
    IDEA 生成返回值对象快捷键(GoLand,pycharm)
    Windows系统Git安装教程(详解Git安装过程)
    电脑锁屏壁纸, 时钟屏保
    常用分布函数的方差和期望机及其性质
    Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
    JavaWeb中编码问题的解决办法(在客户端和服务器之间传入或响应数据后中文乱码; cookie的乱码问题) || Cookie和Session
  • 原文地址:https://www.cnblogs.com/XuYiting/p/16149426.html
Copyright © 2020-2023  润新知