操作系统Lab1

这篇博客详细介绍了操作系统实验室第一部分的内容,主要关注Makefile的使用,展示了如何通过一系列编译和链接步骤生成操作系统镜像ucore.img。这个过程涉及到kernel和bootblock的创建,包括编译不同源文件、链接生成二进制文件,并使用dd命令将它们整合到ucore.img中。在实验过程中,还涉及到了函数堆栈的分析和print_stackframe函数的实现,以及如何通过实验观察和理解函数调用关系。
摘要由CSDN通过智能技术生成

#练习一 Makefile

#1.1 OS镜像文件ucore.img 是如何一步步生成的?

  • cc kern/init/init.c
  • cc kern/libs/readline.c
  • cc kern/libs/stdio.c
  • cc kern/debug/kdebug.c
  • cc kern/debug/kmonitor.c
  • cc kern/debug/panic.c
    kern/debug/panic.c: In function ‘__panic’:
    kern/debug/panic.c:27:5: warning: implicit declaration of function ‘print_stackframe’ [-Wimplicit-function-declaration]
    print_stackframe();
    ^
  • cc kern/driver/clock.c
  • cc kern/driver/console.c
  • cc kern/driver/intr.c
  • cc kern/driver/picirq.c
  • cc kern/trap/trap.c
  • cc kern/trap/trapentry.S
  • cc kern/trap/vectors.S
  • cc kern/mm/pmm.c
  • cc libs/printfmt.c
  • cc libs/string.c
  • ld bin/kernel
  • cc boot/bootasm.S
  • cc boot/bootmain.c
  • cc tools/sign.c
    tools/sign.c: In function ‘main’:
    tools/sign.c:17:5: warning: unknown conversion type character ‘l’ in format [-Wformat=]
    printf("’%s’ size: %lld bytes\n", argv[1], (long long)st.st_size);
    ^
    tools/sign.c:17:5: warning: too many arguments for format [-Wformat-extra-args]
    tools/sign.c:19:9: warning: unknown conversion type character ‘l’ in format [-Wformat=]
    fprintf(stderr, “%lld >> 510!!\n”, (long long)st.st_size);
    ^
    tools/sign.c:19:9: warning: too many arguments for format [-Wformat-extra-args]
  • ld bin/bootblock
    ‘obj/bootblock.out’ size: 480 bytes
    build 512 bytes boot sector: ‘bin/bootblock’ success!

其中Makefile文件中include tools/function.mk 其中定义了一些Makefile中用到的函数

生成ucore.img 需要kernel和bootblock 如下:

create ucore.img
UCOREIMG := $(call totarget,ucore.img)

$(UCOREIMG): $(kernel) $(bootblock)
( V ) d d i f = / d e v / z e r o o f = (V)dd if=/dev/zero of= (V)ddif=/dev/zeroof=@ count=10000
( V ) d d i f = (V)dd if= (V)ddif=(bootblock) of=$@ conv=notrunc
( V ) d d i f = (V)dd if= (V)ddif=(kernel) of=$@ seek=1 conv=notrunc

$(call create_target,ucore.img)

kernel编译链接:
#-------------------------------------------------------------------
#kernel

#kernel中头文件目录
KINCLUDE += kern/debug/
kern/driver/
kern/trap/
kern/mm/

#kernel的源代码目录
KSRCDIR += kern/init
kern/libs
kern/debug
kern/driver
kern/trap
kern/mm

#在编译选项中添加头文件包含目录
KCFLAGS += ( a d d p r e f i x − I , (addprefix -I, (addprefixI,(KINCLUDE))

#调用function.mk中的add_files_cc函数,将kernel的全部源文件编译,将源文件和编译生成的OBJ文件加入kernel包(packet)中
( c a l l a d d f i l e s c c , (call add_files_cc, (calladdfilescc,(call listf_cc, ( K S R C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值