詳解linux 驅動編寫(sd卡驅動)
隨著sd卡的流行,sd卡在嵌入式設備上使用的場景也越來越多。那下面我們可以看一下,linux驅動框架上是怎么處理sd卡驅動的?
1、代碼目錄地址
drivers/mmc
2、基本結構
從mmc的代碼結構可以看得出,主要分為兩個部分,其中core為協(xié)議部分,host為各個soc的適配部分
host是我們需要真正關心的代碼
3、以s3c為例,觀察makefile
obj-$(CONFIG_MMC_SDHCI_S3C) += sdhci-s3c.o ...... obj-$(CONFIG_MMC_S3C) += s3cmci.o
4、根據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對應文件的數據結構
首先看一下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,驅動流程就算搞清楚了。
但是如果深入下去的話,還是需要好好讀一下sd協(xié)議,這里面花的時間最多。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
CentOS 7.4下安裝Oracle 11.2.0.4數據庫的方法
本篇文章主要介紹了CentOS 7.4下安裝Oracle 11.2.0.4數據庫的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12Debian 9系統(tǒng)下修改默認網卡為eth0的方法
這篇文章主要給大家介紹了在Debian 9系統(tǒng)下修改默認網卡為eth0的方法,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06Linux 詳解 /var/log/xferlog的各個字段解析
這篇文章主要介紹了Linux 詳解 /var/log/xferlog的各個字段解析的相關資料,需要的朋友可以參考下2017-05-05