詳解linux 驅(qū)動編寫(sd卡驅(qū)動)
隨著sd卡的流行,sd卡在嵌入式設備上使用的場景也越來越多。那下面我們可以看一下,linux驅(qū)動框架上是怎么處理sd卡驅(qū)動的?
1、代碼目錄地址
drivers/mmc
2、基本結(jié)構(gòu)
從mmc的代碼結(jié)構(gòu)可以看得出,主要分為兩個部分,其中core為協(xié)議部分,host為各個soc的適配部分
host是我們需要真正關(guān)心的代碼
3、以s3c為例,觀察makefile
obj-$(CONFIG_MMC_SDHCI_S3C) += sdhci-s3c.o ...... obj-$(CONFIG_MMC_S3C) += s3cmci.o
4、根據(jù)s3c閱讀Kconfig,確認s3c下的sd卡還依賴哪些文件
config MMC_SDHCI_S3C tristate "SDHCI support on Samsung S3C SoC" depends on MMC_SDHCI && PLAT_SAMSUNG help This selects the Secure Digital Host Controller Interface (SDHCI) often referrered to as the HSMMC block in some of the Samsung S3C range of SoC. If you have a controller with this interface, say Y or M here. If unsure, say N. config MMC_SDHCI_S3C_DMA bool "DMA support on S3C SDHCI" depends on MMC_SDHCI_S3C help Enable DMA support on the Samsung S3C SDHCI glue. The DMA has proved to be problematic if the controller encounters certain errors, and thus should be treated with care. YMMV. config MMC_S3C tristate "Samsung S3C SD/MMC Card Interface support" depends on ARCH_S3C24XX depends on S3C24XX_DMAC help This selects a driver for the MCI interface found in Samsung's S3C2410, S3C2412, S3C2440, S3C2442 CPUs. If you have a board based on one of those and a MMC/SD slot, say Y or M here. If unsure, say N.
5、MMC_S3C和MMC_SDHCI_S3C是主要的macro,接著了解兩個macro對應文件的數(shù)據(jù)結(jié)構(gòu)
首先看一下s3cmci.c文件,
static const struct mmc_host_ops s3cmci_ops = { .request = s3cmci_request, .set_ios = s3cmci_set_ios, .get_ro = mmc_gpio_get_ro, .get_cd = mmc_gpio_get_cd, .enable_sdio_irq = s3cmci_enable_sdio_irq, };
再看一下sdhci-s3c.c文件,
static struct sdhci_ops sdhci_s3c_ops = { .get_max_clock = sdhci_s3c_get_max_clk, .set_clock = sdhci_s3c_set_clock, .get_min_clock = sdhci_s3c_get_min_clock, .set_bus_width = sdhci_set_bus_width, .reset = sdhci_reset, .set_uhs_signaling = sdhci_set_uhs_signaling, };
6 、從host角度來說,有了platform driver和上面的host driver,驅(qū)動流程就算搞清楚了。
但是如果深入下去的話,還是需要好好讀一下sd協(xié)議,這里面花的時間最多。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解centos7 下雙網(wǎng)卡如何配置靜態(tài)IP
這篇文章主要介紹了詳解centos7 下雙網(wǎng)卡如何配置靜態(tài)IP,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12CentOS 7.4下安裝Oracle 11.2.0.4數(shù)據(jù)庫的方法
本篇文章主要介紹了CentOS 7.4下安裝Oracle 11.2.0.4數(shù)據(jù)庫的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Debian 9系統(tǒng)下修改默認網(wǎng)卡為eth0的方法
這篇文章主要給大家介紹了在Debian 9系統(tǒng)下修改默認網(wǎng)卡為eth0的方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06Linux 詳解 /var/log/xferlog的各個字段解析
這篇文章主要介紹了Linux 詳解 /var/log/xferlog的各個字段解析的相關(guān)資料,需要的朋友可以參考下2017-05-05