内容来自 韦东山《嵌入式Linux应用开发完全手册》

与移植U-Boot的过程相似,在移植Linux之前,先了解它的启动过程。Linux的启动过程可以分为两部分:架构/开发板相关的引导过程、后续的通用启动过程。如图16.7所示是ARM架构处理器上Linux内核vmlinux的启动过程。之所以强调是vmlinux,是因为其他格式的内核在进行与vmlinux相同的流程之前会有一些独特的操作。比如对于压缩格式的内核zlmage,它首先进行自解压得到vmlinux,然后执行vmlinux开始“正常的”启动流程。

引导阶段通常使用汇编语言编写,它首先检查内核是否支持当前架构的处理器,然后检查是否支持当前开发板。通过检查后,就为调用下一阶段的start kernel函数作准备了。这主要分如下两个步骤。

(1)连接内核时使用的虚拟地址,所以要设置页表、使能MMU。

(2)调用C函数start_kernel之前的常规工作,包括复制数据段、清除BSS段、调用start_kernel函数。

第二阶段的关键代码主要使用C语言编写。它进行内核初始化的全部工作,最后调用rest init 函数启动init 过程,创建系统第一个进程:init进程。在第二阶段,仍有部分架构/开发板相关的代码,比如图16.7中的setup_arch函数用于进行架构/开发板相关的设置(比如重新设置页表、设置系统时钟、初始化串口等)。

Linux内核移植之四:内核启动过程相关推荐

  1. Linux内核开发——内核镜像文件及启动过程

    1. 内核镜像文件 1.1. vmlinux vmlinux是elf(Excutable And Linkable),即可执行文件.里面含有调试信息,可用于调试,所以占有空间较大.gcc编译连接之后直 ...

  2. Linux从头学05-系统启动过程中的几个神秘地址,你知道是什么意思吗?

    作 者:道哥,10+年的嵌入式开发老兵. 转 载:欢迎转载文章,转载需注明出处. 文章目录 0xFFFF:0x0000 0xF000:0xE05B 0x0000:0x7C00 在第一篇文章中,我们就提 ...

  3. linux内核2.6.35编译过程

    一.实验目的 学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容 在Linux操作系统环境下重新编译内核.实验主要内容: A. 查找并且下载一份内核源代码,本实验使用 ...

  4. (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>

    目录 一.bootloader.kernel.rootfs联系 二.内核移植 1. 内核源码获取 2. 内核配置与编译

  5. Linux启动过程综述(转)

    本文转自:http://www.ibm.com/developerworks/cn/linux/kernel/startup/ 2001 年 5 月 01 日 本文以Redhat 6.0 Linux ...

  6. Linux 开机引导和启动过程详解

    你是否曾经对操作系统为何能够执行应用程序而感到疑惑?那么本文将为你揭开操作系统引导与启动的面纱. 理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的.该文章陈述了 GRUB2 ...

  7. rhel系统启动过程_技术|Linux 开机引导和启动过程详解

    你是否曾经对操作系统为何能够执行应用程序而感到疑惑?那么本文将为你揭开操作系统引导与启动的面纱. 理解操作系统开机引导和启动过程对于配置操作系统和解决相关启动问题是至关重要的.该文章陈述了 GRUB2 ...

  8. Linux启动过程基本指南

    每次你上电你的Linux PC,在最终显示一个提示你输入用户名和密码的登录窗口前,它经过了一系列阶段.每钟Linux发行版在一般启动过程中经过了4个不同阶段. 用户登录提示 在这里,我们将重点突出Li ...

  9. linux efi 启动原理,Linux(RHEL6)启动过程详解

    Linux(RHEL6)启动过程详解 Linux(红帽RHEL6)启动过程详解: RHEL的一个重要和强大的方面是它是开源的,并且系统的启动过程是用户可配置的.用户可以自由的配置启动过程的许多方面,包 ...

最新文章

  1. Matlab编程与数据类型 -- 多分支条件选择语句if/elseif/…/else/end
  2. Linux 最常用命令:简单易学,但能解决 95% 以上的问题
  3. 5、HIVE DML操作、load数据、update、Delete、Merge、where语句、基于分区的查询、HAVING子句、LIMIT子句、Group By语法、Hive 的Join操作等
  4. CSS样式表——超链接样式
  5. 反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征
  6. Html中meta标签的用法和作用
  7. Docker学习总结(33)——Docker环境下搭建 MySQL 主从复制
  8. linux命令及其使用方法,Linux命令及其使用方法
  9. PyCharm快捷键总结
  10. 讲真,灾备的内涵其实很丰富
  11. matlab画圆的命令_matlab画圆命令资料
  12. 哈理工c语言,哈理工C语言试题.doc
  13. 谷歌浏览器能打开网页微信_Chrome浏览器打开微信页面-Go语言中文社区
  14. java中的lt;和gt;分别是什么意思
  15. logback prudent, SiftingAppender, layout, encoder的使用
  16. 战神遗迹服务器未响应怎么回事,战神遗迹怎么进不去 黑屏闪退解决方法介绍...
  17. 有的QQ临时会话要求加好友
  18. python append使用方法
  19. 【MFC】使用TabControl创建Tab分页
  20. Win10计算机窗口空白,Win10系统下启用或关闭windows功能打开后显示空白如何解决...

热门文章

  1. linux下g编译文件或目录,【转】在linux下使用gcc/g++编译多个.h文件
  2. Python读取保存在hdf5文件中的脑电数据
  3. 运动是如何改造我们的大脑?
  4. 赶上直播电商、在线教育、小程序直播的风口 腾讯音视频解决方案助力
  5. 云从创始人周曦追忆导师黄煦涛:他是化繁为简的大师,对学生不求回报关怀细微...
  6. 国内首个手机AR实景驾驶导航上线,还能识别车辆行人,搜狗地图出品
  7. 为了孩子上名校,他们发论文给子女署名,Nature发文报道韩国学术不当行为
  8. .net core webapi 通过swagger生成说明文档
  9. 深入分析 Redis Lua 脚本运行原理
  10. Harris’s Linked List