詳解linux 驅(qū)動(dòng)編寫(xiě)(sd卡驅(qū)動(dòng))
隨著sd卡的流行,sd卡在嵌入式設(shè)備上使用的場(chǎng)景也越來(lái)越多。那下面我們可以看一下,linux驅(qū)動(dòng)框架上是怎么處理sd卡驅(qū)動(dòng)的?
1、代碼目錄地址
drivers/mmc
2、基本結(jié)構(gòu)
從mmc的代碼結(jié)構(gòu)可以看得出,主要分為兩個(gè)部分,其中core為協(xié)議部分,host為各個(gè)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,確認(rèn)s3c下的sd卡還依賴(lài)哪些文件
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,接著了解兩個(gè)macro對(duì)應(yīng)文件的數(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角度來(lái)說(shuō),有了platform driver和上面的host driver,驅(qū)動(dòng)流程就算搞清楚了。
但是如果深入下去的話(huà),還是需要好好讀一下sd協(xié)議,這里面花的時(shí)間最多。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Linux下如何安裝Run文件格式NVIDIA顯卡驅(qū)動(dòng)
- 如何編寫(xiě)Linux設(shè)備驅(qū)動(dòng)程序
- Linux內(nèi)核模塊和驅(qū)動(dòng)的編寫(xiě)
- Linux 字符設(shè)備驅(qū)動(dòng)框架詳細(xì)介紹
- linux 驅(qū)動(dòng)編寫(xiě)之虛擬字符設(shè)備的編寫(xiě)實(shí)例詳解
- linux 驅(qū)動(dòng)之Kconfig文件和Makefile文件實(shí)例
- linux 觸摸屏驅(qū)動(dòng)編寫(xiě)
- 詳解linux lcd驅(qū)動(dòng)編寫(xiě)
- 詳解linux pwm驅(qū)動(dòng)編寫(xiě)
- 詳解linux dma驅(qū)動(dòng)編寫(xiě)
相關(guān)文章
詳解centos7 下雙網(wǎng)卡如何配置靜態(tài)IP
這篇文章主要介紹了詳解centos7 下雙網(wǎng)卡如何配置靜態(tài)IP,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12centos7切換啟動(dòng)內(nèi)核與切換啟動(dòng)模式的講解
今天小編就為大家分享一篇關(guān)于centos7切換啟動(dòng)內(nèi)核與切換啟動(dòng)模式的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04CentOS 7.4下安裝Oracle 11.2.0.4數(shù)據(jù)庫(kù)的方法
本篇文章主要介紹了CentOS 7.4下安裝Oracle 11.2.0.4數(shù)據(jù)庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Debian 9系統(tǒng)下修改默認(rèn)網(wǎng)卡為eth0的方法
這篇文章主要給大家介紹了在Debian 9系統(tǒng)下修改默認(rèn)網(wǎng)卡為eth0的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06Linux 詳解 /var/log/xferlog的各個(gè)字段解析
這篇文章主要介紹了Linux 詳解 /var/log/xferlog的各個(gè)字段解析的相關(guān)資料,需要的朋友可以參考下2017-05-05linux中$符號(hào)的基礎(chǔ)用法總結(jié)
這篇文章主要給大家介紹了關(guān)于linux中$符號(hào)的基礎(chǔ)用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11