没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Linux 下 SPI 总线驱动有通用接口,一般的 SPI 设备驱动使用这个驱动接口实现设备驱动。分析
驱动最好是先了解核心代码,然后从具体设备分析入手,然后从下至上,了解整个框架,再从
上到下分析,理解透彻。
以下分析内核根目录均以"src"代替。内核代码 http://lxr.linux.no/,版本 2.6.37.2。
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;
# 70}
# 71
### /* 返回设备 ID */
# 72const struct spi_device_id *spi_get_device_id(const struct spi_device *sdev)
# 73{
# 74####### const struct spi_driver *sdrv = to_spi_driver(sdev->dev.driver);
# 75
# 76####### return spi_match_id(sdrv->id_table, sdev);
# 77}
# 78EXPORT_SYMBOL_GPL(spi_get_device_id);
接上一个继续看 spi.c。
-------------------------------
匹配设备
名词解释
调用层次
用于驱动程序检查 是否在其支持列表里
!"
#$ %
&$ %
'
()*
不匹配返回 ;匹配返回非 ,指向 类型的指针
需要查找的设备%驱动程序结构体
+
,!%
在驱动查找设备 -.,找到返回真,否则假
/0
/110 %
/!
比较设备别名和驱动名称,匹配返回真
/# $$%
/&2
/'
#
-------------------------------
304是内核用户空间的一个环境参数
是 * 向用户空间发出的消息,这里实际上添加的是一串字符串消息。
关于 参
考056635&#!#!!!(/!,,&,67
/(304
/+"
/,$ %
/
//89.):-);$<<8;=-9.>:?=@?-A
%
!%
!!2
#
-------------------------------
电源管理
配置了电源管理
现在不清楚 和 函数哪里实现,等找到了再说
!&BCD-E=9
!'
挂起
!(55
!+"
!,$%
!$ %
!/
!!F%
挂起将定制终端和 .9),没有输入输出
!!! "
驱动实现了挂起操作函数
!!#
!!&$ 5 %
!!'
!!(058666GH8 %
!!+2
!!,%
!!2
!!/
恢复
!#
!#!"
!##$%
!#&$ %
!#'
!#(*F
重新开始输入输出队列
!#+ "
!#,
!#$ %
!#/
!&058666GH8 %
!&!2
!&#%
!&&2
!&'
!&(B没有电源管理
!&+BD>::
!&,BD>::
!&B
#
-------------------------------
总线
总线参考60675II05!#&',&0&#((#+6
!'0*0*$"
!'!6$88
!'#6$
!'&6$
!''6$
!'(6$
!'+6$
!',2%
!'?A=@J;K9L:E=:0* %
#
-------------------------------
驱动注册、删除
M驱动注册
!(!0
!(#"
!(&$ %
!('
!((0 %
!(+2
!(,
驱动删除
!(
!(/"
!+$ %
!+!
!+# %
!+&2
!+'
关闭
!+(
!++"
!+,$ %
!+
!+/ %
!,2
#
-------------------------------
注册 ;=- 总线驱动
注册 ;=- 驱动
!,#
!,&55;=-
!,'N5
!,(C7
!,+
!,,5
!,"
初始化总线结构体
!,/60$O0*%
初始化驱动相关函数
!0
!!60$0%
!#
!&6$%
!'
!(6$%
驱动注册
添加驱动到总线
*、 等创建、初始化
!+5O %
!,2
剩余24页未读,继续阅读
trigtrigcui
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 课程设计-python爬虫-爬取日报,爬取日报文章后存储到本地,附带源代码+课程设计报告
- 软件和信息技术服务行业投资与前景预测.pptx
- 课程设计-基于SpringBoot + Mybatis+python爬虫NBA球员数据爬取可视化+源代码+文档+sql+效果图
- 软件品质管理系列二项目策划规范.doc
- 基于TensorFlow+PyQt+GUI的酒店评论情感分析,支持分析本地数据文件和网络爬取数据分析+源代码+文档说明+安装教程
- 软件定义无线电中的模拟电路测试技术.pptx
- 软件开发协议(作为技术开发合同附件).doc
- 软件开发和咨询行业技术趋势分析.pptx
- 软件测试题详解及答案.doc
- 软件漏洞生命周期管理策略.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页