GeekOS操作系统 Project0

GeekOS操作系统 Project0一、构建基于Ubuntu9.04的实验环境对于前期构建ubuntu9.04的实验环境可以参考教程:GeekOS: 一、构建基于Ubuntu9.04的实验环境Ubuntu9.04(含用户名和密码)百度网盘链接:https://pan.baidu.com/s/1xopH6etKoOo11qyccDX36w提取码:spck在已经安装好VMware的基础上解压Ubuntu9.04压缩包之后双击下列红框然后点击开启此虚拟机即可运行因为该Ubuntu里已经含有ge
摘要由CSDN通过智能技术生成

GeekOS操作系统 Project0

一、构建基于Ubuntu9.04的实验环境

对于前期构建ubuntu9.04的实验环境可以参考教程:GeekOS: 一、构建基于Ubuntu9.04的实验环境

Ubuntu9.04(含用户名和密码)百度网盘链接:https://pan.baidu.com/s/1xopH6etKoOo11qyccDX36w
提取码:spck

在已经安装好VMware的基础上解压Ubuntu9.04压缩包之后双击下列红框
在这里插入图片描述

然后点击开启此虚拟机即可运行
在这里插入图片描述
因为该Ubuntu里已经含有geekos0.3.0安装包然后进入主文件夹,找到geekos压缩包,点击右键解压geekOS0.3.0文件,然后参考上诉链接的教程搭好环境后就可以开始实验了。

二、Project0的设计与实现

项目设计要求

  1. 搭建GeekOS的编译和调试平台,掌握GeekOS的内核进程工作原理。
  2. 熟悉键盘操作函数,变成实现一个内核进程。该进程的功能是:接受键盘的输入字符并显示到屏幕上,当输入Ctrl+D时,结束进程的运行。

项目详细设计

因为项目要从键盘输入,所以需要一个键盘初始化函数Init_Keyboard,该函数存在于文件路径为/geekos0.3.0/src/project0/src/geekos的Keyboard.c文件中,其主要功能是设置初始状态下存放键盘扫描码的缓冲区,并为键盘中断设置处理函数。

void Init_Keyboard(void)
{
   
    ushort_t irqMask;

    Print("Initializing keyboard...\n");//初始化键盘

    /* Start out with no shift keys enabled. */
    s_shiftState = 0;

    /* Buffer is initially empty. */
    s_queueHead = s_queueTail = 0;//初始化缓冲队列为空

    /* Install interrupt handler 为键盘中断安装一个处理程序*/
    Install_IRQ(KB_IRQ, Keyboard_Interrupt_Handler);
    // Keyboard_Interrupt_Handler(struct Interrupt_State* state)为一个键盘中断处理函数

    /* Enable IRQ1 (keyboard) */
    irqMask = Get_IRQ_Mask();//从16条中断线中获取当前中断线
    irqMask &= ~(1 << KB_IRQ);
    Set_IRQ_Mask(irqMask);
}

 
 
在/geekos0.3.0/src/project0/src/geekos路径的Keyboard.c文件中的Keyboard_Interrupt_Handler为一个键盘中断处理函数。键盘的中断处理过程是首先从相应的I/O端口读取键盘扫描码,根据是否按下shift键,分别在键值表中寻找扫描码对应的按键值,经过处理后将按键值放入缓冲区,最后通知系统重新调度进程。

static void Keyboard_Interrupt_Handler(struct Interrupt_State* state)
{
   
    uchar_t status, scanCode;
    unsigned flag = 0;
    bool release = false, shift;
    Keycode keycode
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值