ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux在arm上启动过程分析

2020-12-01 18:33:35  阅读:170  来源: 互联网

标签:kernel 启动 boot start init linux arm


linux在arm上启动过程分析


*内容主要来源于阅读linux-4.4.1/Documentation/arm中和链接: Boot Sequence

启动过程

从大的方面来讲主要包含四个步骤:
Boot sequence (in order)

  • Boot ROM
  • X-loader
  • U-boot
  • Linux

不去细说其中的细节,主要找找u-boot和linux内核在源代码中的具体位置

u-boot

u-boot,也就是bootloader,需要完成以下几个功能:

  1. Setup and initialise the RAM.
  2. Initialise one serial port.
  3. Detect the machine type.
  4. Setup the kernel tagged list.
  5. Load initramfs.(可选的)
  6. Call the kernel image.

在linux源码中,u-boot对应 linux-4.4.1/arch/arm/boot/bootp/init.S
在同一个目录下的bootp.lds文件制定了生成的u-boot文件的格式。
bootp.lds文件如下所示:
在这里插入图片描述
第一行:OUTPUT_ARCH(arm)指定了cpu的类型,这正是u-boot的功能3。
第二行:ENTRY(_start) 指定了u-boot的开始执行的位置,其中的 _start可以在init.S之中找到,也就是说init.S就是u-boot的执行部分。
在这里插入图片描述

linux kernel的启动

在执行完u-boot,做好了所有为kernel启动准备的工作,就会执行一条语句:

b       kernel_start            @ call kernel

这可以在init.S的taglist之中找到

在这里插入图片描述
从这时候开始,kernel正式启动。
现在关键点是找到启动的位置kernel_start。
kernel_start可以在init.S的同一个目录下的kernel.S文件中找到,kernel.S的内容如下:
在这里插入图片描述
文件中定义了一个标记kernel_start,然后发现启动位置正是zImage的第一条代码;
而kernel的真正启动的第一个代码在文件 kernel/head.S之中。
从这里开始,kernel就开始真正的运行了。

标签:kernel,启动,boot,start,init,linux,arm
来源: https://blog.csdn.net/jundlg/article/details/110443160

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有