从etherboot代码中发现有一个__attribute__的使用,#define __pci_driver __attribute__ ((used,__section__(".drivers.pci")))
/* Defined by the linker... */
extern const struct pci_driver pci_drivers[];
extern const struct pci_driver pci_drivers_end[];
这部分代码是etherboot搜索相应网卡驱动用到的。
for(driver = pci_drivers; driver < pci_drivers_end; driver++) {
/*scan driver*/
}
__section__是把相应的结构放到指定的段.drivers.pci中
在 src/arch/i386/core/etherboot.lds中有下面描述
SECTIONS {
......
.drivers.pci : {
pci_drivers = . ;
*(.drivers.pci);
pci_drivers_end = . ;
}
......
}
说明所有的驱动都放在pci_drivers 和pci_drivers_end两个地址之间,这样可以通过上面的for循环一次查找相应的驱动程序。
unused
属性 unused 用于函数和变量,表示该函数或变量可能不使用,这个属性可以避免
编译器产生警告信息。used反之 。