菜单

kaoqi
kaoqi
发布于 2026-07-27 / 4 阅读
0
0

PCI驱动在kernel初始化中的调用栈

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的初始化上面去。


评论