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
本文地址:https://blog.csdn.net/qq_43543920/article/details/107369421
上一篇: 电阻的作用和工作原理详解
下一篇: 高压电路微气象在线监测系统