我从事嵌入式系统(主要是微控制器)的工作已有3年左右。我想知道实际开源的RPi多少?我知道arduino向我们提供了硬件/软件等的完整详细信息。但是RPi呢?这很重要,因为我的团队并且我想对树莓派进行以下操作[此项目打算像使用arduino => no OS一样使用RPi:引导程序(ROM)可以从闪存而不是外部SD卡进行引导。它必须接受二进制代码(它将从我的PC中获得)并将其保存在闪存中。稍后再开始执行它。 )。
如果可能的话,为嵌入式系统安装我们自己的操作系统。

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

#1 楼

背景知识
您应该知道的最重要的事情是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进行反向工程,您可以在此处找到一些信息。
另一个问题是Synopsys的USB堆栈是专有的,并且同样没有文档,而且似乎即使有了文档,也很难可靠地实现它。但是,代码仍然可用(Linux内核,u-boot,CSUD)。使用Video Core的高级图形功能可能也很困难-图形库有一些开源代码,但仅用于ARM端。 (不过,对于我来说,这还不是很清楚,如果他们仅使用可公开访问的信息),一些人(独立于Broadcom)正在重写Linux内核作为主线,还有一个RISC OS端口,“ U-boot”和其他端口。因此,绝对可以编写您自己的OS。
您的目标
数字1
据我所知,SoC不可能以所描述的另一种方式启动。因此,第一阶段引导程序必须位于FreeBSD上。而且它必须是SD card二进制文件,而不是GPU二进制文件,这是另一个问题。而且RaspberryPi上没有板载闪存,这也是一个问题。
数字2
主要问题是RaspberryPi上没有板载ARM。您可以添加一个,并且可以在您的引导加载程序中将其激活(它必须已经是第二阶段的引导加载程序)。但是,编写USB驱动程序可能会出现问题。
数字3、4、5
这不是什么大问题。此处记录了大多数外围设备(至少是flash可以访问的外围设备)。由于您已完全配置SoC,因此现有的引导加载程序使此操作变得更加容易。您可以在这里和这里查看一些代码和文档。
替代品
我不了解RaspberryPi的其他任何主板,因此很难推荐一些东西,但您可以看看一些成熟的项目,例如基于OMAP的Beagleboard / Beaglebone / Pandaboard,或者可以跟随一些新板的开发,例如基于Allwinner的Cubieboard或PCduino。这完全取决于您要完成什么。

评论


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

–orithena
13年4月21日在20:57



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

– xxmbabanexx
13年4月23日在2:30

为Beablebone +1,因为它是100%开放源代码,您确实可以“重新旋转”硬件并制作自己的电路板

–portforwardpodcast
2015年4月21日在4:09

#2 楼

为了更新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实际上非常不错,我认为这是它使它在其他主板上领先的原因,并且现在我们有了一个不错的工具链,一切看起来都不错。

–克里斯蒂娜·布鲁克斯(Kristina Brooks)
16年5月18日在10:19



#3 楼

实际上,使用Raspberry Pi的U-boot引导加载程序可以做很多事情。您基本上只是让GPU将U引导映像作为“ OS”加载到ARM协处理器SoC。我还没有做,但是我打算。我在寻找一种自己解决的方法时碰巧发现了您的问题,然后我找到了该文章,它看起来可能对寻求类似方法的其他人有用。

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

评论


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

–德米特里·格里戈里耶夫(Dmitry Grigoryev)
18/12/12在13:43

谢谢德米特里。我会很快回到这个问题上,并在有空的时候进行修复。

–艾伦·米姆斯(Alan Mimms)
18/12/17在7:01