2019独角兽企业重金招聘Python工程师标准>>>

既然是杂谈,内容就比较轻松一点。这里没有教大家怎样一步步去针对新的硬件平台去修改U-Boot代码(说真的,要想学这些还是去看U-Boot的文档比较靠谱),在这我只是泛泛的侃侃Bootloader和怎样生成针对Beaglebone的bootloader,嗯,闲话少叙,这就开始。

先说说Beaglebone的boot过程
    大部分处理器的BOOT过程都要经历多个阶段,所谓的“chained loading method”,每一步新的bootloader都完成一些CPU初始化工作,加载下一步要运行的程序,然后将CPU的控制权完全转交。
    对于Beaglebone平台来说,其使用的是AM335x系列的CPU,系统boot过程分为四大步:
    1)处理器PoR(power-on reset)后就会跳到复位向量所指的程序段去运行,这段程序位于处理器的ROM中,由处理器生产厂商提供,我们称其为ROM Boot Loader(RBL)。RBL在初始化固定存储设备(NAND Flash,MMC,Etc.)后,根据CPU的跳线选择,从持久性存储设备中将第二部要用到的bootloader读入内存(至于是内部还是外部,要根据ROM中的程序来定,Beaglebone是内部ram),而后将控制权转交。
     2)这一步的bootloader我们称为Secondary Program Loader(SPL),当然这是TI的叫法,你也可以称其为xloader,UBL。SPL完成有限的初始化工作,最重要的就是初始化DDR RAM(或是其他大一点的外部RAM),因为下一步的U-Boot将要进驻其中。在这之后,SPL从持久性存储设备中将U-Boot(其他bootloader也行,我们这里以U-Boot为例)读入DDR RAM中,随后转交CPU控制权。
    3)终于到了万众瞩目的U-Boot阶段,使能大部分的处理器功能,将操作系统内核读入DDR RAM中,而后配置启动参数启动Linux内核。当然U-Boot的功能可不止这些,U-Boot中提供了很多应用程序,可以使用tftp下载文件,或是格式化存储设备等等。
    4)Linux内核启动……内核初始化,MMU使能,外部设备初始化,PID(1)Init进程启动……
WHY 4 STEPS?
    好了,那可能有人会问,搞得那么麻烦干嘛?一步Boot起来不行吗?>_< 其实任何一门技术都是让我们的生活变的简单,Bootloader也是,所以其不可能是麻烦……首先,第一步的RBL不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能使用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL也不能很复杂,因为其位于处理器的内部RAM中,一般处理器的内部RAM都要小于128KB,其大小注定其不能完成很复杂的功能,是故,再寻找能力更强大一些的代码,将处理器初始化工作交给它来完成。到了在DDR RAM中执行的Bootloader(U-Boot算一个),其功能就比较完善了,此时就可以启动操作系统了。
    最后上两张图:


图1 Beaglebone boot图解


图2 硬件跳线提示RBL从何处读取SPL

下面就该说说U-BOOT了

U-Boot全名是DAS U-Boot,一看就是德国佬做的,DAS吗…… 背景就不多介绍了,大家自己Google吧。
    处理器在BOOT的前三个阶段都是不适用MMU的,也就是说在此三个阶段运行的程序,都是直接访问处理器的物理地址,只有到操作系统进行MMU初始化后,虚拟地址地址系统才算启动。为什么说这个?如果大家写了裸机程序想使用U-Boot加载运行,别忘了在编译的时候指明要加载的硬件地址!
    U-Boot 主要完成的功能有:
    1)初始化处理器时钟,设置pin mux。
    2)读取内核镜像。
    3)使用用户指定的内核启动参数启动内核。

今天先到这里,有点不舒服……

转载于:https://my.oschina.net/u/614480/blog/112660

