الخطة 9 في الصدأ
R9 هو إعادة تنفيذ نواة Plan9 في Rust. إنها ليست مستوحاة فقط من كود المصدر الأصلي للخطة 9، بل مشتقة منها بعدة طرق.
نحن نستخدم cargo
ونمط xtask
لبناء النواة.
لإنشاء r9 لـ x86_64، نفترض أنك قمت باستنساخ مستودع git في مكان مناسب. ثم قم ببساطة بالتغيير إلى دليل المستوى الأعلى و، cargo xtask build --arch x86-64
.
للإنشاء لـ aarch64، قم بتشغيل cargo xtask build --arch aarch64
(حاليًا يتم دعم Raspberry Pi 3 فقط).
هناك أوامر فرعية أخرى مفيدة xtask
؛ قم بتشغيل cargo xtask help
لمعرفة ما هو متاح.
في الوقت الحالي، r9 ليس استضافة ذاتية.
يتطلب cargo xtask dist
، الذي تعتمد عليه cargo xtask qemu
، نسخة llvm-objcopy
. من المتوقع أن يعيش هذا في مسار سلسلة أدوات الصدأ. يمكنك التثبيت عن طريق تشغيل:
rustup component add llvm-tools
إذا تلقيت رسائل No such file or directory (os error 2)
، فقم بتثبيت llvm
بشكل منفصل عن سلسلة أدوات الصدأ وقم بتعيين:
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
إذا No such file or directory (os error 2)
، فتحقق للتأكد من تثبيت qemu
أو qemu-kvm
وأن الملف الثنائي qemu-system-x86_64
موجود في المسار الخاص بك (أو qemu-system-aarch64
في حالة aarch64).
يمكن تشغيل R9 باستخدام qemu لمختلف البنى المدعومة:
قوس | منصة | سطر الأوامر |
---|---|---|
aarch64 | raspi3b | البضائع xtask qemu --arch aarch64 --verbose |
aarch64 | raspi4b | البضائع xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | Q35 | البضائع xtask qemu --arch x86-64 --verbose |
x86-64 (مع كفم) | Q35 | البضائع xtask qemu --arch x86-64 --kvm --verbose |
riscv | الفاضلة | البضائع xtask qemu --arch riscv64 --verbose |
تم تشغيل R9 على الأجهزة التالية بدرجة أكبر أو أقل:
بافتراض أنه يمكنك إعداد خادم TFTP (حظًا سعيدًا، إنه أمر صعب للغاية، ولكن مقابل ما يستحقه، يمكن أن يعمل dnsmasq من حين لآخر)، وبافتراض موقع دليل netboot الخاص بك، يمكنك إنشاء الملف الثنائي ونسخه باستخدام الأمر التالي:
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
يؤدي هذا إلى نسخ ملف ثنائي مضغوط، والذي يجب أن يكون أسرع بكثير في النسخ عبر الشبكة.
يقوم البرنامج الثابت Raspberry Pi بتحميل config.txt
قبل النواة. هنا يمكننا تعيين UART الذي سيتم استخدامه، من بين أشياء أخرى. سيتم إعداد المحتويات التالية لاستخدام miniuart:
enable_uart=1
core_freq_min=500