树莓派raspberry之bootloader启动分析

学嵌入式怎么能不看看系统的启动流程,也就是bootloader的运行。一般的嵌入式开发板都是arm上电后调用nand或者sd卡的0x0000地址的程序开始运行,这段程序也就是bootloader,bootloader的第一阶段进行cpu配置,把自身程序复制到ram运行,再调用内核kernel.今晚看了一下树莓派boot的启动流程,发现还是很有趣的,和一般的嵌入式开发板不一样。

个人原创,版权所有,转载请注明原文出处,并保留原文链接:

http://www.embbnux.com/2014/04/21/raspberry_bootloader_startup/ 

参考:

 http://elinux.org/RPi_Software

树莓派的bootloader启动方式和普通的arm不一样。主要是由树莓派的硬件决定的。树莓派上面的主要芯片是一颗BCM2835. BCM2835是一颗soc芯片,这个有一个芯片上有一个arm11的CPU,还有一个GPU用来处理图形。CPU和GPU是共用内存的,具体分配可以用raspi_config配置。

树莓派的启动是GPU和CPU协同工作的:

首先: 上电,上电后首先运行的是GPU里面的一个小核心。

GPU里面小核心就像单片机,在芯片内的FLASH预先烧录了一端程序,这段程序上电后开始运行。

这段程序的功能就是用FAT32挂载SD卡,这个功能在单片机上就可以实现哦!

挂载SD卡后,调用我们放在sd卡boot分区里面的bootcode.bin到内存运行,这个就是我们通常说的bootloader.再调用start.elf到内存,然后再启动GPU,GPU运行start.elf的程序,开始一系列的配置。再掉用kernel.img即Linux内核到内存。

 然后GPU再让这个arm11开始运行。也就是内核启动啦。

就到这里了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据