Skip to content
HARDWARE ABSTRACTION LAYER
Direct I/O Access (Ports 0x60/0x64)
⌨️

حاوية input

الجسر المباشر بين المستخدم وعتاد النظام (Hardware). تدير حاوية الإدخال منفذ PS/2 ومقاطعات لوحة المفاتيح والماوس داخل مساحة مستخدم (User-Space) معزولة بالكامل لحماية النظام من ثغرات تعريفات العتاد (Drivers).

IRQ1 & 12Hardware
📡AsyncseL4_Wait
🖱️PS/2Driver
💻

مخرجات الحاوية الحية

root@heroban:~/input_vault_tty
bash
[Input_Vault] Container started.
[Input_Vault] Initializing PS/2 Mouse...
[Input_Vault] PS/2 init done.
[Input_Vault] Entering IRQ event loop...
--------------------------------------------------------
> [INT] KBD
> Scancode received: 0x1E (a)
> [INT] MOUSE
> Packet: { x: +5, y: -2, L: 1 }
_

معالجة مقاطعات العتاد (Hardware IRQs)

توضيح لكيفية استجابة الحاوية لمقاطعات العتاد بطريقة غير متزامنة (Asynchronous) دون شغل المعالج.

🦀 Rustsrc/main.rs
// الحلقة الرئيسية في input_vault/src/main.rs
loop {
    let mut badge: usize = 0;
    
    // الانتظار حتى وصول مقاطعة من העتاد (بدون استهلاك المعالج)
    unsafe {
        sel4_sys::syscalls::seL4_Wait(SLOT_NTFN, &mut badge as *mut usize, ipc_buf)
    };

    // ── مقاطعة لوحة المفاتيح (IRQ 1) ──
    if badge & BADGE_KBD != 0 {
        while ps2.read_status() & 0x01 != 0 {
            let scancode = ps2.read_data();
            if let Some(ch) = kbd_state.process_scancode(scancode) {
                // ... تجهيز رسالة IPC وإرسالها לـ Desktop ...
                desktop_sender.send_nb(&msg);
            }
        }
        unsafe { seL4_IRQHandler_Ack(SLOT_KBD_IRQ); }
    }
    
    // ... [معالجة המאוס بنفس الطريقة] ...
}
📡

المقاطعات والرسائل الصادرة

هذه هي الإشعارات العتادية التي تستقبلها الحاوية ورسائل IPC التي ترسلها.

Hardware IRQ 1 (Keyboard)
يتم استلام المقاطعة عبر SLOT_KBD_IRQ. يتم قراءة الـ Scancode من المنفذ ومعالجته لإرساله لسطح المكتب.
Hardware IRQ 12 (Mouse)
يتم استلام المقاطعة عبر SLOT_MOUSE_IRQ. تتم قراءة الإحداثيات (X/Y) وحالة الأزرار وإرسالها لسطح المكتب.
IPC: KeyboardEvent
رسالة IPC تُرسل إلى حاوية Desktop تحتوي على الحرف (Character) وحالته (Pressed = 1).
IPC: MouseEvent
رسالة IPC تُرسل إلى حاوية Desktop تحتوي على إحداثيات الحركة (X_Mov, Y_Mov) وحالة الأزرار الثلاثة.
⚙️

الوظائف والمهام الأساسية

# 01

الوصول المباشر للعتاد (I/O Ports)

الحاوية الوحيدة (تقريباً) التي تمتلك وصولاً حصرياً إلى منافذ الإدخال المادية (0x60 و 0x64) الخاصة بمتحكم PS/2.

# 02
🛡️

عزل مشغلات العتاد (Driver Isolation)

تعمل الحاوية في مساحة مستخدم (User-Space) معزولة تماماً، مما يمنع أي ثغرات أو أعطال في معالجة العتاد من التأثير على نواة النظام.

# 03
📡

معالجة المقاطعات (Hardware IRQs)

تنتظر المقاطعات بشكل غير متزامن باستخدام كائن الإشعارات (Notification Object) عبر seL4_Wait، وترسل Acknowledgment فور انتهاء المعالجة.

# 04
⌨️

معالجة مدخلات المستخدم

تحويل نبضات لوحة المفاتيح (Scancodes) وحركات الماوس الخام إلى أحداث (Events) مهيكلة ومفهومة يتم توجيهها للواجهة الرسومية.

📁

توثيق الملفات البرمجية المصدريّة

بنية مجلد `src` في مسار `Hasn-Sel4/containers/input_vault/src` وتحليل كل ملف سطرًا بسطر بناءً على الكود المصدري الفعلي.

🦀

src/main.rs

Core Driver Logic
containers/input_vault/src/main.rs
142 سطر

الملف المركزي للحاوية. يحتوي على تعريف خانات CNode، تهيئة מتحكم PS/2، حلقة الأحداث (Event Loop) لانتظار الـ IRQs ومعالجة المدخلات وإرسالها لـ Desktop.

🔍 أهم العناصر
CNode SlotsIOPORT(1), NTFN(2), KBD_IRQ(3), MOUSE_IRQ(4), DESKTOP_EP(5)
Vault Heap256 KB مخصصة لـ talc-alloc
Wait LoopseL4_Wait(SLOT_NTFN, &badge)
🛠️

src/utils.rs

Utilities
containers/input_vault/src/utils.rs
26 سطر

دوال مساعدة لطباعة القيم السداسية (Hex) للمساعدة في التنقيح (Debugging)، ومعالج الأخطاء (Panic Handler).

🔍 أهم العناصر
print_hex_byteتعتمد على seL4_DebugPutChar
📚

المكتبات والاعتمادات (Cargo.toml)

الاعتمادات المذكورة في ملف `Cargo.toml` والمسؤولة عن تقديم الوظائف الأساسية.

# 01
مكتبتنا
⚙️

ps2-driver

libs/ps2-driver

مكتبة مخصصة (In-house) للتعامل المباشر مع متحكم PS/2، تتضمن فك تشفير الـ Scancodes ومعالجة حزم الماوس.

# 02
مكتبتنا
⚙️

ipc-sync

libs/ipc-sync

يُستخدم منها مُرسل الرسائل (Sender) لإرسال أحداث لوحة المفاتيح والماوس إلى حاوية Desktop.

# 03
مكتبتنا
⚙️

sel4-sys

libs/sel4-sys

تُستخدم للانتظار على الإشعارات (seL4_Wait) وتأكيد المقاطعات (seL4_IRQHandler_Ack).

# 04
ليست مكتبتنا
⚙️

talc

external/talc

مُخصص ذاكرة ديناميكية مرن.

# 05
ليست مكتبتنا
⚙️

spin

external/spin

مكتبة لأقفال Spinlocks الخفيفة بدون الاعتماد على نظام تشغيل أساسي.

جميع الحقوق محفوظة © 2026 Qtoom