Linux启动过程

34 篇文章 0 订阅
 这篇主要讲一下Linux的启动过程。摘自: 柯元旦的《Android内核剖析》,这真是一本好书,放在这里主要是学习使用。
  Linux启动过程对于初学者而言有点扑朔迷离,这是因为启动过程关乎处理器配置、内存配置、外围硬件配置,而不同的处理器和硬件系统采用不同的策略,从而具体的启动过程会有所差异。但无论差异如何,从计算机系统的角度来看,启动过程一般分为三个步骤,如下图:

  首先是开机,给系统供电,此时硬件电路会产生一个确定的复位时序,保证CPU是最后一个被复位的器件。为什么CPU要最后被复位呢?因为,如果CPU第一个被复位,则当CPU复位后开始运行时,其他硬件内部的寄存器状态可能还没有准备好,比如磁盘或者内存,那么就可能出现外围硬件初始化错误。

当正确完成复位后,CPU开始执行第一条指令,该指令所在的内存地址是固定的,这由CPU的制造者指定。不同的CPU可能会从不同的地址获取指令,但这个地址必须是固定的,这个固定地址所保存的程序往往被称为“引导程序(Bootloader)”,因为其作用就是装载真正的用户程序。
  至于如何装载,则是一个策略问题,不同的CPU会提供不同的装载方式,比如有的是通过普通的并口存储器,有的是通过SD卡,还有的通过RS232接口。无论硬件上使用何种接口装载,装载过程必须提供以下信息,具体包括:
  1.从哪里读取用户程序?
  2.用户程序的长度是多少?
  3.装载完用户程序后,应该跳转到哪里,即用户程序的执行入口在哪里?

  不同硬件系统会采用不同的策略,但只要以上三个是确定的,用户程序就会被装载到确定的地址,并执行相同的操作。

第二步是执行内核程序,也就是上一步中所说的“用户程序”。因为在CPU看来,除Bootloader之外的所有的程序都是用户程序,只是从软件的角度来看,用户程序被分为“内核程序”和“应用程序”,而本步执行的是“内核程序”。
 内核程序初始化时执行的操作包括,初始化各种硬件,包括内存、网络接口、显示器、输入设备,然后建立各种内部数据结构,这些数据结构将用于多线程调试的管理等。当内核初始化完毕后,就开始运行具体的应用程序了。在一般情况下,习惯于将第一个应用程序称为“Home程序”。
  第三步就是运行Home程序,比如Windows系统的桌面,就是一个典型的Home程序。之所以称其为Home程序,是因为通过该程序可以方便地启动其他应用程序。而传统的Linux系统启动后,第一个运行程序一般是一个Terminal,尽管它表面上就像一个Dos界面,但它也可以被称为Home程序,因为Home程序设计的目标就是提供一个入口,用户可以通过该入口启动其他应用程序。

接下来了解一下ARM处理器。对于ARM处理器,当复位完毕后,处理器首先执行其片上ROM中一小块程序。 这块ROM的大小一般只有几KB,该段程序就是Bootloader程序,这段程序执行时会根据处理器上一些特定引脚的高低电平状态,选择从何种物理接口上装载用户程序,比如USB口、串口、SD卡、并口Flash等。
多数基于ARM的硬件系统,会从并口Nand Flash芯片中的0x00000000地址处装载程序。
对于一些小型 嵌入式系统而言,该地址中的程序就是最终要执行的用户程序;而对于Android而言,该地址中的程序还不是Android程序,而是一个叫做Uboot的程序,其作用是初始化硬件设备,比如网口、SDRAM、RS23等,并提供一些调试功能,比如向NAND Flash中写入新的数据,这可用于开发过程中的内核烧写、升级等。
  当Uboot被装载后便开始执行,它一般会先检测用户是否按下 了某些特别按键,这些特别按键是Uboot在编译时预先约定好的,用于进入调试模式。如果用户没有按这些特定的按键,则uboot会从nand flas中装载Linux内核,装载的地址是在编译uboot时预先约定好的。
Linux内核被装载后,就开始进行内核初始化的过程,该过程如下表所示:


以上过程中,init.rc文件在Android手机中的系统根目录下。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值