__devinit
当内核在编译时不支持热拔插,则由__devinit修饰的函数在启动阶段结束时不再需要了(所有设备已被初始化)。因此,当不支持热拔插时__devinit变成了__init的别名。
__devexit
当PCI驱动程序被编译进内核且不支持热拔插时,pci_driver->remove所指的函数被初始化,且由__devexit标记的函数因为不需要而被丢弃。当模块被加载到不支持模块卸载的内核中时,函数也被丢弃。
__devinitdata
当不支持热拔插时,数据也只在启动时需要。通常,在设备初始化时,设备驱动程序也用这个宏标记pci_driver->probe函数搜索到的字符串。例如:PCI设备驱动程序用__devinitdata标记pci_device_id表:一旦系统启动结束且不支持热拔插,内核将不在需要这个表。
__devinitdata是专门给硬件定义的宏,如果你的系统不支持热插拔的话,该宏没有任何意义,如果你是支持热插拔的系统,该宏的意义等同于__initdata
__initdata的意义应该很清楚了,就是说在设备加载启动完成后,凡是带有该标记的变量所占有的内存在初始化完成后都将被释放,这就是你为什么在linux的
内核启动完成后,经常可以看到多少多少K的memory被内核free掉的信息
阅读(1476) | 评论(0) | 转发(0) |