سؤال

أنا أعمل على لوحة المفاتيح المدخلات الأساسية جدا نواة أنني النامية و أنا عالقة تماما.أنا لا يمكن أن يبدو للعثور على أي من المعلومات على الانترنت التي يمكن أن تظهر لي معلومات كنت بحاجة إلى معرفة.

بلدي النواة يعمل في الوضع المحمي الآن, لذلك أنا لا يمكن استخدام الوضع الحقيقي لوحة المفاتيح الروتينية دون القفز إلى الوضع الحقيقي والعودة التي أحاول تجنبها.كنت تريد أن تكون قادرة على الوصول إلى لوحة المفاتيح من الوضع المحمي.لا أحد يعرف كيفية القيام بذلك ؟ الشيء الوحيد لقد وجدت حتى الآن هو أنه يتضمن الحديث إلى وحدة تحكم مباشرة باستخدام في/خارج الموانئ ، ولكن بعد ذلك أنا الحيرة.هذا بالطبع هو لا شيء الذي يأتي في كثير من الأحيان.عادة الجمعية الدروس تفترض كنت تقوم بتشغيل نظام التشغيل تحتها.

أنا جديدة جدا إلى x86 الجمعية ، لذلك أنا فقط أبحث عن بعض موارد جيدة للعمل مع الأجهزة القياسية من الوضع المحمي.أنا أجمع الجمعية شفرة المصدر مع NASM وربطه إلى التعليمات البرمجية المصدر C جمعت مع DJGPP.أي اقتراحات ؟

هل كانت مفيدة؟

المحلول

MIT الدرجة أنظمة التشغيل لديها الكثير من إشارات جيدة. على وجه الخصوص، تحقق من الموارد آدم Chapweske في على لوحة المفاتيح والماوس البرمجة.

في القصير، نعم، سوف تستخدم الخام في / خارج الموانئ، وهو ما يتطلب إما يعمل في وضع النواة، أو وجود / O بت إذن I (IOPL) المنصوص عليها في EFLAGS تسجيل. انظر هذه الصفحة للحصول على مزيد من التفاصيل حول أذونات I / O .

نصائح أخرى

وأنت تعمل مع الأجهزة إرث القياسية بنفس الطريقة على وسائط الحقيقية وحمايتها. في هذه الحالة، وتريد أن تتحدث مع 8042 في / O الموانئ 0x60 I إلى 0x6f، والتي بدورها سوف نتحدث إلى وحدة تحكم في لوحة المفاتيح في الطرف الآخر من السلك.

وجدت جوجل للبحث سريع لي موردا للاهتمام في HTTP: // heim.ifi.uio.no/~stanisls/helppc/8042.html (ول8042) و <لأ href = "http://heim.ifi.uio.no/~stanisls/helppc/keyboard_commands. أتش تي أم أل "يختلط =" نوفولو noreferrer "> http://heim.ifi.uio.no/~stanisls/helppc/keyboard_commands.html (لوحة المفاتيح).

في حالة لا تستخدم لذلك، يمكنك التحدث مع المكونات في I / O الموانئ عبر IN (اقرأ) وOUT (الكتابة) أكواد العمليات، التي تتلقى عدد I / O ميناء (قيمة 16 بت) و القيمة التي سيتم قراءة أو كتابة (إما 8 أو 16 أو 32 بت). لاحظ أن حجم للقراءة أو الكتابة مهم! كتابة 16 بت إلى شيء مما تتوقع 8 بت (أو العكس بالعكس) هو وصفة لكارثة. التعود على هذه أكواد العمليات، وبما انك سوف تستخدم الكثير منهم (هذه هي الطريقة الوحيدة للتحدث مع بعض الأجهزة الطرفية، بما في ذلك العديد منها الأساسية؛ ملحقات أخرى تستخدم الذاكرة المعنونة I / O (MMIO) أو DMA-اتقان الحافلات).

على 8042 PS/2 تحكم يبدو أبسط الاحتمال.

على oszur11 OS تعليمي يحتوي على سبيل المثال العمل تحت https://sourceforge.net/p/oszur11/code/ci/master/tree/Chapter_06_Shell/04_Makepp/arch/i386/arch/devices/i8042.c

فقط:

sudo apt-get install build-essential qemu
sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
git clone git://git.code.sf.net/p/oszur11/code oszur11
cd oszur11/Chapter_06_Shell/04_Makepp
make qemu

اختبار على أوبونتو 14.04 AMD64.

بلدي جيثب مرآة (المنبع غير نشط): https://github.com/cirosantilli/oszur11-operating-system-examples

عدم استنساخ هنا لأن رمز طويلة جدا, سيتم تحديث إذا تمكنت من عزل لوحة المفاتيح في الحد الأدنى على سبيل المثال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top