您的位置首页>企业动态>

Embeded linux中的MMC驱动

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Embeded linux中的MMC驱动问题。一、注册平台设备platform _ device _ reg

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Embeded linux中的MMC驱动问题。

一、注册平台设备

platform _ device _ register(usr _ MCI _ device);

二、填写平台设备结构体

静态结构平台设备usr _ mci _ device={。名称='xxx '。id=0。dev={。release=usr _ mci _ platdev _ release。dma_mask=usr_mmc_dmamask。相干_dma_mask=DMA_BIT_MASK(32),

},num _ resources=ARRAY _ SIZE(usr _ MCI _ resources)。资源=usr_mci_resources,

};

三、填写资源结构体(物理地址查芯片手册)

静态结构资源usr _ MCI _ resources[]={ 0

[0]={。start=CONFIG_USR_IOBASE。end=CONFIG _ USR _ IOBASE USR _ MCI _ IO _ SIZE-1。flags=IORESOURCE_MEM,

},

[1]={。start=CONFIG_USR_INTR。end=CONFIG_USR_INTR。flags=IORESOURCE_IRQ,

},

};

四、注册平台驱动

platform _ driver _ register(usr _ MCI _ driver);

五、填写平台驱动结构体

staTIc struct platform _ driver usr _ MCI _ driver={ 0。probe=usr_mci_probe。移除=usr_mci_remove。挂起=usr _ mci _挂起,恢复=usr_mci_resume。驱动程序={ 0。name=DRIVER_NAME,

},

};

六、重写调查函数

staTIc int _ _ devinit usr _ MCI _ probe(struct platform _ device * pdev)

七、创建一个自己的设备结构体

struct usr_host {

struct mmc _ host * mmc

自旋锁_t锁;

结构mmc _ request * mrq

struct mmc _ command * cmd

结构mmc _数据*数据;

void _ _ iomem * base

无符号国际卡状态

结构体散点图* dma _ sg

无符号int dma _ sg _ num

无符号int dma _ alloc _ size

无符号int dma _ dir

dma _ addr _ t dma _ paddr

无符号int * dma _ vaddr

结构TImer _ list timer

无符号整数中断请求

无符号整数irq _ status

无符号(同Internationalorganizations)国际组织是调谐(_ n)

wait _ queue _ head _ t intr _ wait

无符号长挂起事件;

无符号整数id;

};

结构usr _ host * host

八、分配一个包含了mmc _主机的自定义结构体(核心需要)

structmmc _ host * mmc

MMC=MMC _ alloc _ host(sizeof(struct usr _ host),pdev-dev);

九、初始化mmc _主机结构体

mmc-ops

mmc-f_min

mmc-f_max

MMC-cap

mmc-max_blk_count

分叶核中性白细胞

mmc-max_seg_size

mmc-max_req_size

mmc-ocr_avail

mmc-ocr

十、初始化usr _主机

主机=MMC-私有;

host-DMA _ vaddr=DMA _ alloc _ coherent(pdev-dev,PAGE_SIZE,host-dma_paddr,GFP _ KERNEL);

主机-MMC=MMC;

主机身份证明(identification)

主机基地

十一、初始化SDIO的时钟、驱动能力

十二、SDIO复位

十三、SDIO重上电

十四、设置时钟相位

十五、设置阈值

十六、设置中断状态

十七、设置中断屏蔽

十八、设置直接存储器存取搬移数据

十九、设置全局中断使能

二十、设置先进先出。比较后进先出法。比较FIFO突发长度与先进先出。比较后进先出法。比较FIFO大小

二十一、卡检测

二十二、初始化定时器,定时处理函数为卡检测

二十三、获取资源结构体的软中断号

二十四、初始化等待队列

init _ wait queue _ head(host-intr _ wait);

二十五、请求_irq注册中断

二十六、写中断函数(唤醒等待队列)

静态irqreturn_t usr_irq(int irq,void *dev_id)

{

唤醒(host-intr _ wait);

}

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。