引导 ARM Linux 需要一个引导加载程序,它是一个先于内核运行的小段程序。 引导加载程序被用于初始化各种设备,并最终调用 Linux 内核,同时给内核传递参数。

总之,引导加载程序需要提供一下几种功能: 1. 设置和初始化内存 2. 初始化一个串口 3. 检测机器类型 4. 设置内核标签列表 5. 加载 initramfs 6. 调用内核镜像

1. 设置和初始化内存Existing boot loaders: MANDATORY

New boot loaders: MANDATORY

引导加载程序用来查询和初始化所有内存,该过程是体系结构相关的。

2. 初始化一个串口Existing boot loaders: OPTIONAL, RECOMMENDED

New boot loaders: OPTIONAL, RECOMMENDED

引导加载程序应该在目标办上初始化和使能一个串口, 这样可以使内核串口驱动自动地检测哪个串口可用于内核控制台。

另外,引导加载程序可以通过标记列表传递 'console=' 选项给内核指定端口, 串口参数格式选项详见:Documentation/admin-guide/kernel-parameters.rst

3. 检测机器类型Existing boot loaders: OPTIONAL

New boot loaders: MANDATORY except for DT-only platforms

引导加载程序需要通过一些方法来检测目标板类型,最终提供给内核一个 MACH_TYPE_xxx的值给内核,该值详见:linux/arch/arm/tools/mach-types。 该值需要放在寄存器 r1 中。

4. 设置引导数据Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED

New boot loaders: MANDATORY

引导加载程序必须一个标记列表或者 dtb 镜像给内核,该引导数据的物理地址需要放置在寄存器 r2 中。

引导家在程序必须创建和初始化内核标记列表,一个有效的标记列表开始于ATAG_CORE, 结束于ATAG_NONE。引导加载程序最少要传递系统内存的大小和位置以及文件系统位置。 因此最小的标记列表类似于:

+-----------+

base -> | ATAG_CORE | |

+-----------+ |

| ATAG_MEM | | increasing address

+-----------+ |

| ATAG_NONE | |

+-----------+ v

标记列表应该放置在系统 RAM 中,推荐放置在前 16KiB 处,以防止被内核解压缩程序覆盖掉。

5. 加载 initramfsExisting boot loaders: OPTIONAL

New boot loaders: OPTIONAL

6. 调用内核镜像Existing boot loaders: MANDATORY

New boot loaders: MANDATORY

调用内核镜像 zImage 有两种可能,如果 zImage 位于 flash 中,并且被正确链接, 那么就可以直接在 flash 中调用 zImage。同时 zImage 也可能在 RAM 中调用, 内核应该放置在内存的前 128MiB 中,推荐加载到 32MIB 之上来避免内核在解压缩之前重定位, 这可以加快引导速度。

如果引导的是原生的内核,那么内核的加载位置就必须严格等于 TEXT_OFFSET - PAGE_OFFSET。

无论什么情况,以下条件必须得到满足:关闭所有 DMA 相关的设备

CPU 寄存器设置r0 = 0

r1 = 机器类型码

r3 = 标记列表在系统内存中的物理地址

CPU 模式关闭所有中断

CPU 必须处于 SVC 模式

缓存和 MMUMMU 必须关闭

指令缓存可以打开可以关闭

数据缓存必须关闭

引导加载程序应该直接跳转到内核镜像处执行第一条指令

