#NJU 2016 oslab1(1/3)
这是除了jos和nanos之外的第三个可选框架,主体为nanos,同时移植了jos一些容易理解的辅助工具。当然,我们更希望你能够不限于框架,用代码秀我们一脸。组合了多个框架,因此注释中英混搭,见谅。工程里包含了大家用得到但又与课程教学不太相关的内容,很多东西框架都帮你做好了,现在你有两个选择:要么花时间理解框架代码然后加以应用,要么脱离框架内容自己实现。因为框架帮你做好了挺多事情,所以框架目前看起来略臃肿(别去跟老师报怨框架难懂!!!有框架总比没有好对吧),有PA的基础其实上手已经不怎么困难了,请自行努力。
##这个框架有什么
框架里提供了各个阶段你需要码的代码的范例,看完代码相信你会对整个工程有初步的认识。我们提供框架的目的是为了避免大家一脸懵逼不知道要写什么,从哪里写。需要注意的一点是:你最好不要局限于这个框架的内容,这样你能学到更多。我们非常希望你能够在框架的启发下自行设计,既然提供了框架,你当然也可以安逸地用起来。我们提供了从引导初始化到设备、显示、中断的启发式代码段,你所有需要完成的工作都能够参考这个框架的某一个部分加以理解,哪个部分?~~我们不想再送了。~~有一点需要注意的是我们提供的解决方案不是唯一必须的,有可能框架的方案比实际需要会复杂很多,有些东西用不用全靠你选择,如果你觉得太复杂了,可以推倒自行完成。
###阶段
- boot需要你完成in out内联汇编
- 完成loader后运行你会看到蓝屏,其实框架提供的游戏就是蓝屏(╯‵□′)╯︵┻━┻
- 完成串口输出,通过调用串口输出函数你可以在控制台看到输出
- 为了方便调试,请尽快完成printk,这样你就能使用框架提供的assert等宏帮助你调试了,未完成时会通过hlt指令强行关闭
- VGA模式的显存映射框架已经简单完成(开机蓝屏),为了完成复杂的输出功能,你需要自行封装需要的函数
- 时钟中断和8259的初始化需要自行完成
- 框架提供了中断处理的框架,自行在理解的基础上添加键盘中断的处理
- 虽然游戏不是关键,但请至少弄个小游戏检验一下你的键盘和显示
###免责声明 已经尽量在需要填充代码的地方加上了hlt指令,可能会有遗漏。如果有的话请相互转告。 也许框架加了些你用不到的东西? clone下来后一定不要忘了把README删掉!
###bug修复 有些同学clone代码后boot/genboot.pl权限发生了改变,为此稍微修改了一下Makefile,使得脚本能够在没有x权限的情况下运行。 你也可以自行添加可执行权限
##代码框架:
.
├── boot#引导代码
│ ├── asm.h
│ ├── boot.h
│ ├── genboot.pl
│ ├── main.c
│ └── start.S
├── include#有很多有用的宏
│ ├── assert.h
│ ├── kbdreg.h
│ ├── keyboard.h
│ ├── mmu.h
│ ├── stdarg.h
│ ├── stdio.h
│ ├── string.h
│ ├── timer.h
│ ├── types.h
│ ├── video.h
│ └── x86.h
├── kernel#内核(游戏)
│ ├── assert.c
│ ├── device#设备的代码
│ │ ├── serial.c
│ │ ├── timer.c
│ │ └── video.c
│ ├── game#游戏
│ │ └── game.c
│ ├── irq#中断
│ │ ├── do_irq.S
│ │ ├── i8259.c
│ │ ├── idt.c
│ │ └── irq_handle.c
│ ├── kernel.ld
│ └── printk.c
├── lib#有用的库
│ ├── printfmt.c
│ └── string.c
├── Makefile
├── mbr.rb#ruby脚本,你可以修改makefile试试看
├── README.md
└── tags
7 directories, 33 files
框架参考:jos by MIT, nanos by JYY, some code by Wonicon and shinezyy.
by coolshan008