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