You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义OS中PS/2键盘驱动无法切换至Scancode Set 2问题

自定义操作系统PS/2键盘驱动问题

我正在开发一款自定义操作系统,遇到PS/2键盘驱动问题:尽管尝试将键盘设置为Scancode Set 2,它仍持续发送Scancode Set 1编码。

设置扫描码集的函数

static void set_default_scancode_set(void) {
    uint8_t resp;
    int i = 0;

    do {
        if (i++ == MAX_RETRY_COUNT) {
            stop();
        }
        outb(PS2_KEYBOARD_DATA, COMMAND_SET_SCANCODE_SET);
        io_wait();
        resp = inb(PS2_KEYBOARD_DATA);
    } while (resp == RESP_RESEND);

    if (resp != RESP_ACK) {
        stop();
    }

    i = 0;
    do {
        if (i++ == MAX_RETRY_COUNT) {
            stop();
        }
        outb(PS2_KEYBOARD_DATA, DEFAULT_SCANCODE_SET);
        io_wait();
        resp = inb(PS2_KEYBOARD_DATA);
    } while (resp == RESP_RESEND);
    if (resp != RESP_ACK) {
        stop();
    }
}

键盘初始化函数

void init_keyboard(void) {
    set_default_scancode_set();
    enable_scanning();
    install_irq_driver(1, ps2_keyboard_callback);
}

补充信息

  • DEFAULT_SCANCODE_SET定义为2。
  • 使用的其他常量(COMMAND_SET_SCANCODE_SET、PS2_KEYBOARD_DATA等)定义正确。
  • 键盘仍持续发送Scancode Set 1编码。

问题解决

该问题已通过设置PS/2控制器命令字节(禁用扫描码转换功能)解决。

内容的提问来源于stack exchange,提问作者Viliam Holly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:42:07