Raspberry Pi如何启动?


57

我有一台覆盆子迷你计算机,我想知道那东西如何完成整个引导过程。我可以使用自己的脚本编译自己的内核和init ramdisk,并在PC上构建自己的最小Linux系统,但是为此,我需要使用一些引导程序。Raspberry似乎根本不支持引导加载程序。

似乎以某种方式使用其GPU进行了启动,该GPU读取了需要格式化为FAT32的SD卡上的某些分区(可能是带有可启动标志的分区),然后从那里读取了一些文件,例如raspbian提供了这些文件。

但是,如何使用自己编译的自定义项来启动自己的内核?我应该在哪里复制内核映像/ initrd(RAM磁盘),以便树莓找到它并从中启动?我基本上是在寻找一些非常详细的技术文档,这些文档描述了raspberry上的启动过程,或者只是对此的一些解释。


Answers:


59

从此Raspberry Pi论坛帖子 [编辑以反映出loader.bin时代错误]

  1. 首次打开Raspberry Pi时,ARM内核处于关闭状态,GPU内核处于打开状态。此时,SDRAM被禁用。
  2. GPU开始执行第一阶段的引导程序,该引导程序存储在SoC的ROM中。第一级Bootloader读取SD卡,然后将第二级Bootloader(bootcode.bin)加载到L2高速缓存中并运行它。
  3. bootcode.bin启用S​​DRAM,然后将第三级引导加载程序(loader.bin)从SD卡读入RAM,然后运行它。 [较新的版本不使用第三阶段的引导程序。]
  4. [如果适用] loader.bin读取GPU固件(start.elf)。
  5. start.elf读取config.txtcmdline.txt以及kernel.img

loader.bin没有做太多。它可以处理.elf文件,因此需要将其加载start.elf到内存顶部(ARM使用地址为零的SDRAM)。有计划将elf加载支持添加到中bootcode.bin,这将loader.bin不必要,但是优先级较低(我想这可能会在启动时为您节省100ms)。[此更改已发生。]

以下是一些有用的资源:


2
这些bin文件的内容是否都是专有软件?
彼得

3
@Petr 是Raspberry Pi固件的Github,我将其编辑为答案。
syb0rg

1
Raspberry Pi常见问题上,它说:“您必须从SD引导,但是在初次引导后USB HD可以“接管”。没有SD卡就无法引导。”
syb0rg

1
是首先读取的该分区是带有B标志的任何分区,还是必须是第一分区?如果我将其设置得太大而又想在SD卡的末端创建另一个较小的卡该怎么办
Petr

1
@Petr你应该问另一个问题!
syb0rg 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.