git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
basic process support and some syscalls
[lunaix-os.git]
/
lunaix-os
/
arch
/
x86
/
boot.S
diff --git
a/lunaix-os/arch/x86/boot.S
b/lunaix-os/arch/x86/boot.S
index 5f832aa34038364f2f202e084b379d779a8c1116..9c86bbc6bed8081695dcb00a58b33b100403b73e 100644
(file)
--- a/
lunaix-os/arch/x86/boot.S
+++ b/
lunaix-os/arch/x86/boot.S
@@
-2,7
+2,7
@@
#include <arch/x86/boot/multiboot.h>
#define MB_FLAGS MULTIBOOT_MEMORY_INFO | MULTIBOOT_PAGE_ALIGN
#include <arch/x86/boot/multiboot.h>
#define MB_FLAGS MULTIBOOT_MEMORY_INFO | MULTIBOOT_PAGE_ALIGN
-#define KPG_SIZE
24*1024
+#define KPG_SIZE
10*4096
.section .multiboot
.long MULTIBOOT_MAGIC
.section .multiboot
.long MULTIBOOT_MAGIC
@@
-18,15
+18,15
@@
/* 根据System V ABI,栈地址必须16字节对齐 */
/* 这里只是一个临时栈,在_hhk_init里面我们会初始化内核专用栈 */
stack_bottom:
/* 根据System V ABI,栈地址必须16字节对齐 */
/* 这里只是一个临时栈,在_hhk_init里面我们会初始化内核专用栈 */
stack_bottom:
- .skip 16318, 0
+ .skip 16318
* 2
, 0
stack_top:
/*
1 page directory,
stack_top:
/*
1 page directory,
-
5
page tables:
+
9
page tables:
1. Mapping reserved area and hhk_init
1. Mapping reserved area and hhk_init
- 2-
5
. Remapping the kernels
+ 2-
9
. Remapping the kernels
*/
.section .kpg
*/
.section .kpg
@@
-41,6
+41,9
@@
* linker more knowledge about the label
*/
start_:
* linker more knowledge about the label
*/
start_:
+ cld
+ # 确保屏蔽所有外中断,直到我们准备好PIC为止
+ cli
movl $stack_top, %esp
subl $16, %esp
movl $stack_top, %esp
subl $16, %esp
@@
-74,9
+77,9
@@
andl $0xfffff000, %eax # 有点多余,但写上还算明白一点
movl %eax, %cr3
andl $0xfffff000, %eax # 有点多余,但写上还算明白一点
movl %eax, %cr3
- /* 开启分页与地址转换 (CR0.PG=1) */
+ /* 开启分页与地址转换 (CR0.PG=1
, PG.WP=1
) */
movl %cr0, %eax
movl %cr0, %eax
- orl $0x800
0
0000, %eax
+ orl $0x800
1
0000, %eax
movl %eax, %cr0
addl $16, %esp
movl %eax, %cr0
addl $16, %esp