linux sdio网卡注册,linux下MMC/SD/SDIO驱动系列之二 ---- host注册过程(一)

上篇文章说到了MMC/SD/SDIO(以下简称MMC)的驱动从大的方面来说分为主设备驱动和从设备驱动,那本文就来详细的讲述主设备驱动注册的过程。

MMC主设备(也就是host)指的是集成于CPU内部的MMC controller,笔者用的是4412芯片,从datasheet可以看出,里面集成了四个MMC controller,分别是mmc0,mmc1,mmc2,mmc3。 并且从上一篇文章我们知道,WIFI模块是接在mmc3 这个host上面。

在linux系统中,将每个host设备封装成platform_device来逐一进行注册。对于笔者所使用的内核(3.2.0版本)来说,每一个host设备所对应的platform_device文件位于目录($KERNEL_SOURCE)/arch/arm/plat-samsung下,分别为dev-hsmmc.c,dev-hsmmc1.c,dev-hsmmc2.c,dev-hsmmc3.c,为了与实际WIFI模块对应,我们重点进入dev-hsmmc3.c文件看一看

0818b9ca8b590ca3270a3433284dd417.png

从上图可以看出,该文件里面定义了一个名为s3c_device_hsmmc3的platform_device,但是定义好了的platform_device还需要有一个注册的过程,该过程就发生在文件($KERNEL_SOURCE)/arch/arm/mach-exynos/mach-$(BOARD).c中,其中有如下的一个函数调用:

0818b9ca8b590ca3270a3433284dd417.png

它的行为就是将数组skd4x12_devices里面的每一个platform_device项一一注册进系统,并且这个数组里面就包含了上面所定义的s3c_device_hsmmc3

0818b9ca8b590ca3270a3433284dd417.png

所以总结来说,系统化在初始化的时候,就已经将s3c_device_hsmmc3(也就是那个host  mmc3)注册进了platform总线(其他的mmc0,mmc1,mmc2都是一个道理)。

当然,对于熟悉platform机制的朋友来说,此时仅仅只是注册了platform_device ,而对应的platform_driver还没有注册。下面就来说说这个platform_driver的注册,它是在$(KERNEL_SOURCE)/drivers/mmc/host目录下的sdhci-s3c.c文件中进行的,该文件中有如下的一个注册函数调用:

0818b9ca8b590ca3270a3433284dd417.png

其中的参数sdhci_s3c_driver就是上面所说的platform_driver,它也是定义在sdhci-s3c.c文件中,来看一下:

0818b9ca8b590ca3270a3433284dd417.png

在对sdhci_s3c_driver进行注册的过程中,系统会根据sdhci_s3c_driver->driver.name成员变量(此处是“s3c-sdhci”)在platform_bus 总线上寻找同名字的platform_dvice(这个过程称之为“探测”),通过上面对s3c_device_hsmmc3的注册分析,发现s3c_device_mmc3.name也刚好是“s3c-sdhci”,所以他俩刚好可以配对,探测成功,同时当大家查阅s3c_device_hsmmc,s3c_device_hsmmc1以及s3c_device_hsmmc2的时候发现他们的name成员变量都是“s3c-sdhci”,,所以会有四次成功的探测,每一次探测成功,就会调用sdhci_s3c_driver.probe函数---sdhci_s3c_probe,这个函数至关重要,在整个驱动注册过程中起着核心作用,关于它的详细内容,见下一篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值