linux设备模型及实例

1.linux设备模型基本概念

BUS(总线):用于关联设备和驱动,代表一个实际的物理总线(如USB、PCI bus)或虚拟总线(如platform bus),总线会提供与总线相关的驱动(driver)和设备(device)注册方法。

Device(设备):系统中的所有硬件设备,描述设备的名字、包含硬件资源、属性等信息。每个设备都有它从属的总线,但是不一定有他对应的驱动。

Class(设备类):一些复杂的设备需要编写很多驱动代码,如USB、EMMC、SD等。class为这些设备(device)提供一个父设备类,实现设备类的公共部分,简化驱动程序的开发。

Driver(驱动):硬件设备的驱动程序,实现对应设备的接口函数,包括初始化,设备基本操作函数等。

2.举例说明:

以emmc设备为例,系统中实现了mmc总线,负责所有智能卡设备及驱动的匹配。

drivers/mmc/core/core.c中的mmc_init()函数中调用mmc_register_bus()注册了mmc总线。

drivers/mmc/core/core.c中的mmc_init()函数中调用mmc_register_host_class()注册了mmc_host类。

2.1 总线mmc

实现如下接口

mmc_register_driver函数用于注册该总线下的驱动程序(mmc_driver类型)。

mmc_alloc_card用于创建总线下的设备(mmc_card类型)。

mmc_add_card用于将设备加入总线。

2.2 mmc总线上的驱动程序注册

driver/mmc/card/block.c的mmc_blk_init函数中注册了mmc_driver类型驱动,驱动实现中会注册块设备(在linux中会枚举出mmcblock的块设备节点)。

2.3 mmc总线上的设备注册

driver/mmc/core/mmc.c中的mmc_attach_mmc函数中实现了mmc_card设备的注册和加入总线。

2.4 class mmc_host

代表多媒体卡控制器类MultiMediaCard

由于emmc设备比较复杂,linux对这类设备抽象出了mmc_host的class 设备。

实现位置drivers/mmc/core/host.c

class 注册函数mmc_register_host_class。

实现如下接口:

mmc_alloc_host 申请class为mmc_host类型的设备,将新申请的设备和class进行关联

mmc_add_host 注册mmc_host类型的设备

mmc_remove_host 注销mmc_host类型的设备

mmc_free_host 释放mmc_host类型的设备

mmc_detect_change 功能辅助函数

接口内部完成公共部分的实现,如:mmc_alloc_host中注册的work mmc_rescan会完成emmc、sd卡的扫描工作。

2.5 sdhci设备

实现安全数字主机控制器接口驱动

实现位置drivers/mmc/host/sdhci.c

sdhci设备对mmc_host设备类进行封装,并实现sdhci特殊部分接口

2.6 platform总线上的emmc设备注册

设备树中定义了名字为”sdhci-dove”的设备

2.7 platform总线上的emmc驱动注册

drivers/mmc/host/sdhci-dove.c中注册了名字为”sdhci-dove”的平台设备驱动

2.8 emmc驱动实现方式

驱动和设备匹配后,驱动程序调用sdhci设备实现接口实现设备驱动的各种操作。

调用sdhci_pltfm_init初始化设备

调用sdhci_add_host增加设备。

设备操作函数也可以使用sdhci提供的实现。

Original: https://www.cnblogs.com/fanguang/p/12291861.html
Author: 反光
Title: linux设备模型及实例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578081/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • docker redis启动将配置文件挂载在数据卷(volume)中

    关键词 [     "linux",     "docker",     "volume",     "red…

    Linux 2023年5月28日
    076
  • OpenSSL测试-SM3

    任务详情 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 使用OpenSSL的命令计算你的8位学号的摘要值(SM3),提交截图(5’…

    Linux 2023年6月8日
    098
  • GDT表实现

    GDT是保护模式下的内存段登记表。 段界限计算 段界限用 20 个二进制位来表示。只不过此段界限只是个单位量,它的单位要么是字节,要么是 4K,这是由描述符中的G位来指 定的。由于…

    Linux 2023年6月7日
    075
  • Docker学习笔记

    镜像下载、域名解析、时间同步请点击阿里云开源镜像站 Docker概述 Docker学习链接 官网链接:Home – Docker Docker与虚拟机比较 虚拟化技术 …

    Linux 2023年5月27日
    084
  • cobbler部署

    cobbler cobbler 一、cobbler简介 二、cobbler对应关系 三、cobbler工作原理 cobbler部署 进行测试 web界面自动安装 一、cobbler…

    Linux 2023年6月6日
    0105
  • POJ1322Chocolate–概论DP

    每次从包装中取出一块巧克力并放在桌子上。如果桌子上有两个相同颜色的巧克力,则将这两个丢掉。如果包中有C种颜色的巧克力(颜色均匀分布),从包装中取出N个巧克力后,桌子上确实有M个巧克…

    Linux 2023年6月7日
    0107
  • Django orm的managed参数

    Django orm的managed参数 如果一张表不是在django的models.py中创建表,而是该表由cmd或者Navicat或者其他方式创建的,或者该表是一个视图,那么也…

    Linux 2023年6月14日
    079
  • RISC-V靠谱吗?

    向各位行业大佬求教个问题:RISC-V靠谱吗? 事情是这样,昨天公司来了几个人,自称是国内唯几的做RISC-V芯片的公司。我上网查了,确实有这么一家公司,是初创公司。他们拿出PPT…

    Linux 2023年6月6日
    0101
  • 良许跌宕起伏的2021年

    大家好,我是良许,前码农,现创业者。 时间飞逝,转眼就2021年年尾了,向各位「股东」们汇报一下良许的 2021 年。 公众号运营至今,每年我都会写年终总结,前三次总结给大家放在下…

    Linux 2023年6月14日
    0104
  • Pandas中的常用函数

    1. map、apply、applymap 参考:Pandas教程 | 数据处理三板斧——map、apply、applymap详解 在日常的数据处理中,经常会对一个 DataFra…

    Linux 2023年6月13日
    088
  • MySQL——用户和权限管理

    由用户名和主机名组成 格式:’user_name’@’host’ host必须要用引号括起来 注意:host可以是一个主机名也可以是…

    Linux 2023年6月7日
    088
  • 006 Linux 命令三剑客之-grep

    01 一起来认识 grep! Linux 命令三剑客,sed、grep、awk。 sed:擅长数据修改。 grep:擅长数据查找定位。 awk:擅长数据切片,数据格式化,功能最复杂…

    Linux 2023年5月27日
    094
  • 继承、封装、多态的实现原理

    欢迎来到Java学习之继承、封装、多态的实现原理 目录 从JVM结构开始谈多态 JVM 的结构 Java 的方法调用方式 常量池(constant pool) 图 2. 常量池各表…

    Linux 2023年6月13日
    098
  • 苹果手机使用altstore免越狱安装第三方应用

    转自52pojie 开发人员Riley Testut推&#x5…

    Linux 2023年6月7日
    0263
  • jmeter之数据库连接JDBC安装与使用

    jmeter中如果要用sql语句查询数据库,就需要用到JDBC请求和JDBC Connection Configuration了。 首先来了解下,JDBC是什么?英文全称为Java…

    Linux 2023年6月8日
    0108
  • linux_arch

    由于以前新手开始接触的是ubuntu,然后通过ubuntu又开始了解centos,这俩系统基本是稳定版本可以用作服务器,但是centos的还是居多,一来比较接近redhat;但是这…

    Linux 2023年6月14日
    078
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球