-
Notifications
You must be signed in to change notification settings - Fork 9
wangrongwei/UNIX386
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
UNIX386
========
一个i386架构的简单内核
借鉴了《30天自制操作系统》、《一个orange操作系统的实现》和《linux内核设计的艺
术》相关代码,对其中思路重新调整,多处初始化流程细节不在按照经典的启动流程来,
采用简单和便于理解的方式对内核完善。
当前两个分支
------------
master:master分支可直接clone运行;
new分:支属于正在开发中的分支,存在较多的bug,不能运行;
编译环境
========
1. 编译环境:linux
2. 编译器:gcc
3. 汇编器:nasm
4. 链接器:ld
5. 仿真器:bochs
6. 其他工具:objcopy
1. 如果只用汇编语言编写 16 位程序,请使用 .code16 指令,并保证
只使用 16 位的指令和寄存器;如果要和 C 语言一起工作,请使用
.code16gcc 指令,并且在函数框架中使用 pushl,calll,retl,leavel
jmpl,使用 0x8(%ebp) 开始访问函数的参数;很显然,使用 C 语言和
汇编语言混编的程序可以在实模式下运行,但是不能在 286 之前的真实
CPU 上运行,因为 286 之前的 CPU 还没有 pushl、calll、retl、leavel
jmpl 等指令。
2. 使用 as 时,请指定 --32 选项,使用 gcc 时,请指定 -m32 选项,使
用 ld 时,请指定 -m elf_i386 选项。如果是反汇编 16 位代码,在使
用 objdump 时,请使用 -m i8086 选项。
说明
=====
最开始,打算按照《30天自制操作系统》一书再次慢慢研究操作系统的设计知识,最后由
于将开发环境换成ubuntu,使用gcc和nasm编译整个内核,开始此计划时,内核相关知识有
但是还缺少实验,再加上对gcc和nasm编译一个x86文件感觉不太可能,参考了其他简单内
核,最终确定可以修改原来的Makefile文件,使用gcc和nasm。
推荐:使用bochs慢慢单步调试,这些问题都能发现。
DeeppinkOS文件结构(按照创建先后列出)
-------------------------------------
.
├── boot
│ ├── boot.asm
│ └── e820.c
├── deeppink.img
├── doc
│ ├── arch.pptx
│ └── help.md
├── drivers
│ ├── block.c
│ ├── block.h
│ ├── floppy.c
│ ├── hd.c
│ ├── keyboard.c
│ ├── task.c
│ └── timer.c
├── fs
│ └── ext4.c
├── include
│ ├── boot.h
│ ├── buddy.h
│ ├── console.h
│ ├── ctype.h
│ ├── ctypes.h
│ ├── debug.h
│ ├── descriptor.h
│ ├── error.h
│ ├── ext4.h
│ ├── font.h
│ ├── i386
│ │ ├── fork.c
│ │ ├── fork.h
│ │ ├── linkage.h
│ │ ├── sys.c
│ │ ├── sys.h
│ │ └── system.h
│ ├── init.h
│ ├── interrupt.h
│ ├── keyboard.h
│ ├── keymap.h
│ ├── list.h
│ ├── memory.h
│ ├── page.h
│ ├── peripheral.h
│ ├── pmm.h
│ ├── protect.h
│ ├── README.md
│ ├── schedule.h
│ ├── slab.h
│ ├── string.h
│ ├── task.h
│ ├── task_struct.h
│ ├── timer.h
│ ├── tty.h
│ ├── unistd.h
│ ├── vargs.h
│ └── vmm.h
├── init
│ ├── console.c
│ ├── interrupt.c
│ ├── kernel.asm
│ ├── memory.c
│ ├── palette.c
│ ├── pmm.c
│ ├── start.c
│ └── vmm.c
├── kernel
│ ├── buddy.c
│ ├── panic.c
│ ├── prink.c
│ ├── sched.c
│ ├── sched.s
│ ├── slab.c
│ └── tty.c
├── Makefile
├── qemu_run_os.sh
├── README
├── RUN_i386.bat
└── scripts
└── kernel.ld
运行说明
---------
该工程在ubuntu16.04和CentOS7上已测试通过,需要安装最新的bochs运行,可支持三种方
式:
1. make bochs
2. make qemu
3. make debug
make debug表示以调试模式运行,详情可查看Makefile文档。
TODO
=====
1. asm切换为.S
2. 调度器
3. buddy系统
4. slab分配器
5. 82258(DMA控制器)
6. 8259A(中断控制器)
7. 8272(磁盘控制器)
8. 82385(Cache控制器)
9. 82062(硬盘控制器)
10. 8254(可编程定时/计数器)
正在完善中...
About
A Multitask Scheduler and Toy Kernel: MTSTK
Topics
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published