返回信息流这个是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到。。。 大大们帮帮忙啊~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #20482同步于 2009/3/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]大大们进来看看~~诡异的结构体定义。。。
thelittlefox
2009/3/21镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
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 */
: ...................
【 在 guo 的大作中提到: 】
: baidu一下就有了吧
: “1. __devinitdata是专门给硬件定义的宏,如果你的
: 系统不支持热插拔的话,改宏没有任何意义,如果你
: ...................
是这样子啊~~ 明白了~~
忘了搜devinitdata了~ 汗个~~ [em17] 搜了半天struct的语法。。。
谢guo兄!!