⌨️ input_vault
نظرة عامة
حاوية Input_Vault هي الطبقة المسؤولة عن التعامل المباشر مع أجهزة الإدخال (لوحة المفاتيح والماوس) عبر متحكم PS/2 (i8042). هي من الحاويات القليلة التي تملك صلاحيات التعامل المباشر مع العتاد الفيزيائي في بنية seL4-Vault.
مبدأ العمل المعماري:
- الوصول للعتاد (I/O Ports): تمتلك وصولاً حصرياً إلى منافذ PS/2 (المنفذ
0x60للبيانات و0x64للحالة/الأوامر) عبرSLOT_IOPORT. - المقاطعات (Hardware IRQs): مسجلة كمستمع لمقاطعات العتاد:
- IRQ 1 = لوحة المفاتيح (يُربط بـ
SLOT_KBD_IRQ) - IRQ 12 = الماوس (يُربط بـ
SLOT_MOUSE_IRQ)
- IRQ 1 = لوحة المفاتيح (يُربط بـ
- المزامنة (Notification): تنتظر المقاطعات باستخدام
seL4_Waitعلى كائن إشعار (Notification Object) فيSLOT_NTFN. يُحدد الـ Badge أي الأجهزة أرسل المقاطعة. - المعالجة والإرسال: عند حدوث مقاطعة، تُقرأ البيانات مباشرة من المنافذ باستخدام تعليمات
inb/outb(مُغلّفة فيseL4_Call)، تُعالج بواسطةps2_driver، ثم تُرسل كحدث مُنسق إلى حاويةdesktopعبر IPC.
هذا التصميم الدقيق يعزل مشغلات العتاد (Drivers) في مساحة مستخدم (User-space) آمنة، مما يحمي Kernel النظام والواجهة الرسومية من أي أعطال في معالجة العتاد.
الملفات البرمجية
init/src/input_vault_setup.rs
المسار: containers/init/src/input_vault_setup.rs
src/main.rs
المسار: containers/input_vault/src/main.rs
libs/ps2-driver
المسارات: libs/ps2-driver/src/lib.rs | keyboard.rs | mouse.rs
