مرحبا!غالبًا ما يتم سؤالنا عما إذا كان 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