第11章 SD卡驱动移植 Linux系统移植(第2版) 教学课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.用于卡的探测和初始化函数 mmc_sd_init_card()
2.删除SD卡函数mmc_sd_remove() 3.初始化主机结构体函数mmc_alloc_host() 4.初始化主机硬件函数mmc_add_host() 5.删除host硬件函数mmc_remove_host() 6.释放主机结构体函数mmc_free_host()
};
4.探针函数
探针函数s3cmci_probe(),用于分配 s3cmci_host结构体,然后对该结构体进行 设置。对结构体mmc_host进行设置,将 结构体mmc添加到主机。
5.mmc接口函数
mmc子系统的接口函数包括request、set_ios、get_ro、 get_cds。其结构如下:
方式发送数据,否则采用fifo方式发送数据。如果为命令则通过函数 s3cmci_send_command()发送命令*/ s3cmci_send_request(mmc); }
11.2.2 core驱动部分
core驱动部分完成不同协议和规范的实现, 包括设置在11.1节中介绍的有关SD卡相关的 状态或修改状态、修改寄存器等操作。
第11章 SD卡驱动移植
11.1 SD卡简介wenku.baidu.com 11.2 SD卡驱动程序分析 11.3 SD卡移植步骤
11.1.2 SD卡寄存器
名字 CID RCA DSR CSD SCR OCR SSR CSR
宽度
描述
128 卡识别号,每张卡都有唯一的识别号
16 发布卡的地址,卡的局部系统地址,在初始化过程中,由主机和卡动态支持
); //注销平台设备驱动 }
3.接口函数
平台设备接口函数包括probe、remove、shutdown、suspend、 resume。其结构如下:
static struct platform_driver s3cmci_driver = {
.driver
={
.name = "s3c-sdi",
16 驱动级寄存器,配置卡的驱动输出
128 卡的协议数据,关于卡的操作状态数据
64 卡配置寄存器,关于卡特性容量的信息
32 操作状态寄存器
512 SD状态,有关卡拥有的特性信息
32 卡状态,有关卡状态的信息
11.1.3 SD功能描述
主机与卡之间的通信都是由主机控制的, 主机发送的命令有两种类型,分别为广播 命令和地址(点对点)命令。
static struct mmc_host_ops s3cmci_ops = {
.request = s3cmci_request, 送
//实现命令和数据的发
.set_ios = s3cmci_set_ios, 来设置硬件IO
//根据核心层传来的ios
.get_ro
= s3cmci_get_ro,
函数s3cmci_request()用于CORE部分发送mrq请求。 static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq) { struct s3cmci_host *host = mmc_priv(mmc); host->status = "mmc request"; host->cmd_is_stop = 0; host->mrq = mrq; /卡*如没果有卡准准备备就就绪绪,,则则调通用过msm3ccm_rceiq_useesntd__droenqeue()s终t ()止发请送求请*/求,将mrq赋给host->mrq,如果 if (s3cmci_card_present(mmc) == 0) { dbg(host, dbg_err, "%s: no medium present\n", __func__); host->mrq->cmd->error = -ENOMEDIUM; mmc_request_done(mmc, mrq); } else /s*3函cm数cis_3scemndci__rseeqnude_srte(q)建ue立st (数)首据先,判然断后是判否断为是发否送为数dm据a命方令式,,如如果果为为发dm送a方数式据则则通通过过d函m数a
platform_driver_register(&s3cmci_driver); //注册平台设备驱动
}
2.驱动注销函数
驱动注销函数s3cmci_exit(),用于注销平 台设备驱动。
static void __exit s3cmci_exit(void) { platform_driver_unregister(&s3cmci_driver
✓ 广播命令 ✓ 地址(点对点)命令 ✓ 卡识别模式 ✓ 数据传输模式
1.操作状态的验证
2.卡的初始化和识别处理
3.数据传输模式
11.2 SD卡驱动程序分析
11.2.1 host驱动部分 11.2.2 core驱动部分 11.2.3 card驱动部分
11.2.1 host驱动部分
host驱动部分是针对不同类型主机的驱动, 支持的开发板包括atmel、S3C等。这里就 以S3C系统为例介绍host部分的主要内容。
1.驱动的注册函数 2.驱动注销函数 3.接口函数 4.探针函数 5.mmc接口函数 6.传递结构体为mmc_request类型的请求
1.驱动的注册函数
驱动的注册函数s3cmci_init(),用于注册 平台设备驱动。
static int __init s3cmci_init(void) { return
取,判断卡是否写保护
//从GPIO口读
.get_cd
= s3cmci_card_present, //从GPIO口读
取,判断卡是否存在
.enable_sdio_irq = s3cmci_enable_sdio_irq, //允许STDIO中 断请求
};
6.传递结构体为mmc_request类型 的请求
.owner = THIS_MODULE,
.pm = s3cmci_pm_ops,
},
.id_table = s3cmci_driver_ids,
.probe
= s3cmci_probe,
.remove = __devexit_p(s3cmci_remove),
.shutdown = s3cmci_shutdown,
2.删除SD卡函数mmc_sd_remove() 3.初始化主机结构体函数mmc_alloc_host() 4.初始化主机硬件函数mmc_add_host() 5.删除host硬件函数mmc_remove_host() 6.释放主机结构体函数mmc_free_host()
};
4.探针函数
探针函数s3cmci_probe(),用于分配 s3cmci_host结构体,然后对该结构体进行 设置。对结构体mmc_host进行设置,将 结构体mmc添加到主机。
5.mmc接口函数
mmc子系统的接口函数包括request、set_ios、get_ro、 get_cds。其结构如下:
方式发送数据,否则采用fifo方式发送数据。如果为命令则通过函数 s3cmci_send_command()发送命令*/ s3cmci_send_request(mmc); }
11.2.2 core驱动部分
core驱动部分完成不同协议和规范的实现, 包括设置在11.1节中介绍的有关SD卡相关的 状态或修改状态、修改寄存器等操作。
第11章 SD卡驱动移植
11.1 SD卡简介wenku.baidu.com 11.2 SD卡驱动程序分析 11.3 SD卡移植步骤
11.1.2 SD卡寄存器
名字 CID RCA DSR CSD SCR OCR SSR CSR
宽度
描述
128 卡识别号,每张卡都有唯一的识别号
16 发布卡的地址,卡的局部系统地址,在初始化过程中,由主机和卡动态支持
); //注销平台设备驱动 }
3.接口函数
平台设备接口函数包括probe、remove、shutdown、suspend、 resume。其结构如下:
static struct platform_driver s3cmci_driver = {
.driver
={
.name = "s3c-sdi",
16 驱动级寄存器,配置卡的驱动输出
128 卡的协议数据,关于卡的操作状态数据
64 卡配置寄存器,关于卡特性容量的信息
32 操作状态寄存器
512 SD状态,有关卡拥有的特性信息
32 卡状态,有关卡状态的信息
11.1.3 SD功能描述
主机与卡之间的通信都是由主机控制的, 主机发送的命令有两种类型,分别为广播 命令和地址(点对点)命令。
static struct mmc_host_ops s3cmci_ops = {
.request = s3cmci_request, 送
//实现命令和数据的发
.set_ios = s3cmci_set_ios, 来设置硬件IO
//根据核心层传来的ios
.get_ro
= s3cmci_get_ro,
函数s3cmci_request()用于CORE部分发送mrq请求。 static void s3cmci_request(struct mmc_host *mmc, struct mmc_request *mrq) { struct s3cmci_host *host = mmc_priv(mmc); host->status = "mmc request"; host->cmd_is_stop = 0; host->mrq = mrq; /卡*如没果有卡准准备备就就绪绪,,则则调通用过msm3ccm_rceiq_useesntd__droenqeue()s终t ()止发请送求请*/求,将mrq赋给host->mrq,如果 if (s3cmci_card_present(mmc) == 0) { dbg(host, dbg_err, "%s: no medium present\n", __func__); host->mrq->cmd->error = -ENOMEDIUM; mmc_request_done(mmc, mrq); } else /s*3函cm数cis_3scemndci__rseeqnude_srte(q)建ue立st (数)首据先,判然断后是判否断为是发否送为数dm据a命方令式,,如如果果为为发dm送a方数式据则则通通过过d函m数a
platform_driver_register(&s3cmci_driver); //注册平台设备驱动
}
2.驱动注销函数
驱动注销函数s3cmci_exit(),用于注销平 台设备驱动。
static void __exit s3cmci_exit(void) { platform_driver_unregister(&s3cmci_driver
✓ 广播命令 ✓ 地址(点对点)命令 ✓ 卡识别模式 ✓ 数据传输模式
1.操作状态的验证
2.卡的初始化和识别处理
3.数据传输模式
11.2 SD卡驱动程序分析
11.2.1 host驱动部分 11.2.2 core驱动部分 11.2.3 card驱动部分
11.2.1 host驱动部分
host驱动部分是针对不同类型主机的驱动, 支持的开发板包括atmel、S3C等。这里就 以S3C系统为例介绍host部分的主要内容。
1.驱动的注册函数 2.驱动注销函数 3.接口函数 4.探针函数 5.mmc接口函数 6.传递结构体为mmc_request类型的请求
1.驱动的注册函数
驱动的注册函数s3cmci_init(),用于注册 平台设备驱动。
static int __init s3cmci_init(void) { return
取,判断卡是否写保护
//从GPIO口读
.get_cd
= s3cmci_card_present, //从GPIO口读
取,判断卡是否存在
.enable_sdio_irq = s3cmci_enable_sdio_irq, //允许STDIO中 断请求
};
6.传递结构体为mmc_request类型 的请求
.owner = THIS_MODULE,
.pm = s3cmci_pm_ops,
},
.id_table = s3cmci_driver_ids,
.probe
= s3cmci_probe,
.remove = __devexit_p(s3cmci_remove),
.shutdown = s3cmci_shutdown,