__atribute__使用:关于_attribute__ ((used,__section__(".xxxx")))的理解

从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反之 。

你可能感兴趣的:(linux学习)