Linux初始化速记

具体内容参考《ULK 3rd》

1. Linux内核的自解压过程在一般软件中不常见。它会调用decompress_kernel()来对kernel进行自解压,核心实现函数为gunzip()

这一块里面对内存的搬来移去还不是很清楚。从文档来看,压缩了的内核和未压缩内核放置的位置是不同的。

2. 然后内核会跳来蹦去,构建一些临时的gdt、idt等。在这段时间里面做了一件很重要的呃事情:填充boot_params结构。这个结构占一页,记录了各种启动时期探测到的参数,为程序的后期执行提供了重要的数据参考。

这一块不明白的地方在于感觉它的工作做得很杂乱,没有条理,而且有些操作有重复之嫌。

3. start_kernel() 这个函数很厉害,里面进行了大量的函数调用,对整个计算机环境进行了初始化,比如建立正式的idt、gdt,初始化页面分配器,初始化调度器等。然后就进入正题:建立内核线程,启动Shell,然后idle之~

这里不清楚的地方主要是start_kernel中的大量函数调用,那些函数的具体功能。太多了,要求很深的功底才行:(

关于驱动的初始化:

start_kernel()最末尾->rest_init()->kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND)->do_basic_setup();->driver_init();->各种init

由此可见,驱动初始化是由kernel_init线程创建的。

你可能感兴趣的:(linux)