官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 81|回复: 1

关于 interface_to_usbdev 返回值的理解

[复制链接]

13

主题

31

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2019-8-14 23:29:02 | 显示全部楼层 |阅读模式
注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!
此板块为[第二期Linux驱动开发]
  • 问题所在章节:12章节 usb 那一节
  • 发生问题的运行环境:
  • 问题发生描述:
interface_to_usbdev 的返回值,刚开始的时候,一直没看明白。
#define        interface_to_usbdev(intf) \
        container_of(intf->dev.parent, struct usb_device, dev)
interface_to_usbdev 只是个宏定义,真正实现的是在 include\linux\kernel.h 中的  container_of 宏

#define container_of(ptr, type, member) ({                        \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);        \
        (type *)( (char *)__mptr - offsetof(type,member) );})

这个宏的意思是 :首先定义一个临时的数据类型(通过typeof( ((type *)0)->member )获得)与ptr相同的指针变量__mptr,
然后用它来保存ptr的值。 用(char *)__mptr减去member在结构体中的偏移量,
得到的值就是整个结构体变量的首地址(整个宏的返回值就是这个首地址) ,类型是 type * 即(struct usb_device *) 类型。
再看 container_of 这个宏的  type 参数 是 struct usb_device
所以下面的 这个返回值类型是:  struct usb_device * :
struct usb_device *dev = interface_to_usbdev(intf);
以上就是自己的一些理解,权当记录,有错误,还望指出,谢谢!


  • 输出的错误信息:

回复

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2019-12-12 10:06 , Processed in 0.101360 second(s), 12 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表