Beaglebone bootloader杂谈相关推荐

  1. am335x编写裸机程序并在CCS中用Jlink调试

    摘自:https://blog.csdn.net/mao0514/article/details/46545843 https://blog.csdn.net/colordrv/article/det ...

  2. Arduino vs Raspberry Pi vs BeagleBone

    软硬件整合是今年一再被提及的话题,如今我们也可以看到不少硬件创业的成功案例,比如Jawbone Up.Pebble手表等可穿戴设备,它们可与用户的手机同步,实现软件与硬件的结合.通过硬件创新与软件整合 ...

  3. BeagleBone Black QNX6.6 BSP中IPL的完善

    BeagleBone Black QNX6.6 BSP中IPL的完善 QNX提供的BBB BSP有6.5和6.6两个版本.6.5使用uboot引导,6.6提供了IPL引导程序.下载地址如下 http: ...

  4. Transifex与GTK文档翻译, Linux镜像文件, 外设接口杂谈

    Transifex与GTK文档翻译 参与GTK+开发的一段小经历(2013.10) 最近忽然对GTK+产生了浓厚的兴趣,打算研究一下.学习一个新东西,最好的方法就是先阅读一下它的文档.应该说GTK的文 ...

  5. beaglebone black的cape管理

    为什么80%的码农都做不了架构师?>>>    BBB的cape是如何管理的呢?以下引用"魏来之路"网友的说明,说的很详细: "Beaglebone B ...

  6. Beaglebone Black 最小Linux从零系统编译

    最近再研究beaglebone black,下面记录了从uboot,kernel,busybox编译过程. 要板子上跑linux系统起来,必须需要以下3份源码uboot,kernel,busybox. ...

  7. BeagleBone black 镜像制作

    BeagleBone black 镜像制作 本文采用知识共享署名 4.0 国际许可协议进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,可适当缩放并在引用处附上图片所在的文章链接. beag ...

  8. Beaglebone 中 U-Boot 的启动过程

    简述:一般的嵌入式linux系统从SD卡或eMMC启动的过程都是上电时从硬件固化的ROM中读取数据,引导加载MLO到RAM中运行,进一步将uboot.img引导加载到DDR中运行.之后由uboot来引 ...

  9. Beaglebone Black教程BeagleBone Black安装最新系统映像

    Beaglebone Black教程BeagleBone Black安装最新系统映像 BeagleBone Black安装最新系统映像 Beaglebone Black虽然已经预装了Debian操作系 ...

最新文章

  1. 上拉电阻和下拉电阻_硬件基础:下拉电阻和上拉电阻如何工作
  2. 你想要的宏基因组-微生物组知识全在这
  3. C语言经典例66-输入3个数a,b,c,按大小顺序输出
  4. 实现iOS App的在线安装
  5. StringBuilder的构造方法和append方法
  6. 神舟六号的投入产出比:1比12
  7. excel删除空行_Excel里99.9%的人都踩过的坑,早看早避开!
  8. HDU-3998 Sequence LIS统计
  9. 广州交警发布科目三电子路考操作要点
  10. python小老鼠编程_成都python函数学习教程,Python编写课程
  11. SecureCRT 基本设置
  12. sublime text3 快速生成方法注释
  13. 光敏传感器介绍及其软件应用
  14. AD(PCB)知识总结
  15. 解读阿里巴巴Java手册:为什么不建议使用Executors创建线程池?
  16. IP协议与MAC地址详解
  17. 一般系统论的方法 读书笔记
  18. elasticsearch报错master not discovered yet, this node has not previously joined a bootstrapped (v7+)..
  19. foxmail邮件服务器端口,Foxmail设置教程
  20. 自定义关机计算机,win7自定义定时关机设置方法是什么

热门文章

  1. Debian耳机声音问题
  2. 第01篇:C#星夜拾遗之如何开始C#学习
  3. StrUtils 单元下的公用函数目录
  4. CPU主频频率越高,手机运行速度就越快吗?
  5. MFC创建及读写ini文件操作(转)
  6. C#UDP通讯UdpClient
  7. IOS开发高级之点餐系统的实现-01
  8. IOS开发之UI基础LOL英雄展示-15
  9. linux内核 mpls,将MPLS编译进linux内核中
  10. ospf实验及原理(ensp)