Hee*_*ang 11 arm bootloader raspberry-pi
最近我开始研究嵌入式系统和嵌入式Linux.我知道在嵌入式系统中,操作系统存储在Flash或ROM中.当它打开时,引导加载程序将操作系统加载到主存储器中,而使用Raspberry Pi,"flash或ROM"是SD卡.
所以,我正在寻找Raspberry Pi因为我想开始练习一个,而且我对"引导"Raspberry Pi的概念感到困惑.我的问题是Raspberry Pi使用的bootloader是什么以及它是如何工作的?(也就是说,内核之前发生怎样的过程?head.o?main.c?(启动内核))
old*_*mer 16
这个过程已经被描述为死亡,你应该没有问题在网上找到它.
raspberry pi包含一个GPU和一个ARM处理器,两个独立的处理器.GPU首先出现,我假设由片上ROM或硬件驱动,读取SD卡寻找第一个引导文件bootcode.bin.就我们而言,GPU引导加载程序没有记录,它将芯片提升到一定程度,然后加载start.elf另一个GPU程序.那个gpu程序完成了启动芯片(ddr init)并最终加载了kernel.img这是ARM应用程序(不是arm bootloader而是linux中的应用程序),它将它直接加载到ram中并执行正常的bootloader会做什么准备手臂启动linux(通常几乎没有),然后手臂启动.
传统的引导加载程序是指您只有一个处理器,而且该处理器也将运行应用程序/操作系统.像redboot和uboot这样的名称,但这些已经变得非常复杂,操作系统本身也是如此.它需要很少的启动linux,在ram中放置一些ATAG并设置几个寄存器就是这样(当然你已经提出了系统/ ram等不需要太多代码,但是需要很多代码例如,ddr的代码,较新的linuxs有更多的东西要设置,但不是太多.
raspberry pi初创公司的简洁性以及可移动非易失性存储(SD卡)的功能优雅,它可以让你回到引导前的日子里,你可以将roms弹出并擦除它们,它有一些那些痛苦,但有办法解决这个问题.到目前为止,可能有第三方复杂(uboot等)引导程序可用.拥有可移动闪存意味着您不需要复杂的引导加载程序,您不必担心使用损坏的应用程序来破坏系统,只需移除闪存并进行更改即可恢复.Bootloader已经从避免移除介质成长为避免在编程之后不必拆焊闪存和重新焊接,或者在预定有焊接部件的电路板上使用插座.
现在的kernel.img(在某一点加载到0x00000000)加载到0x8000.这就是您需要知道的所有内容,它是您使用引导加载程序时的正常内核图像.然后,只要将地址0x8000链接到二进制文件的开头和起始点,就可以编写所需的任何裸机或其他程序/应用程序.如果你想使用异常,你需要以某种方式编写异常表(有多种方法可以做到这一点).另一种方法是使用传统模式设置,您可以使用可选文件config.txt进行配置,并将内核.img加载到0x0000,就像rpi的早期版本一样.我个人用现在默认的0x8000,其他裸机人采取其他路径......
我有一个非常简单的xmodem引导程序和一个设置jtag引脚,因此你可以使用jtag(这两种情况都可以避免在你开发应用程序时跳SD跳数百到数千次).还有其他一些,一些更复杂,甚至可能有一个网络工作的usb.
| 归档时间: |
|
| 查看次数: |
14691 次 |
| 最近记录: |