BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #20482同步于 2009/3/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]大大们进来看看~~诡异的结构体定义。。。

thelittlefox
2009/3/21镜像同步2 回复
这个是linux内核源代码里无线网卡驱动的一部分 static struct pci_device_id ath5k_pci_id_table[] __devinitdata = { { PCI_VDEVICE(ATHEROS, 0x0207), .driver_data = AR5K_AR5210 }, /* 5210 early */ { PCI_VDEVICE(ATHEROS, 0x0007), .driver_data = AR5K_AR5210 }, /* 5210 */ { PCI_VDEVICE(ATHEROS, 0x0011), .driver_data = AR5K_AR5211 }, /* 5311 - this is on AHB bus !*/ { PCI_VDEVICE(ATHEROS, 0x0012), .driver_data = AR5K_AR5211 }, /* 5211 */ { PCI_VDEVICE(ATHEROS, 0x0013), .driver_data = AR5K_AR5212 }, /*Proxim 使用的应该是这个5212 */ { PCI_VDEVICE(3COM_2, 0x0013), .driver_data = AR5K_AR5212 }, /* 3com 5212 */ { PCI_VDEVICE(3COM, 0x0013), .driver_data = AR5K_AR5212 }, /* 3com 3CRDAG675 5212 */ { PCI_VDEVICE(ATHEROS, 0x1014), .driver_data = AR5K_AR5212 }, /* IBM minipci 5212 */ { PCI_VDEVICE(ATHEROS, 0x0014), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x0015), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x0016), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x0017), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x0018), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x0019), .driver_data = AR5K_AR5212 }, /* 5212 combatible */ { PCI_VDEVICE(ATHEROS, 0x001a), .driver_data = AR5K_AR5212 }, /* 2413 Griffin-lite */ { PCI_VDEVICE(ATHEROS, 0x001b), .driver_data = AR5K_AR5212 }, /* 5413 Eagle */ { PCI_VDEVICE(ATHEROS, 0x001c), .driver_data = AR5K_AR5212 }, /* 5424 Condor (PCI-E)*/ { 0 } }; ============================================================================ __devinitdate和struct之间的为什么会有两个关键字?.drive_data这个是什么意思?MS当初讲C的时候没有学过这种定义 ~~[em2] google没有google到。。。 大大们帮帮忙啊~~
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
guo机器人#1 · 2009/3/21
baidu一下就有了吧 “1. __devinitdata是专门给硬件定义的宏,如果你的 系统不支持热插拔的话,改宏没有任何意义,如果你 是支持热插拔的系统,改宏的意义等同于__initdata __initdata的意义应该很清楚了,就是说在设备加载 启动完成后,凡是带有该标记的变量所占有的内存在 初始化完成后都将被释放,这就是你为什么在linux的 内核启动完成后,经常可以看到多少多少K的memory被 内核free掉的信息 2.这是GNU C中的特性,术语称为labeled elements 一般的C编译器必须要求一个结构在赋初始值的时候 得按照你定义该结构的顺序来赋值。而GNU C的这个 特性允许你不用按照定义改结构的顺序来赋值,只要 用变量名加冒号的形式来赋值即可。这个特性在给 一个union赋值的时候特别有效。注意的是,GNU C++ 并不支持该特性。” 那个.driver_data是乱序初始化struct http://forum.byr.edu.cn/wForum/disparticle.php?boardName=CPP&ID=18337 【 在 thelittlefox 的大作中提到: 】 : 这个是linux内核源代码里无线网卡驱动的一部分 : static struct pci_device_id ath5k_pci_id_table[] __devinitdata = { : { PCI_VDEVICE(ATHEROS, 0x0207), .driver_data = AR5K_AR5210 }, /* 5210 early */ : ...................
thelittlefox机器人#2 · 2009/3/21
【 在 guo 的大作中提到: 】 : baidu一下就有了吧 : “1. __devinitdata是专门给硬件定义的宏,如果你的 : 系统不支持热插拔的话,改宏没有任何意义,如果你 : ................... 是这样子啊~~ 明白了~~ 忘了搜devinitdata了~ 汗个~~ [em17] 搜了半天struct的语法。。。 谢guo兄!!