Embox RTOS على Raspberry Pi

صورةمرحبا!

غالبًا ما يتم سؤالنا عما إذا كان Embox يدعم Raspberry Pi. نعم هنالك. وصف كيفية التشغيل الآن هنا . في هذه المقالة أريد أن أتحدث أكثر عن هذا.

لقد اشترينا لوحة Raspberry Pi Model B rev 2.0 لفترة طويلة (هذه هي أول Rpi 1) وحتى اتخذنا الخطوات الأولى في النقل: تم تنفيذ UART ، وجهاز التحكم في المقاطعة ، والمؤقت ، وحتى Framebuffer في شكل ما. ولكن تم فقدان البيانات حول كيفية تشغيلها ، لذلك كان علي تذكرها / فهمها مرة أخرى.

أولاً ، أطلقوا على محاكي QEMU. يحتوي QEMU العادي على دعم آلة raspi2 ، ولكن لا يوجد raspi. ولكن عندما كانت هناك عملية نقل ، تمت إضافة دعم raspi فقط. لا يزال لدينا الإصدار في مستودعنا ، على الرغم من أننا اضطررنا إلى صياغة تعهدات لتجميعه في البيئة الحديثة ، ولكن في النهاية حصلنا على نسخة من محاكي QEMU الذي يحتوي على دعم rpi1 - آلة "-M raspi" (يمكنك معرفة كيفية تشغيله على ويكي لدينا) ونتيجة لذلك ، تم إطلاق 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 لجميع المناسبات - لإصدارات مختلفة من التوت. نرى أيضًا bootloader - 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

هنا يمكنك رؤية pinout في الصورة بحيث يتم مسامحتها. الآن اتضح أن الطاقة لمحول USB تأتي من لوحة وصل USB للكمبيوتر ، والطاقة إلى Rpi ، بدورها ، يتم توفيرها من محول USB.



شغله. تواصل عبر minicom:


sudo minicom -d /dev/ttyUSB0

لا يوجد استنتاج مرئي. يجب أن يكون هناك نوع من المشاكل مع برنامج تشغيل المنفذ التسلسلي. نحاول تعطيل تهيئة التسجيل ، واستخدام ما تم تكوينه بواسطة أداة تحميل التشغيل ، قم بملء صورة جديدة على بطاقة SD - لقد ظهر الإخراج. كل شيء واضح ، هذا يعني أنه تم توصيله بشكل صحيح ، ولكن برنامج تشغيل المنفذ التسلسلي غير قابل للبرمجة بشكل صحيح. لن أتحدث عن كيفية إصلاح برنامج تشغيل المنفذ التسلسلي PL011 ، ولكن سألاحظ بضع نقاط قد تكون مفيدة عند التطوير لهذا النظام الأساسي. أولاً ، يتم احتساب العناوين الأساسية على Rpi محيرة إلى حد ما ، ولا يمكن العثور عليها على الفور في الوثائق ، لذا فإن الطريقة الجيدة للتحقق من العنوان الأساسي للسجلات هي النظر إليها في Linux:


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

نرى أن العنوان هو 0x20201000.

والنقطة الثانية هي أن هناك لينكس معدلة لمؤشر أسعار التجزئة، والتي يمكن تجميعها ونسخها إلى kernel.img - www.raspberrypi.org/documentation/linux/kernel/building.md

في حالة المنفذ التسلسلي، ساعدت حقا لفهم تردد الإدخال UARTCLK ، ضروري لبرمجة معدل الباود - فقط أدخل printk () في المكان الصحيح في برامج التشغيل / tty / serial / amba-pl011.c.

ونتيجة لذلك ، وبدون أي تغييرات كبيرة ، تمكنا من إطلاق نفس الصورة التي ظهرت لـ QEMU على الحديد.

ربما هذا كل شيء ، لأنه لا معنى لتفكيك شفرة مصدر السائق ، لأنه يمكنك ببساطة دراستها في مستودعنا. بشكل عام ، يبدو أنه تحت Raspberry هناك عدد قليل جدًا من المنافذ لنظام تشغيل آخر غير Linux. على سبيل المثال ، لم أجد إما FreeRTOS (اتضح أن نوعًا من المستودع موجود على GitHub ، ولكن ليس في الإصدارات الرسمية) ، لا لـ NuttX ، أو أي شيء من هذا القبيل. نعم ، وتشير المناقشات في المنتديات إلى أنه من المفترض أنه ليس هناك حاجة إلى RTOS هناك وتأخذ مكانًا أفضل للعب Arduino - www.raspberrypi.org/forums/viewtopic.php؟t=201540

تبين أن مثال Osdev غير صالح للعمل ، لذلك إذا أراد شخص ما شيئًا- ثم قم بذلك على المعدن ، ثم شاهد أمثلة أفضل منا :)

الدعم الكامل لـ Rpi 2/3/4 الجديد لا يزال في خططنا. ولكن من المرجح أن يتم تقديم بعض الدعم كجزء من GSoC 2020 ، وهي واحدة من أكثر الأفكار شيوعًا بين الطلاب. في الواقع ، بالنسبة لـ GSoC ، استعدنا دعم Rpi1 في Embox. إذا كان لدى شخص أفكار حول سبب حاجته إلى Rpi RTOS ، فاكتب في التعليقات ، وسنكون سعداء :)

بالإضافة إلى ذلك ، إذا درست مصادر RaPi أو مجرد Embox ، فسوف يسعدنا الإجابة على الأسئلة:
النشرة الإخبارية: embox-ru@googlegroups.com
دردشة برقية: t.me/embox_chat

All Articles