在前面有一篇文章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. 编程人员需知的Windows平台编程的环境设置技巧
  2. chrome浏览器本地文件支持ajax请求的解决方法
  3. (int)a和(int)a的区别
  4. 史上最快的拼接字串方法
  5. 2014年第五届蓝桥杯C/C++ A组国赛 —— 第二题:六角幻方
  6. Uboot中start.S源码的指令级的详尽解析(转)
  7. Linux 索引节点 inode
  8. OpenCV-Python实战(12)——一文详解AR增强现实
  9. 成熟的Richardson模型
  10. OPNsense19.1.9语言包更新文件
  11. 邮件客户端开源_5个最佳开源环境电子邮件客户端
  12. matlab求非线性方程的根,求非线性方程的根
  13. [转]电烙铁的使用小技巧
  14. python提取txt数据到excel
  15. 2017夸专业计算机考研,2017跨专业考研有难度吗?
  16. Python安装Numpy模块
  17. 级联选择器el-cascader处理复杂数据(四层、五层数据),回显部门以及部门下的人员
  18. 分享几个我常用的私活接单渠道
  19. resetting 和 normalizing CSS
  20. springboot实验课程辅助管理系统 毕业设计-附源码191113

热门文章

  1. 如何获取SharePoint online(O365)的token
  2. c语言输出不足10补0,c++ cout输出不足位补0 setw、setfill
  3. php框架原理,路由原理 · thinkphp框架原理解析 · 看云
  4. DSP中的EDMA是什么?
  5. python gui学生成绩管理系统
  6. 自变量选择与逐步回归——《应用回归分析R语言版》
  7. 如何在VS2019编辑器的第一行默认添加:#define _CRT_SECURE_NO_WARNINGS 1
  8. 水电计算机监控,水电行业的计算机监控系统
  9. c++核心编程继承和多态 、文件简单读写
  10. Windows Server HP 服务器磁盘阵列检测