内核版本:2.6.22
1. PCI access mode: BIOS, direct, mmconfig, any。
BIOS mode:有的BIOS程序提供了针对PCI总线的操作,这些操作包括总线枚举,此种BIOS称为PCI BIOS;此种方式直接使用BIOS程序枚举的结果。(64位平台没有该选项) 。
Direct mode: 内核进行PCI总线枚举过程。
MMConfig: PCIE才用的上,PCI用不上。
ANY: 首先尝试MMConfig、然后Direct、都失败后再尝试BIOS。
2. PCI设备配置寄存器的内容是谁写入的?
总线枚举。
芯片组:
北桥+南桥。
北桥中包含host bridge, 即RC(root complex)。
部分信息(如vendor id、device id)固化在设备中;其他信息在总线枚举阶段,有内核酌情设置。
3. 中断
过程:设备产生中断信号(电信号)->中断控制器->CPU->内核->中断处理程序(事先注册,与指定中断关联)。
PIC: 只能用于一个处理器的系统;每个PIC提供8个中断线。
APIC:
能够处理CPU之间的中断。
中断线数量增多至255。
Local APIC + IO APIC。
可通过/proc/interrupts查看系统有没有使用IO APIC。
MSI:
往预定义的内存地址写入预定义的消息来提出中断请求。
PCI设备->TLP消息-> Host Bridge -> CPU-> 内核->中断处理程序。
依赖于CONFIG_X86_LOCAL_APIC。
4. kconfig语法:Documentation/kbuild/kconfig-language.txt。
5. 源码:
drivers/pci/Makefile; arch/x86/pci/Makefile。
include/linux/init.h (page 902): 各个入口宏的定义。将不同的函数指针存放在.initcall.init的指定子节中