你好!我们经常被问到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