- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下SPI总线驱动有通用接口,一般的SPI设备驱动使用这个驱动接口实现设备驱动。分析驱动最好是先了解核心代码,然后从具体设备分析入手,然后从下至上,了解整个框架,再从上到下分析,理解透彻。
以下分析内核根目录均以src代替。内核代码http://lxr.linux.no/,版本。
SPI的核心代码即
src/drivers/spi/spi.c——SPI 初始化和核心代码
src/drivers/spi/spi_gpio.c——IO模拟SPI接口代码
头文件:
src/include/linux/spi/spi.h
src/include/linux/spi/spi_gpio.h
src/include/linux/spi/spi_bitbang.h
?首先,先看核心代码。
?一步步来,先分析代码,然后看了具体驱动再回过头来看这个核心代码。
?spi.c
--------------------------------------------------------------------------------
?????? /* 这个函数是驱动模块卸载时使用 */? 32static void spidev_release(struct device *dev)? 33{??????????? /* 标准设备结构体转换成SPI设备结构体???????????? * 调用container_of函数获取dev设备所在的SPI设备结构体指针???????????? */? 34??????? struct spi_device?????? *spi = to_spi_device(dev);? 35? 36??????? /* spi masters may cleanup for released devices */??????????? /* 清空SPI主机申请的内存 */? 37??????? if (spi-master-cleanup)? 38??????????????? spi-master-cleanup(spi);? 39??????????? /* 减调用次数 */? 40??????? spi_master_put(spi-master);??????????? /* 释放SPI设备节点内存 */? 41??????? kfree(spi);? 42}
? 43
????? /* 打印模块别名 */? 44static ssize_t? 45modalias_show(struct device *dev, struct device_attribute *a, char *buf)? 46{? 47??????? const struct spi_device *spi = to_spi_device(dev);? 48? 49??????? return sprintf(buf, %s\n, spi-modalias);? 50}
? 51
/* 设置SPI总线属性——名称/显示 */
? 52static struct device_attribute spi_dev_attrs[] = {
? 53??????? __ATTR_RO(modalias),
? 54??????? __ATTR_NULL,
? 55};
56
????? /* 获取设备ID */? 57/* modalias support makes modprobe $MODALIAS new-style hotplug work,? 58 * and the sysfs version makes coldplug work too.? 59 */? 60? 61static const struct spi_device_id *spi_match_id(const struct spi_device_id *id,? 62??????????????????????????????????????????????? const struct spi_device *sdev)? 63{??????????? /* 判断设备中名称与模块别名相同,则返回该设备ID */? 64??????? while (id-name[0]) {? 65??????????????? if (!strcmp(sdev-modalias, id-name))? 66??????????????????????? return id;? 67??????????????? id++;? 68??????? }? 69??????? return NULL;
您可能关注的文档
最近下载
- Unit 4 Helping in the community Part B Read and write课件2025-2026学年度人教PEP英语四年级上册.pptx VIP
- 恶性肿瘤合并急性脏器功能不全患者预后的多维度解析与临床策略研究.docx
- 综合实践活动课程教学设计.pptx
- 02S404 防水套管国标规范.pdf VIP
- 云南省爱我国防知识网络竞赛活动初中组题库及答案.pdf VIP
- 桂林电子科技大学《高等数学》2020-2021学年第二学期期末试卷及答案.pdf VIP
- 义务教育版(2024)五年级 信息科技 《第3课 游戏体验寻规律》教学设计.docx VIP
- 《(湖北省)事业单位聘用合同范本-(以纸本为准)》.doc VIP
- 人教版九年级化学总复习计划..doc VIP
- FreeCAD中文教程-翻译版本_freecad【181页】中文教程.pdf VIP
文档评论(0)