GeekOS||project0实现及问题解决

项目0的要求和意义

Geekos是一个基于X86架构的PC上运行的微操作系统内核,主要用于操作系统课程设计,目的是使我们能够实际参与到一个操作系统的开发工作中。本文主要记录实现项目0的笔记。
项目0要求实现一个内核进程,功能是实现从键盘接收一个按键,并在屏幕上显示。主要是让我们熟悉GeekOS的编译、运行过程,了解计算机系统的启动原理。
Geekos下的各级目录(文件)一览:
在这里插入图片描述

实现过程

1 . 准备:环境搭建
1)在虚拟机下安装Ubuntu版本的Linux操作系统
2)在…/project0/build目录下生成系统镜像文件

make depend
make

3)在该目录下修改文件:bochsrc
vi bochsrc

//修改完后bochsrc文件内容如下
config_interface: textconfig
romimage: file=/usr/share/bochs/BIOS-bochs-latest
megs: 8
vgaromimage: file=/usr/share/vgabios/vgabios.bin
floppya: 1_44=./fd.img, status=inserted
boot: a
ips: 1000000
log:./bochs.out
vga_update_interval: 300000
keyboard_serial_delay: 250
keyboard_paste_delay: 100000
private_colormap: enabled=0

4)在该目录下,执行GeekOS内核

bochs

运行后,屏幕上会有一些提示。运行GeekOS选择Begin simulation,如果GeekOS 编译成功,并且bochs的配置也没问题,将会看到一个模拟VGA的文本窗口,Geekos就能运行程序输出相应信息。
在这里插入图片描述
至此GeekOS系统编译和仿真完成,可以开始一系列的项目。
5)需要搭建好环境的操作系统的可以在评论区留下邮箱哈

2 . 修改main.c文件
1)进入对应目录: …/project0/src/geekos找到main.c文件

cd geekos-0.3.0/src/project0/src/geekos
vi main.c

2)注释掉TODU语句
TODU语句的作用是打印后面的字符串(该字符串为对应错误提示内容)并进入死循环,即终止执行,而我们要继续执行则必须注释该语句。
在这里插入图片描述
3)编写函数,实现接收并且回显按键(该函数明显是写在Main函数外部的)
代码如下:

void project0(){
	Print("Exit hit Ctrl +D.\n");   	//提示语句
	Keycode keycode;
	while(1){
		if(Read_Key(&keycode)) {		//读取键盘按键状态
			if(!((keycode & KEY_SPECIAL_FLAG) || (keycode & KEY_RELEASE_FLAG))) {
				int asciiCode = keycode & 0xff;
				if((keycode & KEY_CTRL_FLAG)==KEY_CTRL_FLAG && asciiCode=='d') 	{//按下CTRL +D后退出
					Print("\n---------SEE YOU!--------\n");
					Exit(1);
				}
				else {//不是CTRL +D则输出字符				
				Print("%c",(asciiCode=='\r') ? '\n' :keycode);
			    }
		    }
	    }
    }
}

在这里插入图片描述
4)在Main函数中创建内核模式的线程
代码如下:

struct Kernel_Thread *thread = Start_Kernel_Thread(&project0, 0 , PRIORITY_NORMAL, false);

在这里插入图片描述

报错及解决

至此,进入测试环节。回到…/project0/build目录下进行测试。
启动bochs:

bochs -f bochsrc

运行发现报错了,如图
在这里插入图片描述
运行中止,提示未实现功能…
猜测是不是环境搭建问题,便尝试重新搭建环境。输入命令 “make depend”,发现报错了提示“/bin/sh: cannot create depend.mak: Permission denied”,如下图
在这里插入图片描述
此时才意识到报错原因是不能在对应目录下创建/修改文件。
解决办法:添加权限,让其变成可执行文件
考虑到后面的其他项目也可能涉及创建/修改文件,故我选择直接给project0目录的根目录添加权限,让目录geekos-0.3.0及其子目录(子文件)可以拥有所有权限。命令如下:

sudo chmod -R 777 geekos-0.3.0

用“ls”命令查看该文件下的目录,会发现均变成绿色,则添加权限成功,如图
在这里插入图片描述

测试

在…/build目录下输入如下命令

make depend
make
bochs -f bochsrc

在这里插入图片描述

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值