相关疑难解决方法(0)

x86组件上的保护模式键盘访问

我正在为键盘输入工作,我正在开发一个非常基本的内核,而且我完全卡住了.我似乎无法在网上找到任何可以向我显示我需要知道的信息.

我的内核现在正在保护模式下运行,所以我无法使用实模式键盘例程而不会跳转到实模式和后退,这是我试图避免的.我希望能够从保护模式访问我的键盘.有谁知道如何做到这一点?到目前为止我唯一发现的是它涉及使用输入/输出端口直接与控制器通信,但除此之外我感到难过.当然,这不是经常出现的事情.通常,Assembly教程假设您正在运行下面的操作系统.

我是x86程序集的新手,所以我只是在寻找一些好的资源来处理来自保护模式的标准硬件.我正在用NASM编译汇编源代码并将其链接到用DJGPP编译的C源代码.有什么建议?

keyboard x86 kernel protected-mode osdev

15
推荐指数
1
解决办法
6623
查看次数

x86内核中的键盘IRQ

我正在尝试编写一个非常简单的内核用于学习目的.在阅读了大量有关x86架构中PIC和IRQ的文章后,我发现这IRQ1是键盘处理程序.我正在使用以下代码打印正在按下的键:

#include "port_io.h"

#define IDT_SIZE 256
#define PIC_1_CTRL 0x20
#define PIC_2_CTRL 0xA0
#define PIC_1_DATA 0x21
#define PIC_2_DATA 0xA1

void keyboard_handler();
void load_idt(void*);

struct idt_entry
{
    unsigned short int offset_lowerbits;
    unsigned short int selector;
    unsigned char zero;
    unsigned char flags;
    unsigned short int offset_higherbits;
};

struct idt_pointer
{
    unsigned short limit;
    unsigned int base;
};

struct idt_entry idt_table[IDT_SIZE];
struct idt_pointer idt_ptr;

void load_idt_entry(char isr_number, unsigned long base, short int selector, char flags)
{
    idt_table[isr_number].offset_lowerbits = base & 0xFFFF;
    idt_table[isr_number].offset_higherbits …
Run Code Online (Sandbox Code Playgroud)

c x86 kernel irq osdev

6
推荐指数
1
解决办法
1841
查看次数

标签 统计

kernel ×2

osdev ×2

x86 ×2

c ×1

irq ×1

keyboard ×1

protected-mode ×1