日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 内核配置sdio,linux SDIO实现

發布時間:2024/3/26 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 内核配置sdio,linux SDIO实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Linu 2.6.21的SDIO驅動,它是除了是mmc_host的驅動外,還是一個Platform驅動.身兼兩職.

在這個版本中,首先是定義三個platform_deivce 以注冊到系統當中。但是它定義在

arch/arm/plat-s3c24xx/devs.c (這會讓人感當相當迷惑),它創建是 s3c-hsmmc設備

struct platform_device s3c_device_hsmmc0 = {

.name???????????? = "s3c-hsmmc",

.id?????????????? = 0,

.num_resources??? = ARRAY_SIZE(s3c_hsmmc0_resource),

.resource???????? = s3c_hsmmc0_resource,

.dev??????????? = {

.platform_data = &s3c_hsmmc0_platform,

}

};

struct platform_device s3c_device_hsmmc1 = {

.name???????????? = "s3c-hsmmc",

.id?????????????? = 1,

.num_resources??? = ARRAY_SIZE(s3c_hsmmc1_resource),

.resource???????? = s3c_hsmmc1_resource,

.dev??????????? = {

.platform_data = &s3c_hsmmc1_platform,

}

};

其platform_driver 定義在drivers/mmc/s3c-hsmmc.c

static struct platform_driver s3c_hsmmc_driver =

{

.probe????????? = s3c_hsmmc_probe,

.remove???????? = s3c_hsmmc_remove,

.suspend??????? = s3c_hsmmc_suspend,

.resume???????? = s3c_hsmmc_resume,

.driver???????? = {

.name?? = "s3c-hsmmc",

.owner? = THIS_MODULE,

},

};

static int __init s3c_hsmmc_drv_init(void)

{

return platform_driver_register(&s3c_hsmmc_driver);

}

static void __exit s3c_hsmmc_drv_exit(void)

{

platform_driver_unregister(&s3c_hsmmc_driver);

}

在s3c_hsmmc_probe函數中,會進行一系列的初始化操作.

Linux 2.6.28的SDIO的實現

Linux 2.6.28又做了進一步調整,原來的s3c-hsmmc的設備和驅動已經放棄,原來在s3c-hsmmc.c 已經成為殘余代碼,雖然在內核中,但是不會加入Makefile編譯。

其新的platform_device 定義分布定義在 dev-hsmmc.c /dev-hsmmc1.c / dev-hsmmc2.c,可以看到設備名字已經變成了

s3c-sdhci

struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata = {

.max_width?= 4,

.host_caps?= (MMC_CAP_4_BIT_DATA | MMC_CAP_MMC_HIGHSPEED |

MMC_CAP_SD_HIGHSPEED),

.cfg_ext_cd?= setup_sdhci0_irq_cd,

.detect_ext_cd?= detect_sdhci0_irq_cd,

.ext_cd??= S3C_EINT(13),

};

struct platform_device s3c_device_hsmmc0 = {

.name??= "s3c-sdhci",?.id??= 0,

.num_resources?= ARRAY_SIZE(s3c_hsmmc_resource),

.resource?= s3c_hsmmc_resource,

.dev??= {

.dma_mask??= &s3c_device_hsmmc_dmamask,

.coherent_dma_mask?= 0xffffffffUL,

.platform_data??= &s3c_hsmmc0_def_platdata,

},

};

它會在系統初始化注冊deivce.

而platform_driver定義在

drivers/mmc/host/sdhci-s3c.c

//drivers/mmc/host/sdhci-s3c.c

static struct platform_driver sdhci_s3c_driver = {

.probe??= sdhci_s3c_probe,

.remove??= __devexit_p(sdhci_s3c_remove),

.suspend??????? = sdhci_s3c_suspend,

.resume???????? = sdhci_s3c_resume,

.driver??= {

.owner?= THIS_MODULE,

.name?= "s3c-sdhci",?},

};

總結

以上是生活随笔為你收集整理的linux 内核配置sdio,linux SDIO实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。