在前面有一篇文章linux驱动相关知识整理中我们提到,总线是关联驱动和设备的枢纽,那么在分析EMMC驱动的时候,我们先来分析总线。

而通过前一篇文章emmc驱动代码预览可以知道在core文件夹下有core.h/.c文件,那就进去瞧一瞧吧。

打开core.c文件,下面有这样一段代码:

subsys_initcall(mmc_init);
module_exit(mmc_exit);
subsys_initcall也是一个类似模块加载module_init的宏,而且subsys_initcall比module_init要先执行,这里只需要知道它是用来向内核注册一个什么就好了。

再来看看mmc_init

static int __init mmc_init(void)
{
    int ret;

ret = mmc_register_bus();
    if (ret)
       return ret;
 
    ret = mmc_register_host_class();
    if (ret)
        goto unregister_bus;
 
    ret = sdio_register_bus();
    if (ret)
        goto unregister_host_class;
 
    return 0;
 
unregister_host_class:
    mmc_unregister_host_class();
unregister_bus:
    mmc_unregister_bus();

return ret;
}

该代码段中,mmc_register_bus函数被调用了,再扒进去看一下:
int mmc_register_bus(void)
{
    return bus_register(&mmc_bus_type);
}
著名的总线注册内核函数bus_register在这里被调用。
其中mmc_bus_type变量定义如下:
static struct bus_type mmc_bus_type = {
    .name        = "mmc",
    .dev_groups    = mmc_dev_groups,
    .match        = mmc_bus_match,
    .uevent        = mmc_bus_uevent,
    .probe        = mmc_bus_probe,
    .remove        = mmc_bus_remove,
    .shutdown    = mmc_bus_shutdown,
    .pm        = &mmc_bus_pm_ops,
};
这里我们看一下,驱动和设备的配对函数

static int mmc_bus_match(struct device *dev, struct device_driver *drv)
{
    return 1;
}
固定返回1,表示只要是注册在该总线上的驱动和设备,在match中都匹配成功。

关于emmc驱动请听下回分解。

emmc/sd驱动总线简析相关推荐

  1. bulk interface驱动_Linux 驱动架构简析

    这篇文章不是驱动开发教程,只不过作者读过内核源码后,想对知识做一个梳理,从源码的角度分析一下Linux的驱动架构的实现.行文也不大讲究,希望可以把问题说清楚.本文使用的kernel 源码版本是 3.1 ...

  2. 正点原子阿尔法imx6ull的wm8960声卡驱动表层简析

    文章目录 前言 1.设备树配置 2.打印信息分析(按打印先后顺序) 2.1.wm8960_i2c(Codec) 2.2.fsl-sai(Platform) 2.3.card 注册(Machine) 3 ...

  3. Linux I2C设备regmap机制简析

    在Linu 3.1开始,Linux引入了regmap来同意管理内核的I2C, SPI等总线,将I2C, SPI驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现. 用一个I2C设备为例,在3 ...

  4. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  5. 2022集创赛安谋科技杯简析公开课文字版(建议结合视频一起看)

    下面是2022年集创赛安谋科技杯简析公开课文字版,建议结合PPT和视频一起学习.文字整理来自2022年集创赛安谋科技杯杯赛助理甘云汉. 大家好,我是第五届集创赛Arm杯企业奖一等奖得主,很荣幸能收到技 ...

  6. 关于地铁计算机联锁的论文,简析南京地铁四号线车辆段计算机联锁主机设计论文...

    简析南京地铁四号线车辆段计算机联锁主机设计论文 1概述 NRIET-CI-Ⅲ型计算机联锁系统用于南京地铁四号线青龙车辆段,青龙车辆段计算机联锁系统主要由上位机子系统.车辆段联锁子系统.室外设备子系统以 ...

  7. 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——2.1节简析Android安装文件...

    本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第2章,第2.1节简析Android安装文件,作者 王石磊 , 吴峥,更多章节内容可以访问 ...

  8. 《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.1节简析Android安装文件,作者 王东华,更多章节内容可以访问云栖社区"异步社区" ...

  9. Qualcomm Android camera 架构简析及如何debug

    一. Camera模组(CCM)介绍: CCM一般包含四大件: 镜头(lens).传感器(sensor).软板(FPC).图像处理芯片(DSP):     Camera的成像原理可以简单概括如下: 1 ...

最新文章

  1. Spring boot注入配置为java静态属性
  2. Google又发大招:高效实时实现视频目标检测
  3. 计组第一章(唐朔飞)——计算机系统概述章节总结
  4. Redis性能指标监控
  5. 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
  6. requests-session类对象-0223
  7. transferto遇到的问题java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp
  8. Signal和Slot是同步的还是异步的
  9. JavaScript之对象序列化详解
  10. 知道圆心半径取圆上的经纬度_作为一名台球高手,你应该知道的事
  11. python的第三方库是干什么用的-Python 常用的标准库以及第三方库有哪些?
  12. 关闭(取消)windows 2003中ie增强的安全配置?
  13. 方舟开服务器游戏基础管理设置
  14. 2020年电工(技师)证考试及电工(技师)模拟考试软件
  15. 还在用ListView?!OutMan!RecyclerView!
  16. matlab命令行窗口显示长度设置_MATLAB中如何设置坐标轴的显示长度?
  17. 第3章 事实、数据检索
  18. 手机海豚模拟器怎么添加游戏_人偶战斗模拟器2手机版下载,人偶战斗模拟器2手机版安卓游戏 v1.2...
  19. 计算机安全外文文献出处,网络信息安全外文文献翻译中英文.doc
  20. 大数据征信如何提升金融机构风控能力

热门文章

  1. NVME协议-NVME概述
  2. 丰田工机PLC,丰田TOYOPUC通讯组态王,实例教程,组态王通讯
  3. Opencv学习笔记 - OpenCV 4机器学习算法简介
  4. stm32管脚不能正常输出高低电平?
  5. PTA 7-21 三角形面积
  6. DDR4之DM,DBI and TDQS
  7. 什么是Web 3.0 ?
  8. 卡通动漫Mac动态壁纸5K
  9. 树与二叉树——二叉树中计算叶子结点个数问题
  10. 工商管理管理学知识归纳