1.Linux 总线模型
Linux下的任何驱动在内核中最终都抽象为bus, driver以及device三者间的相互作用。
总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连接。总线将设备和驱动绑定,在系统每注册一个设备的时候,会遍历该总线上的driver list,通过bus的math函数寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会便利该总线上的device 寻找与之匹配的设备,而匹配由总线的match函数完成。一但匹配,则会调用总线的probe函数。
在此模型下,如果存在实际总线当然很好,比如mmc总线,i2c总线和spi总线,相应的device和driver都可以直接注册在总线上。但是总是有一些设备和总线无关,为此,linux kernel引入了platform 虚拟总线,
Platform总线是一种虚拟的总线,相应的设备则为platform_device,通过platform_driver_register;而驱动则为platform_driver,通过platform_driver_register 注册。内核中该总线定义如下:
struct bus_type platform_bus_type = {
.name = "platform",
.dev_groups= platform_dev_groups,
.match = platform_match,
.uevent = platform_uevent,
.pm = &platform_dev_pm_ops,
};
platform_总线match采用名称匹 配的方式,即driver和device两者的name一样则认为该device对应该driver,详见下图:
2.MMC 简介
MMC
MMC全称MultiMedia Card,由西门子公司和SanDisk公司1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x24mm x 1.4mm,它将存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。
MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI模式则是MMC协议的一个子集,主要用于低速系统。
SD
SD卡全称Secure DigitalMemory Card,由松下、东芝和SanDisk公司于1999年8月共同开发的新一代记忆卡标准,已完全兼容MMC标准。SD卡比MMC卡多了一个进行数据著作权保护的暗号认证功能。
SD卡尺寸为32mm x 24mm x2.1mm,长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。SD卡与MMC卡保持向上兼容,也就是说,MMC卡可以被新的设有SD卡插槽的设备存取,但是SD卡却不可以被设有MMC插槽的设备存取。
SDIO
SDIO全称Secure DigitalInput and Output Card,SDIO是在SD标准上定义了一种外设接口,它使用SD的I/O接口来连接外围设备,并通过SD上的I/O数据接口与这些外围设备传输数据。现在已经有很多手持设备支持SDIO功能,而且许多SDIO外设也被开发出来,目前常见的SDIO外设有:WIFI Card、GPS Card、 Bluetooth Card等等。
eMMC
eMMC全称Embedded MultiMediaCard,是MMC协会所制定的内嵌式存储器标准规格,主要应用于智能手机和移动嵌入式产品等。eMMC是一种嵌入式非易失性存储系统,由闪存和闪存控制器两部分组成,它的一个明显优势是在封装中集成了一个闪存控制器,它采用JEDEC标准