我正在阅读有关Linux内核加载过程的信息(只是为了理解整个序列),我对以下控件之间的转换特别怀疑:
例如,在维基百科中,我发现了以下内容:
加载的内核通常是一个图像文件,使用zlib压缩为zImage或bzImage格式。 头部的例行程序执行最少量的硬件设置,将图像完全解压缩到高内存中,并在配置时注意任何RAM磁盘。[3] 然后通过./arch/i386/boot/head和startup_32()
执行内核启动
我在这里有几个问题:
我继续在同一页面阅读,我发现了以下内容:
... start_kernel执行各种初始化函数。它设置中断处理(IRQ),进一步配置内存,启动Init进程(第一个用户空间进程),...
我知道init是第一个创建的用户空间进程。以下问题的答案:
How the init process is started in linux kernel?
声明内核使用do_execve()调用。但是,正常execv系统调用的语义是覆盖调用进程(在这种情况下是内核?)bss,数据,文本和堆栈段与新进程中的那些,它没有返回即可。
为什么在这种情况下确实会返回? (否则,如果它没有返回内核就不会继续它的启动过程)
提前致谢,