主题 : 关于SPI驱动重复device_register注册的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 55215
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2011-09-14
最后登录: 2011-11-23
楼主  发表于: 2011-09-14 11:33

 关于SPI驱动重复device_register注册的问题

最近在学习基于2.6.18内核的SPI驱动,SPI外设驱动是直接使用内核自带的spidev.c这个驱动文件。ARM9上集成了一个SPI主机控制器。根据2.6内核的设备驱动模型,SPI主机控制器的设备注册是作为平台设备注册到内核中去的,SPI主机控制器的驱动注册过程中调用了自身驱动的probe函数,在这个probe函数里通过层层调用,最终在spi_new_device这个SPI核心层函数中使用device_register函数对扫描到的SPI外设进行设备注册,然而在SPI外设驱动注册的过程中,spidev.c里的probe函数对SPI外设又使用了device_register函数进行设备注册,请问这样先后注册两次怎么回事?按道理来说,注册一次就够了吧?注册两次不会出错吗?标准的做法应该是怎么样的?(从我的调试过程来看,如果没有spidev.c里的再次注册,LINUX启动后,在/DEV下是没有对应的设备节点的)
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
贡献值: 0 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
1楼  发表于: 2011-09-14 11:46
为何不用2.6.38 ?

你用的这个版本我是没有用过, 所以也不了解情况
级别: 新手上路
UID: 55215
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2011-09-14
最后登录: 2011-11-23
2楼  发表于: 2011-09-14 15:41
        我手头上没有2.6.38 ,有个2.6.32,对比看了一下,32和18在SPI上代码略有不同,主要是函数多封装了一下,没有本质不同,从底层来看都是device_add了2次。我想这几个版本的SPI驱动应该是差不多的,因为从18版本开始SPI驱动就完整成型了,后续的改动应该不变基本的套路。
    我进一步发现,不仅仅是SPI外设device_add了2次,SPI主机控制器也device_add了2次,第一次是在platform_device_register里device_add了一把,后来在驱动加载后的probe中的spi_register_master函数里再次device_add了一把。也就是说无论是SPI外设还是SPI主机控制器,都被device_add了2次,这2次device_add有何区别和联系?(device_register里封装了device_add)
级别: 新手上路
UID: 147415
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2022-05-07
最后登录: 2022-05-09
3楼  发表于: 2022-05-08 13:15