PCI驱动是一个很优雅的东西,比起微软丑陋的ACPICA项目来说,顺眼的不止一点半点。
PCI驱动在start_kernel函数的末尾,
arch_call_rest_init() ==》 rest_init() ==》 kernel_thread(kernel_init, NULL, CLONE_FS) ==》kernel_init_freeable() ==》do_basic_setup() ==》 do_initcalls() ==》 kernel命令行传参 ==》 pci_driver_init()
其中pci_driver_init()函数就从init过程转移到/drivers/pci下的pci-driver.c文件了。
这里遗留了2个问题:
1、kernel的启动过程是紧跟着grub或者uboot启动的,在grub或者uboot启动kernel的时候,会 传递给kernel一个字符串,需要澄清字符串的作用。
2、由initcalls函数去执行command的时候,并不会显式直接关联到PCI的初始化上面去,因此需要了解DTB或者ACPI形成了什么东西,配合了kernel的什么命令,可以关联到PCI的初始化上面去。