ucore总体架构了解
│ Makefile
│
├─boot
│ asm.h
│ bootasm.S
│ bootmain.c
│
├─kern
│ ├─debug
│ │ assert.h
│ │ kdebug.c
│ │ kdebug.h
│ │ kmonitor.c
│ │ kmonitor.h
│ │ panic.c
│ │ stab.h
│ │
│ ├─driver
│ │ clock.c
│ │ clock.h
│ │ console.c
│ │ console.h
│ │ intr.c
│ │ intr.h
│ │ kbdreg.h
│ │ picirq.c
│ │ picirq.h
│ │
│ ├─init
│ │ init.c
│ │
│ ├─libs
│ │ readline.c
│ │ stdio.c
│ │
│ ├─mm
│ │ memlayout.h
│ │ mmu.h
│ │ pmm.c
│ │ pmm.h
│ │
│ └─trap
│ trap.c
│ trap.h
│ trapentry.S
│ vectors.S
│
├─libs
│ defs.h
│ elf.h
│ error.h
│ printfmt.c
│ stdarg.h
│ stdio.h
│ string.c
│ string.h
│ x86.h
│
└─tools
function.mk
gdbinit
grade.sh
kernel.ld
lab1init
moninit
sign.c
vector.c
综合上面的文件目录,我们先从总体上进行了解:
-
错误的观念
- 认为生成img只需要将代码转换成二进制。
- 在该目录下,tools文件sign.c等文件并没有写入img文件,而是操作辅助img文件的生成
-
疑问解答
-
make完后,执行make debug是如何导致操作系统运行的?
- Makefile文件
$(V)$(TERMINAL) -e "cgdb -q -x tools/gdbinit"
,转到tools/gdbinit - gdbinit内容显示
file obj/bootblock.o
,可见是gdb运行了bootblock.o,然后剩余的工作交给了bootblock.o去做。
- Makefile文件
-
如此,bootblock.o将要完成什么工作呢?
- 谈到bootblock.o完成什么工作,首先要了解他是如何生成的,以及其具体的代码。
-
可以看到bootblock.o是由bootasm.S和bootmain.c文件组合而成,功能也就是bootasm.S和bootmain.c的组合功能。
bootblock.o生成示意图
-