-
Notifications
You must be signed in to change notification settings - Fork 10
/
README
159 lines (138 loc) · 5.6 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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(可编程定时/计数器)
正在完善中...