linux编译mmc驱动,Embeded linux之MMC驱动

一、注册平台设备

platform_device_register(&usr_mci_device);

二、填写平台设备结构体

static struct platform_device usr_mci_device= {

.name          = "xxx",

.id             = 0,

.dev = {

.release     = usr_mci_platdev_release,

.dma_mask  = &usr_mmc_dmamask,

.coherent_dma_mask = DMA_BIT_MASK(32),

},

.num_resources    = ARRAY_SIZE(usr_mci_resources),

.resource          = usr_mci_resources,

};

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

static struct resource usr_mci_resources[] = {

[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= {

.probe = usr_mci_probe,

.remove = usr_mci_remove,

.suspend = usr_mci_suspend,

.resume = usr_mci_resume,

.driver = {

.name = DRIVER_NAME,

},

};

六、重写probe函数

static int __devinit usr_mci_probe(struct platform_device *pdev)

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

struct usr_host {

struct mmc_host*mmc;

spinlock_tlock;

struct mmc_request*mrq;

struct mmc_command*cmd;

struct mmc_data*data;

void __iomem*base;

unsigned intcard_status;

struct scatterlist*dma_sg;

unsigned intdma_sg_num;

unsigned intdma_alloc_size;

unsigned intdma_dir;

dma_addr_tdma_paddr;

unsigned int*dma_vaddr;

struct timer_listtimer;

unsigned intirq;

unsigned intirq_status;

unsigned intis_tuning;

wait_queue_head_tintr_wait;

unsigned longpending_events;

unsigned intid;

};

struct usr_host *host;

八、分配一个包含了mmc_host的自定义结构体(core需要)

struct mmc_host *mmc;

mmc = mmc_alloc_host(sizeof(struct usr_host), &pdev->dev);

九、初始化mmc_host结构体

mmc->ops

mmc->f_min

mmc->f_max

mmc->caps

mmc->max_blk_count

mmc->max_segs

mmc->max_seg_size

mmc->max_req_size

mmc->ocr_avail

mmc->ocr

十、初始化usr_host

host=mmc->private;

host->dma_vaddr = dma_alloc_coherent(&pdev->dev, PAGE_SIZE,&host->dma_paddr, GFP_KERNEL);

host->mmc = mmc;

host->id

host->base

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

十二、SDIO复位

十三、SDIO重上电

十四、设置时钟相位

十五、设置阈值

十六、设置中断状态

十七、设置中断屏蔽

十八、设置DMA搬移数据

十九、设置全局中断使能

二十、设置FIFO突发长度与FIFO大小

二十一、卡检测

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

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

二十四、初始化等待队列

init_waitqueue_head(&host->intr_wait);

二十五、request_irq注册中断

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

static irqreturn_t usr_irq(int irq, void *dev_id)

{

wake_up(&host->intr_wait);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis windows下的环境搭建

先说下安装吧!感觉这东西跟mongodb差不多,安装和布置挺简单,下载地址:https://github.com/dmajkic/redis/downloads 下载下来的包里有两个,一个是32位的,一个是64位的。根据自己的实情情况选择,…

application/json 四种常见的 POST 提交数据方式

四种常见的 POST 提交数据方式 HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 我们知道,HTTP 协议是以 ASCII 码传…

C++的4种类型转换关键字及其特点

C中有四种类型转换关键字,分别是reinterpret_cast,static_cast,const_cast,dynamic_cast.这是C 为了减少强制转换的副作用,并且在查错时使程序员能够快速定位(总是最值得怀疑的)强制转换,在标准C中新增加了4个关键字*…

linux系统数据库类型,linux下的数据类型

sys/types.h sys/types.h中文名称为基本系统数据类型。在应用程序源文件中包含 以访问 _LP64 和 _ILP32 的定义。此头文件还包含适当时应使用的多个基本派生类型。尤其是以下类型更为重要:caddr_t 核心地址。clock_t 表示系统时间(以时钟周期为单位)。comp_t 压缩的…

jsp乱码

自从重装系统之后电脑运行程序总是容易出现一些微妙的乱码,一直都没有彻底解决,有时候在别的机器上运行无误的代码一到我的机器上就出现一些问题。 myeclipse编码方式怎么改都无效,每次只能再代码中加上几行转码的语句 今天终于找到罪魁祸首-…

如何使用Notepad++格式化XML文件

经常会从数据库中读到挤在一起的XML, 整理它们的格式需要使用一些工具. 比如笔者之前使用过online的tool. 后来经同事介绍, 改用VS2008的CtrlK, CtrlF来整理. 但是VS2008有点庞大, 开启起来还是有点慢, 用起来也远不如Notepad顺手. 于是笔者Google了一把. 找到了下面的步骤, 非…

@MySQL的存储引擎

1.存储引擎 查看MySQL提供了哪些存储引擎 mysql> show engines; ----------------------------------------------------------------------------------------------------------------------------- | Engine | Support | Comment …

联想u盘linux安装教程,联想笔记本用U盘安装 winXP系统教程

联想笔记本用U盘安装 winXP系统教程。联想笔记本是指联想集团生产的便携手提电脑。 联想集团成立于1984年,由中科院计算所投资20万元人民币、11名科技人员创办,到今天已经发展成为一家在信息产业内多元化发展的大型企业集团。今天小编将给大家介绍使用U盘…

sharepoint 弹出框

在父页面写如下代码 function showDialog() {var options {url: "page.aspx",args: 7,title: "选择页面",dialogReturnValueCallback: dialogCallback};SP.UI.ModalDialog.showModalDialog(options);}//接收返回值方法function dialogCallback(dialogResu…

jquery 异常

今天遇到一个jquery的错误&#xff0c;too much recursion&#xff08;递归&#xff09;,其实这个错误是由于程序里出现太多的重复动作//以dialog的拖拉为例 if (top<0) {} 在这里&#xff0c;如果top<0,lastTop<top的话&#xff0c;则这两个动作都会执行&#xff0c;…

c++空类实例大小不是0原因

转载&#xff1a;http://blog.csdn.net/hitblue/article/details/3726754 初学者在学习面向对象的程序设计语言时&#xff0c;或多或少的都些疑问&#xff0c;我们写的代码与最终生编译成的代码却 大相径庭&#xff0c;我们并不知道编译器在后台做了什么工作&#xff0e;这些…

为什么Docker是云计算必然的现在和未来

Docker所代表的Container技术&#xff0c;是对内核的Cgroups、namespace等内容的使用.Linux Containerlxc借助BootZdocker可以实现在Mac和Windows上运行CGroups限制容器的资源使用Namespace机制&#xff0c;实现荣期间的隔离chroot,文件系统的隔离Linux内核提供的限制&#xff…

linux桌面环境 mac os,在Windows或Linux桌面上使用Mac OS Dashboard Widget | MOS86

Windows Vista中引入了Gadgets&#xff0c;并在Windows 7中继续使用。它们允许您从最新的新闻更新到月球的各个阶段查看各种信息&#xff0c;并在桌面上使用一些有用的实用程序。我们以前写过一个程序&#xff0c;允许您在Windows XP中使用Windows 7风格的小工具和一些实用程序…

spark 笔记 16: BlockManager

spark 笔记 16&#xff1a; BlockManager 先看一下原理性的文章&#xff1a;http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ &#xff0c;http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ , 另外&#xff0c;spar…

python的异常处理

python的try语句有两种风格 一&#xff1a;种是处理异常&#xff08;try/except/else&#xff09; 二&#xff1a;种是无论是否发生异常都将执行最后的代码&#xff08;try/finally&#xff09; try/except/else风格 try: <语句> #运行别的代码 except <名字>&…

解决SQL单用户模式不能转为多用户模式

数据库CS 转为单用户模式后&#xff0c;却不能访问属性&#xff0c;一直想不通&#xff0c;但毕竟是测试用的&#xff0c;也就没放心上。网上找到段代码可以恢复多用户模式。却还是不能解决不能访问单用户属性的问题。USE master;GoDECLARE SQL VARCHAR(MAX);SET SQLSELECT SQL…

C++ stringstream介绍,使用方法与例子

C引入了ostringstream、istringstream、stringstream这三个类&#xff0c;要使用他们创建对象就必须包含sstream.h头文件。   istringstream类用于执行C风格的串流的输入操作。 ostringstream类用于执行C风格的串流的输出操作。 strstream类同时可以支持C风格的串流的输入…

xp下添加linux启动,如何在windows xp系统下安装linux???

我刚刚想开始学linux&#xff0c;请教如何安装&#xff01;|我今天才安装了Redhat 9.0。LINUX不可能在WINDOWS下安装。比较简单的方法是先在XP下用PQMAGIC分好区boot ext3 100M , / ext3 6G , swap 内存1&#xff0d;2倍详细见www.linuxfans.org linux安装说明最后&#xf…

linux rar安装

描述&#xff1a;Linux默认自带ZIP压缩&#xff0c;最大支持4GB压缩&#xff0c;RAR的压缩比大于4GB. 流程&#xff1a;下载 》安装 》 使用 -------------------------------------------------- 下载 # wget http://www.rarsoft.com/rar/rarlinux-x64-5.2.1b1.tar.gz--16:01:…

hoj 2739 中国邮局问题

1 /*若原图的基图不连通,2 或者存在某个点的入度或出度为 0 则无解。3 统计所有点的入度出度之差 Di, 对于 Di > 0 的点,4 加边(s, i, Di, 0); 对于 Di < 0 的点加边(i, t, -Di,0);5 对原图中的每条边(i, j),6 在网络中加边(i, j, ∞, Dij),Dij 为边(i, j)的权值。7 求一…