Raspberry Pi上的Embox RTOS

图片你好!

我们经常被问到Embox是否支持Raspberry Pi。就在这里。如何现在运行的描述在这里在本文中,我想多谈一点。

我们已经购买了很长时间的Raspberry Pi Model B rev 2.0板(这是第一个Rpi 1),甚至在移植方面迈出了第一步:UART,中断控制器,计时器甚至帧缓冲都以某种形式实现。但是有关如何启动的数据丢失了,因此我不得不再次记住/理解它。

首先,它们在QEMU仿真器上启动。常规QEMU具有raspi2机器支持,但没有raspi。但是,当有移植过程时,仅添加了raspi支持。我们仍在版本库中保留该版本,尽管我们不得不起草承诺以将其编译为现代环境,但最终我们获得了具有rpi1支持的QEMU仿真器版本-“ -M raspi”机器(您可以在Wiki上看到如何运行它)结果,Embox在那里启动,并在视频存储器中绘制了一个渐变。

有一个关于开始铁的问题。一开始不清楚如何启动,所以我们决定尝试标准的Raspbian。2020-02-13-raspbian-buster-lite.img 从官方网站下载。所有下载均来自microSD卡,因此我们准备好-复制生成的图像
dd bs=4M if=2020-02-13-raspbian-buster-lite.img of=/dev/sdb conv=fsync
其中“ / dev / sdb”是SD卡。

如果您现在查看lsblk,将出现以下内容:


sdb      8:16   1  14,6G  0 disk 
├─sdb1   8:17   1   256M  0 part 
└─sdb2   8:18   1  14,3G  0 part

让我们挂载sdb1,看看那里是什么:


$ sudo mount /dev/sdb1 /mnt
$ ls /mnt/
bcm2708-rpi-b.dtb       bcm2710-rpi-3-b.dtb       COPYING.linux  fixup_db.dat      start_db.elf
bcm2708-rpi-b-plus.dtb  bcm2710-rpi-3-b-plus.dtb  fixup4cd.dat   fixup_x.dat       start.elf
bcm2708-rpi-cm.dtb      bcm2710-rpi-cm3.dtb       fixup4.dat     issue.txt         start_x.elf
bcm2708-rpi-zero.dtb    bcm2711-rpi-4-b.dtb       fixup4db.dat   kernel.img
bcm2708-rpi-zero-w.dtb  bootcode.bin              fixup4x.dat    LICENCE.broadcom
bcm2709-rpi-2-b.dtb     cmdline.txt               fixup_cd.dat   overlays
bcm2710-rpi-2-b.dtb     config.txt                fixup.dat      start_cd.elf

如您所见,在所有情况下都有一整套* .dtb-适用于不同版本的Raspberry。我们还看到了引导加载程序-bootcode.bin,kernel.img是Linux。

我们通过HDMI将显示器连接到板上,启动后,看到Raspbian,一切都很好。接下来,我们需要将带有Embox的二进制文件复制到kernel.img,以便引导加载程序加载它。
建立Embox:


make confload-arm/rpi1-model-b
make

复制生成的二进制文件:


cp build/base/bin/embox.bin /mnt/kernel.img

我们将SD卡重新插入Rpi并打开电源-在显示器上,没有出现应由Embox绘制的正方形。好吧,让我们尝试通过串行端口连接并调试我们的二进制文件。为此,请使用RDC1-USB-UART适配器。我们将其连接到板上,如下所示:


RDC1      Rapi

GND <---> GND
5V  <---> 5V
RX  <---> TXD0/GPIO14
TX  <---> RXD0/GPIO15

在这里您可以看到图片中的引脚排列,因此可以原谅。现在事实证明,USB适配器的电源来自PC的USB集线器,而Rpi的电源又由USB适配器提供。



打开。通过minicom连接:


sudo minicom -d /dev/ttyUSB0

没有结论可见。串行端口驱动程序一定存在某种问题。我们尝试禁用寄存器初始化,并使用引导加载程序配置的内容,在SD卡上填写新映像-输出已出现。一切都清楚了,这意味着已正确连接,但串行端口驱动程序未正确编程。我不会谈论我们如何修复PL011串行端口驱动程序,但是我会指出在开发该平台时可能有用的几点。首先,Rpi的基地址以某种方式令人困惑,无法在文档中立即找到,因此检查寄存器基地址的一种好方法是在Linux中查看它们:


pi@raspberrypi:~$ ls /sys/bus/amba/devices/20201000.serial

我们看到地址是0x20201000。

第二点是,有Linux的修改的Rpi,其可以被组装并复制到kernel.img - www.raspberrypi.org/documentation/linux/kernel/building.md

在串行端口的情况下,它确实帮助理解输入频率UARTCLK,是编程波特率所必需的-只需在驱动程序/tty/serial/amba-pl011.c中的正确位置插入printk()。

结果,在没有任何重大变化的情况下,我们设法在铁上启动了与QEMU相同的图像。

大概就是这样,因为分解驱动程序源没有意义,因为您可以在我们的资源库中研究它们。通常,在Raspberry下,其他非Linux OS的端口很少。例如,我没有找到任何FreeRTOS(事实证明某种存储库在GitHub上,但没有在官方发行版中),NuttX或类似的东西都没有。是的,论坛上的讨论表明,在那里不需要RTOS并让它更好地玩Arduino-www.raspberrypi.org/forums/viewtopic.php?t=201540 Osdev

示例原来是无效的,所以如果有人想要一些东西,然后在裸机上进行处理,然后从我们这里获取更好的示例:)

我们仍然计划完全支持新的Rpi 2/3/4。但是,某些支持很可能会作为GSoC 2020的一部分提供,这是学生中最受欢迎的想法之一。实际上,对于GSoC,我们在Embox中恢复了对Rpi1的支持。如果有人对为什么需要Rpi RTOS有任何想法,请在评论中写下,我们将很高兴:)

另外,如果您研究RaPi或Embox的来源我们将很乐意回答以下问题:
新闻稿:embox-ru@googlegroups.com
电报聊天:t.me/embox_chat

All Articles