詳解linux 驅(qū)動編寫(sd卡驅(qū)動)
隨著sd卡的流行,sd卡在嵌入式設(shè)備上使用的場景也越來越多。那下面我們可以看一下,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,確認(rèn)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對應(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角度來說,有了platform driver和上面的host driver,驅(qū)動流程就算搞清楚了。
但是如果深入下去的話,還是需要好好讀一下sd協(xié)議,這里面花的時間最多。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
VScode Remote SSH通過遠(yuǎn)程編輯與調(diào)試代碼
這篇文章主要介紹了VScode Remote SSH通過遠(yuǎn)程編輯與調(diào)試代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
centos7下搭建ZooKeeper3.4中間件常用命令小結(jié)
Zookeeper 作為一個分布式的服務(wù)框架,主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題,它能提供基于類似于文件系統(tǒng)的目錄節(jié)點(diǎn)樹方式的數(shù)據(jù)存儲。這篇文章主要介紹了centos7下搭建ZooKeeper3.4中間件常用命令小結(jié),需要的朋友可以參考下2019-07-07
Linux基礎(chǔ)學(xué)習(xí)之文件查找find的常見用法
這篇文章主要給大家介紹了關(guān)于Linux基礎(chǔ)學(xué)習(xí)之文件查找find的常見用法的相關(guān)資料,例如:根據(jù)文件名查找、根據(jù)正則表達(dá)式查找、根據(jù)路徑查找、根據(jù)文件類型查找以及根據(jù)文件大小等等,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒。2017-12-12

