一些背景
您应该知道的最重要的事情是RaspberryPi是一种奇怪的野兽,ARM CPU
它不是主要的CPU-它只是的协处理器VideoCore GPU
。当RaspberryPi启动时,会将GPU blob从SD卡读取到L2缓存中并执行。然后,此代码启动所有重要的外围设备(RAM,时钟等)并启动ARM CPU
。然后,可以在第二阶段引导加载程序或某些操作系统本身上运行ARM CPU
。
GPU blob不仅是引导程序。实际上,它本身就是一个操作系统(Video Core OS)。ARM CPU无法直接访问系统的某些重要元素,因此必须与之通信GPU
(使用mailbox
消息传递系统)才能使用它们。有部分文档这个可用。Broadcom员工不时地扩展了Video Core OS
(VCOS
)现在,以启用Linux
内核RISC OS
甚至某些业余OS 所需的功能。没有关于此的好的文档,但是,您必须在中进行挖掘RaspberryPi forum
,github
以及其他可能找到有关此信息的地方。但是它在那里..某个地方。还有一些人在RaspberryPi上编写自己的裸机代码甚至操作系统来帮助您。当然还有很多开源代码-例如RasbperryPi的Linux内核。
VideoCore是专有的,没有官方文档和开发工具。因此,除非您要付出很多努力,否则您将无法VCOS
使用自己的代码进行重写。但是,我们需要对Video Core进行反向工程,您可以在此处找到一些信息。
另一个问题是,USB
Synopsys 的堆栈是专有的,并且同样没有文档,而且似乎即使有了文档,也很难可靠地实现它。但是,代码仍然可用(Linux内核,u-boot,CSUD)。使用的高级图形功能Video Core
可能也很难- 图形库有一些开源代码,但这仅是ARM
侧面的。
话虽这么说,但有可能RISC OS
从信息中获取端口(不过,如果他们仅使用可公开访问的信息,对我来说还不是很清楚),有些人(独立于Broadcom)正在重写Linux内核作为主线,在那里是FreeBSD
端口,“ U-boot”和其他端口。因此,绝对可以编写您自己的OS。这并不像可能的那么简单。
你的目标
1号
据我所知,除了描述的方式,SoC不可能以其他方式启动。因此,第一阶段的引导程序必须打开SD card
。它必须是GPU
二进制文件,而不是ARM
二进制文件,这是另一个问题。而且RaspberryPi中没有板载闪存,这也是一个问题。
2号
主要问题是flash
RaspberryPi上没有板载。您可以添加一个,并且可以在引导加载程序中将其激活(必须已经是第二阶段的引导加载程序)。但是,编写USB驱动程序可能会出现问题。
3 4 5
这应该不是什么大问题。此处ARM
记录了大多数外围设备(至少是可访问的外围设备)。由于您已完全配置SoC,因此现有的引导加载程序使此操作变得更加容易。您可以在此处和此处查看一些代码和文档。
备择方案
我不了解RaspberryPi的其他任何主板,因此很难推荐一些东西,但是您可以看看一些成熟的项目,例如基于OMAP的Beagleboard / Beaglebone / Pandaboard,或者可以跟随一些新板的开发,例如基于Allwinner的Cubieboard或PCduino。这完全取决于您要完成什么。