树莓派的可入侵性级别


35

我从事嵌入式系统(主要是微控制器)的工作已有3年左右。我想知道实际开源的RPi多少?我知道arduino为我们提供了硬件/软件等的完整详细信息。但是RPi呢?这很重要,因为我的团队并且我想对树莓派进行以下操作(此项目打算像arduino => no OS一样使用RPi):

  1. 重写主引导程序(ROM)以从闪存而不是外部SD卡引导。
  2. 板载闪存中有一个辅助引导程序,这会激活pi的usb端口并进行监听。它必须接受二进制代码(它将从我的PC中获得)并将其保存在闪存中。稍后开始执行它。
  3. 开发我们自己的设备驱动程序以处理通信协议。
  4. 为PI开发我们自己的上载器和调试环境,以及针对ARM的嵌入式C的自定义实现(需要控制GPIO等)。
  5. 如果可能,为嵌入式系统实现我们自己的操作系统。

树莓派有可能吗?如果不是,
->树莓派不可能实现我的五个目标。如果必须使用PI,我必须对项目进行哪些更改?
->市场上还有哪些其他板子可以让我完全完成我想要的工作?

Answers:


76

一些背景

您应该知道的最重要的事情是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 OSVCOS)现在,以启用Linux内核RISC OS甚至某些业余OS 所需的功能。没有关于此的好的文档,但是,您必须在中进行挖掘RaspberryPi forumgithub以及其他可能找到有关此信息的地方。但是它在那里..某个地方。还有一些人在RaspberryPi上编写自己的裸机代码甚至操作系统来帮助您。当然还有很多开源代码-例如RasbperryPi的Linux内核。

VideoCore是专有的,没有官方文档和开发工具。因此,除非您要付出很多努力,否则您将无法VCOS使用自己的代码进行重写。但是,我们需要对Video Core进行反向工程,您可以在此处找到一些信息。

另一个问题是,USBSynopsys 的堆栈是专有的,并且同样没有文档,而且似乎即使有了文档,也很难可靠地实现它。但是,代码仍然可用(Linux内核,u-boot,CSUD)。使用的高级图形功能Video Core可能也很难- 图形库有一些开源代码,但这仅是ARM侧面的。

话虽这么说,但有可能RISC OS从信息中获取端口(不过,如果他们仅使用可公开访问的信息,对我来说还不是很清楚),有些人(独立于Broadcom)正在重写Linux内核作为主线,在那里是FreeBSD端口,“ U-boot”和其他端口。因此,绝对可以编写您自己的OS。这并不像可能的那么简单。

你的目标

1号

据我所知,除了描述的方式,SoC不可能以其他方式启动。因此,第一阶段的引导程序必须打开SD card。它必须是GPU二进制文件,而不是ARM二进制文件,这是另一个问题。而且RaspberryPi中没有板载闪存,这也是一个问题。

2号

主要问题是flashRaspberryPi上没有板载。您可以添加一个,并且可以在引导加载程序中将其激活(必须已经是第二阶段的引导加载程序)。但是,编写USB驱动程序可能会出现问题。

3 4 5

这应该不是什么大问题。此处ARM记录大多数外围设备(至少是可访问的外围设备)。由于您已完全配置SoC,因此现有的引导加载程序使此操作变得更加容易。您可以在此处此处查看一些代码和文档。

备择方案

我不了解RaspberryPi的其他任何主板,因此很难推荐一些东西,但是您可以看看一些成熟的项目,例如基于OMAP的Beagleboard / Beaglebone / Pandaboard,或者可以跟随一些新板的开发,例如基于Allwinner的CubieboardPCduino。这完全取决于您要完成什么。


3
我想这个答案+100。做得好。
orithena

@maligree大声笑,别担心-已经完成了!:)
xxmbabanexx

1
+1 Beablebone,因为它是100%开源和你有能力“再旋转”的硬件,使自己的电路板
portforwardpodcast

5

为了更新Krzysztof的好答案,Broadcom最终公开发布了一些许可为3-Clause BSD的代码,以帮助制作开源GPU驱动程序。取代Raspberry Pi VPU固件blob的“ rpi-open-firmware”工作始于2016年:https//github.com/christinaa/rpi-open-firmware。在https://news.ycombinator.com/item?id=11703842中查看更多信息

RaspberryPi-Debian Wiki简要描述并链接了许多替代板,包括ODROID-C1,Cubieboard,Banana Pi,Olimex的OLinuxIno Wifi和OlinuxIno Mini,EOMA68和Beaglebone black。


就我个人而言,我认为替代方案并不是很好,许多ODROID板都在引导加载程序上执行签名检查,并阻止您在其上运行自己的代码。TI OMAP3系列在调用代码之前存在安全模式,这也限制了您可以执行的操作。RPi上的VPU实际上非常不错,我认为这是它使它在其他主板上领先的原因,并且现在我们有了一个不错的工具链,一切看起来都不错。
克里斯蒂娜·布鲁克斯

1

实际上,使用Raspberry Pi的U-boot引导加载程序可以做很多事情。基本上,您只需让GPU将U引导映像作为“ OS”加载您的ARM协处理器SoC。

作为示例,我发现本文很有帮助。我还没有做,但是我打算。我在寻找一种自己解决的方法时碰巧发现了您的问题,然后我找到了这篇文章,它看起来可能对寻求类似帮助的其他人很有用。

还有另一篇文章,其中包含有关构建U-boot映像的更多详细说明。


1
这种答案一开始可能很有用,但是几年后链接停止工作,并且没有任何暗示其内容的提示。考虑至少告诉您使用了哪个U-boot分支和哪个编译器。
德米特里·格里戈里耶夫

谢谢德米特里。我会很快回到这个问题上,并在有时间的时候进行修复。
艾伦·米姆斯
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.