Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
7f1718ca
提交
7f1718ca
8月 15, 2011
创建
作者:
Robert Morris
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6
上级
5053dd6a
c60a3551
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
22 行增加
和
22 行删除
+22
-22
Makefile
Makefile
+10
-10
entry.S
entry.S
+0
-0
entryother.S
entryother.S
+1
-1
main.c
main.c
+11
-11
没有找到文件。
Makefile
浏览文件 @
7f1718ca
...
...
@@ -97,11 +97,11 @@ bootblock: bootasm.S bootmain.c
$(OBJCOPY)
-S
-O
binary
-j
.text bootblock.o bootblock
./sign.pl bootblock
bootother
:
boot
other.S
$(CC)
$(CFLAGS)
-fno-pic
-nostdinc
-I
.
-c
boot
other.S
$(LD)
$(LDFLAGS)
-N
-e
start
-Ttext
0x7000
-o
bootblockother.o
boot
other.o
$(OBJCOPY)
-S
-O
binary
-j
.text bootblockother.o
boot
other
$(OBJDUMP)
-S
bootblockother.o
>
boot
other.asm
entryother
:
entry
other.S
$(CC)
$(CFLAGS)
-fno-pic
-nostdinc
-I
.
-c
entry
other.S
$(LD)
$(LDFLAGS)
-N
-e
start
-Ttext
0x7000
-o
bootblockother.o
entry
other.o
$(OBJCOPY)
-S
-O
binary
-j
.text bootblockother.o
entry
other
$(OBJDUMP)
-S
bootblockother.o
>
entry
other.asm
initcode
:
initcode.S
$(CC)
$(CFLAGS)
-nostdinc
-I
.
-c
initcode.S
...
...
@@ -109,8 +109,8 @@ initcode: initcode.S
$(OBJCOPY)
-S
-O
binary initcode.out initcode
$(OBJDUMP)
-S
initcode.o
>
initcode.asm
kernel
:
$(OBJS)
multiboot.o data.o boot
other initcode
$(LD)
$(LDFLAGS)
-T
kernel.ld
-e
multiboot_entry
-o
kernel
multiboot.o data.o
$(OBJS)
-b
binary initcode boot
other
kernel
:
$(OBJS)
entry.o data.o entry
other initcode
$(LD)
$(LDFLAGS)
-T
kernel.ld
-e
multiboot_entry
-o
kernel
entry.o data.o
$(OBJS)
-b
binary initcode entry
other
$(OBJDUMP)
-S
kernel
>
kernel.asm
$(OBJDUMP)
-t
kernel |
sed
'1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d'
>
kernel.sym
...
...
@@ -121,12 +121,12 @@ kernel: $(OBJS) multiboot.o data.o bootother initcode
# great for testing the kernel on real hardware without
# needing a scratch disk.
MEMFSOBJS
=
$
(
filter-out ide.o,
$(OBJS)
)
memide.o
kernelmemfs
:
$(MEMFSOBJS)
multiboot.o data.o boot
other initcode fs.img
$(LD)
$(LDFLAGS)
-Ttext
0x100000
-e
main
-o
kernelmemfs
multiboot.o data.o
$(MEMFSOBJS)
-b
binary initcode boot
other fs.img
kernelmemfs
:
$(MEMFSOBJS)
entry.o data.o entry
other initcode fs.img
$(LD)
$(LDFLAGS)
-Ttext
0x100000
-e
main
-o
kernelmemfs
entry.o data.o
$(MEMFSOBJS)
-b
binary initcode entry
other fs.img
$(OBJDUMP)
-S
kernelmemfs
>
kernelmemfs.asm
$(OBJDUMP)
-t
kernelmemfs |
sed
'1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d'
>
kernelmemfs.sym
tags
:
$(OBJS)
boot
other.S _init
tags
:
$(OBJS)
entry
other.S _init
etags
*
.S
*
.c
vectors.S
:
vectors.pl
...
...
multiboot
.S
→
entry
.S
浏览文件 @
7f1718ca
移动文件
boot
other.S
→
entry
other.S
浏览文件 @
7f1718ca
...
...
@@ -58,7 +58,7 @@ start32:
orl $(CR0_PE|CR0_PG|CR0_WP), %eax
movl %eax, %cr0
# Switch to the stack allocated by
boot
others()
# Switch to the stack allocated by
entry
others()
movl (start-4), %esp
# Call mpboot()
call *(start-8)
...
...
main.c
浏览文件 @
7f1718ca
...
...
@@ -6,7 +6,7 @@
#include "proc.h"
#include "x86.h"
static
void
boot
others
(
void
);
static
void
enter
others
(
void
);
static
void
mpmain
(
void
)
__attribute__
((
noreturn
));
extern
pde_t
*
kpgdir
;
...
...
@@ -33,14 +33,14 @@ main(void)
ideinit
();
// disk
if
(
!
ismp
)
timerinit
();
// uniprocessor timer
boot
others
();
// start other processors (must come before kinit; must use boot_alloc)
enter
others
();
// start other processors (must come before kinit; must use boot_alloc)
kinit
();
// initialize memory allocator
userinit
();
// first user process (must come after kinit)
// Finish setting up this processor in mpmain.
mpmain
();
}
// Other CPUs jump here from
boot
other.S.
// Other CPUs jump here from
entry
other.S.
static
void
mpboot
(
void
)
{
...
...
@@ -56,7 +56,7 @@ mpmain(void)
{
cprintf
(
"cpu%d: starting
\n
"
,
cpu
->
id
);
idtinit
();
// load idt register
xchg
(
&
cpu
->
booted
,
1
);
// tell
boot
others() we're up
xchg
(
&
cpu
->
booted
,
1
);
// tell
enter
others() we're up
scheduler
();
// start running processes
}
...
...
@@ -64,24 +64,24 @@ pde_t bootpgdir[];
// Start the non-boot processors.
static
void
boot
others
(
void
)
enter
others
(
void
)
{
extern
uchar
_binary_
bootother_start
[],
_binary_boot
other_size
[];
extern
uchar
_binary_
entryother_start
[],
_binary_entry
other_size
[];
uchar
*
code
;
struct
cpu
*
c
;
char
*
stack
;
// Write bootstrap code to unused memory at 0x7000.
// The linker has placed the image of
boot
other.S in
// _binary_
boot
other_start.
// The linker has placed the image of
entry
other.S in
// _binary_
entry
other_start.
code
=
p2v
(
0x7000
);
memmove
(
code
,
_binary_
bootother_start
,
(
uint
)
_binary_boot
other_size
);
memmove
(
code
,
_binary_
entryother_start
,
(
uint
)
_binary_entry
other_size
);
for
(
c
=
cpus
;
c
<
cpus
+
ncpu
;
c
++
){
if
(
c
==
cpus
+
cpunum
())
// We've started already.
continue
;
// Tell
boot
other.S what stack to use, the address of mpboot and pgdir;
// Tell
entry
other.S what stack to use, the address of mpboot and pgdir;
// We cannot use kpgdir yet, because the AP processor is running in low
// memory, so we use bootpgdir for the APs too. kalloc can return addresses
// above 4Mbyte (the machine may have much more physical memory than 4Mbyte), which
...
...
@@ -101,7 +101,7 @@ bootothers(void)
}
}
// Boot page table used in multiboot.S and
boot
other.S.
// Boot page table used in multiboot.S and
entry
other.S.
// Page directories (and page tables), must start on a page boundary,
// hence the "__aligned__" attribute. Also, because of restrictions
// related to linking and static initializers, we use "x + PTE_P"
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论