阅读:2638回复:4
linux内核的入口点在哪里呢?
内核的入口点是在什么地方呢?有没有类似Dos的main呢?我看到了初始化串口的函数rs_init,却没有看到任何函数调用它。
刚刚看了 runkernel(void) { __asm__ __volatile__( \"bis %1,%1,$30\\n\\t\" \"bis %0,%0,$27\\n\\t\" \"jmp ($27)\" : /* no outputs: it doesn\'t even return */ : \"r\" (START_ADDR), \"r\" (PAGE_SIZE + INIT_STACK)); } 我想有可能是在这里把启动内核,但是不知道这个函数跳转到哪里! |
|
沙发#
发布于:2003-12-01 11:51
解压kernel的入口在..../arch/cpu-type/boot/compressed/head.S中,
kernel的入口在.../arch/cpu-type/kernel/head.S中 |
|
|
板凳#
发布于:2003-12-10 15:02
在一个 Intel 系统上,当 loadlin.exe 或 LILO 把核心加载到内存并把控制权交给它的时候,核心开始启动。这一部分看 arch/i386/kernel/head.S 。 head.S 执行一些和体系结构相关的设置工作并跳到 init/main.c 中的 main() 例程。
|
|
地板#
发布于:2003-12-19 23:40
不同的系统不太一样,你还需要仔细分析arch/<platform>/Makefile文件,找到Head-y到底是那个文件--如head-y=boot8260.S。
那么boo8260.S就是你的初始入口点。 在嵌入式CPU中开始有个Bootloader,还有些参数传递的过程。不同的Bootloader不太一样。 一般来说:Kernel的需要执行以下操作: 1. HeadXXX.s. __start: early_init machine_init(确定Platform的种类,填写一些结构,如arm_md struct i386_md ppc_md等) MMU_init(确定分页机制) jump to _start_kernel(在init/main.c中) 2. main.c setup_arch(这段代码不同的arch不一样,不同的Platform也不一样) 之后的其他代码各个系统都差不太多。 大概就是这样,如有问题可以继续问我,最好确定你所采用的CPU,这样我好回答些。 |
|
地下室#
发布于:2004-03-31 17:12
init\main.c start_kernel();
[编辑 - 3/31/04 by junhli] |
|