主题 : spi设备驱动程序系列问题 复制链接 | 浏览器收藏 | 打印
好好学习ARM 找个好工作
级别: 新手上路
UID: 20271
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
综合积分: 38 分
注册时间: 2010-04-29
最后登录: 2018-02-08
楼主  发表于: 2012-07-17 16:03

 spi设备驱动程序系列问题

首先,关于spi设备驱动程序开发按照分层分离的思想来开发,我想大家可能都知道了。在此,小弟有迷惑的问题:
其一,在linux内核中提供的驱动程序已经存在了spi主控制器的驱动程序,作为外设(slave)驱动开发人员还需要做主控制器驱动程序吗?
其二,platform驱动指代的是什么驱动?就是针对某一系列的芯片(三星,西门子,诺基亚等)驱动吗?
其三,关于总线,平台,主控制器,外设他们之间的关系是什么,如何实现注册以及相互之间建立联系的?

网上的说法很多,有点乱,看得也有点晕,请高手指点。谢谢了。我想这也是很多开发者关心的,如果您是高手,做点贡献吧!谢谢交流。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2012-07-17 16:33
其一,在linux内核中提供的驱动程序已经存在了spi主控制器的驱动程序,作为外设(slave)驱动开发人员还需要做主控制器驱动程序吗?

不需要

其二,platform驱动指代的是什么驱动?就是针对某一系列的芯片(三星,西门子,诺基亚等)驱动吗?

platform driver是Linux Device Model中(platform) device + (platform) driver + (platform) bus模型的一个组成部分。不光是SoC内建的外设驱动可以用platform driver形式,几乎所有的外设驱动都可以套用它。一个简单的例子是用GPIO button实现的键盘驱动(/drivers/input/keyboard/gpio_keys.c)。关于Linux Device Model的更多信息,参考"Linux Device Driver"第三版(http://www.aiothome.net/read.php?tid-1859.html)的第13章。

其三,关于总线,平台,主控制器,外设他们之间的关系是什么,如何实现注册以及相互之间建立联系的?

内核源代码的Documentation/spi/spi-summary里有一些很有用的信息,我想你最好先认真阅读一下。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
好好学习ARM 找个好工作
级别: 新手上路
UID: 20271
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
综合积分: 38 分
注册时间: 2010-04-29
最后登录: 2018-02-08
2楼  发表于: 2012-07-17 17:27

 回 1楼(kasim) 的帖子

谢谢您指点!多谢啦……
好好学习ARM 找个好工作
级别: 新手上路
UID: 20271
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
综合积分: 38 分
注册时间: 2010-04-29
最后登录: 2018-02-08
3楼  发表于: 2012-07-20 11:42

 回 1楼(kasim) 的帖子

我想就第二个问题 问一下您,我看到网上有些做spi 外设驱动程序的时候,他们都对平台驱动做一下修改,例如在平台支持上添加如下代码:
struct spi_board_info s3c2410_spi_board[] = {
    [0] = {
    .modalias = "spi_fpga",
    //.bus_num =0,
    .chip_select = S3C2410_GPE7,
    .max_speed_hz = 1*1000*1000,
    },
};

struct s3c2410_spi_info s3c2410_spi_platdata = {
.pin_cs = S3C2410_GPE7,
.board_info = s3c2410_spi_board,
.board_size = ARRAY_SIZE(s3c2410_spi_board),
};

这是什么意思?既然是只做一个外设驱动即可,为什么还要修改平台驱动程序呢?
以下这个链接给出了开发方法,http://www.linuxforum.net/forum/showflat.php?Board=driver&Number=689218&page=&view=&sb=&fpart=all
请您深刻指点,谢谢
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2012-07-20 15:33

 回 3楼(tebeg) 的帖子

这些在内核源代码的Documentation/spi/spi-summary里的"DECLARE SLAVE DEVICES”一节有描述。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
好好学习ARM 找个好工作
级别: 新手上路
UID: 20271
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
综合积分: 38 分
注册时间: 2010-04-29
最后登录: 2018-02-08
5楼  发表于: 2012-07-20 16:41

 回 4楼(kasim) 的帖子

问一下大侠,在Linux内核文件目录中,Match-s3c24xx(2410,2440……)和Plat-s3c24xx是什么关系?他们各自是什么作用?在内核中那些文档讲解了他们的作用了?
级别: 新手上路
UID: 81714
精华: 0
发帖: 9
金钱: 50 两
威望: 10 点
综合积分: 18 分
注册时间: 2012-11-13
最后登录: 2013-07-05
6楼  发表于: 2012-11-26 10:39
MARK待读。。。。。。