whutxuan
驱动小牛
驱动小牛
  • 注册日期2002-03-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2638回复:4

linux内核的入口点在哪里呢?

楼主#
更多 发布于:2003-11-14 11:19
内核的入口点是在什么地方呢?有没有类似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));
}
我想有可能是在这里把启动内核,但是不知道这个函数跳转到哪里!
Inventec
驱动牛犊
驱动牛犊
  • 注册日期2003-04-29
  • 最后登录2005-11-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-01 11:51
解压kernel的入口在..../arch/cpu-type/boot/compressed/head.S中,
kernel的入口在.../arch/cpu-type/kernel/head.S中
真心英雄
wangfei1999
驱动牛犊
驱动牛犊
  • 注册日期2003-12-10
  • 最后登录2003-12-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-10 15:02
在一个 Intel 系统上,当 loadlin.exe 或 LILO 把核心加载到内存并把控制权交给它的时候,核心开始启动。这一部分看 arch/i386/kernel/head.S 。 head.S 执行一些和体系结构相关的设置工作并跳到 init/main.c 中的 main() 例程。

wangqins
驱动小牛
驱动小牛
  • 注册日期2002-04-28
  • 最后登录2007-08-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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,这样我好回答些。
junhli
驱动牛犊
驱动牛犊
  • 注册日期2003-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-31 17:12
init\main.c start_kernel();

[编辑 -  3/31/04 by  junhli]
游客

返回顶部