arm linux驱动 知乎_引导 ARM Linux相关推荐

  1. arm linux驱动 知乎_学习linux驱动开发的方法?

    大二搞完51单片机,大三搞了msp430,飞思卡尔,大四前开始arm9+linux,读研三年就是折腾了linux和一些小项目,现在工作两年多了,相对来说自我感觉成长比较快.C语言是最基础最基础的开始, ...

  2. linux漏洞知乎_安装 Manjaro Linux 后必做的 6 件事 | Linux 中国

    你刚刚全新安装了 Manjaro Linux,那么现在该做什么呢? 作者:Dimitrios Savvopoulos 译者:Hilton Chain (本文字数:1579,阅读时长大约:2 分钟) 下 ...

  3. arm裸机与嵌入式linux驱动开发,如何编写基于ARM的裸机程序和基于Linux的驱动程序?...

    在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序. ARM架构:Cortex-A9Linux内核:3.14 在讲述ADC之前, ...

  4. 详解Linux驱动技术(五) _设备阻塞/非阻塞读写

    在Linux驱动程序编写过程中,设备阻塞/非阻塞读写是一种非常重要的技术.它可以实现高效的数据传输和事件处理,提高系统的性能和响应速度.在本文中,我们将深入探讨Linux驱动技术(五) _设备阻塞/非 ...

  5. arm linux考勤,定稿毕业论文_基于ARM与Linux的员工刷卡考勤系统喜欢就下吧(范文1)...

    <毕业论文_基于ARM与Linux的员工刷卡考勤系统.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文_基于ARM与Linux的员工刷卡考勤系统(喜欢就下吧)> ...

  6. Linux——Linux驱动之基本理论常识总结(什么是Linux驱动?Linux驱动需要掌握哪些?ARM处理体系架构及前世今生)

     [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> 目录 0 ...

  7. Linux 驱动开发 三十五:Linux 内核时钟管理

    参考: linux时间管理,时钟中断,系统节拍_u010936265的博客-CSDN博客_系统节拍时钟中断 Linux内核时钟系统和定时器实现_anonymalias的专栏-CSDN博客_linux内 ...

  8. linux代理过载命令_我们基于Linux的机器人的未来,数据过载和管理以及更多新闻

    linux代理过载命令 在本周的开源新闻摘要中,我们将介绍Linux驱动的机器人无人机,用于数据过载和数据管理的开源软件,以及更多内容. 2016年2月7日至12日的开源新闻摘要 我们基于Linux的 ...

  9. linux aarch64启动不了,引导AArch64 Linux

    前注:本文是Documentation/arm64/booting的翻译. 这篇文章基于Russell King所写的<the ARM booting document>,并与AArch6 ...

  10. Linux驱动视频教程推荐,隆重推荐:linux驱动基础开发系列免费教程独家版本

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 相信大家经常网上闲逛,会经常碰到很多的linux免费教程之类得,但是今天我推荐的这个linux驱动基础开发系列免费教程可不是网上可以随意找到得.废话少说: ...

最新文章

  1. Scanpy(二)对PBMC3k聚类
  2. MS SQL2005数据库备份
  3. Python字符串格式化之format方法详解
  4. 八个非常实用的vsCode扩展插件,千万别错过了!
  5. Qt Creator Qt Quick用户界面表单ui-forms
  6. 来,和腾讯一起共建未来城市
  7. hdu1873 看病要排队-优先队列
  8. 效率源希捷硬盘远程维修案例-K9盘卡死引起的F级处理
  9. [FFmpeg] 绘制矩形框
  10. 软件测试:QQ登录测试用例
  11. Java任务调度表达式,Java定时任务表达式,附带在线表达式生成器链接
  12. android真机调试工具,ADB 安卓真机调试工具
  13. 计算机桌面工具栏,win7电脑计算机界面菜单工具栏不见了怎么办?
  14. Google Reader 推出简体中文版 Google(谷歌)阅读器
  15. Abnova 基因 FISH 探针丨CCND1(橙色)FISH 探针
  16. 【有利可图网】PS实战系列:PS美化婚纱照片
  17. iOS设计模式四部曲(二) 结构型模式 内附Demo
  18. AD域用户加入域中的各个组解释
  19. 凯撒密码解密加密(C语言)
  20. 高级查询(二)+php中文网,MySQL高级查询方法之记录查询

热门文章

  1. C++中方法的(值参数、ref、out、params)详解
  2. 190521每日一句
  3. 传智播客扫地僧C/C++学习笔记冒泡排序
  4. 扇贝有道180915每日一句
  5. Attit 现代编程语言重要特性目录第一章 类型系统 基本三大类型 2第一节 字符串 数字 bool 2第二节 推断局部变量 2第三节 动态类型 2第二章 可读性与开发效率 简单性 2
  6. Atitit 查找算法 艾提拉大总结 目录 1. 查找算法分类 1 1.1. 简单查找算法之折半查找、插值查找、斐波那契查找 1 1.2. 按照数据结构查找法分类 hash 表 1 2. 第8章查找
  7. Atitit web 之道 艾龙著 Atitit web 之道 艾龙艾提拉著v2 saa.docx 1. 第1章 Web编程基础知识 (1) 3 1.1. 1.1 什么是Web (1) 3 1.2.
  8. Atitit.嵌入式web 服务器 java android最佳实践
  9. atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p
  10. Atitit. IE8.0 显示本地图片预览解决方案 img.src=本地图片路径无效的解决方案