• 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提供的实现。

  • 相关阅读:
    个人作业——软件评测
    结对第二次作业
    寒假作业(2/2)
    寒假作业(1/2)
    markdown整理
    我们一定会在人生的更高处相见的
    时间复杂度 分析 可能算法
    有关数学 结论 规律 题目 小结
    jzyz 题库 选做 及 知识小结
    隔板法
  • 原文地址:https://www.cnblogs.com/fanguang/p/12291861.html
Copyright © 2020-2023  润新知