makefile分析

xv6.img 的生成过程如下:

1:# build the own boot sector disk image
    obj/xv6.img: obj/bootblock
    dd if=/dev/zero of=obj/xv6.img count=10000 //  使用空白字符填充 xv6.img,即初始化 xv6.img

    dd if=obj/bootblock of=obj/xv6.img conv=notrunc//  以 bootblock 为输入,不截断输出到 xv6.img,生成最终的硬盘镜像

# build bootloader
obj/bootblock: bootloader/bootasm.S bootloader/bootmain.c tools/sign
  1:  $(CC) $(CFLAGS) -O -nostdinc -Iinclude -Iinclude/x86 -c bootloader/bootmain.c -o obj/bootmain.o

    //-c表示完成编译工作但不链接,最终以目标文件形式输出; 编译bootmain.c,不调用标准c头文件,并且只生成目标文件不链接

    $(CC) $(CFLAGS) -nostdinc -Iinclude -Iinclude/x86 -c bootloader/bootasm.S -o obj/bootasm.o

   //编译bootasm.S,不调用标准c头文件,并且只生成目标文件bootasm.o不连接
    $(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 -o obj/bootblock.o obj/bootasm.o obj/bootmain.o

   //链接bootasm.o和bootmain.o生成bootblock.o并且将程序入口函数设定为start,令start的内存地址为0x7c00

  // -N允许代码段数据段可读可写,取消数据段页对齐,禁止链接共享库

  //-e 决定程序入口地址 比如 

  //-Ttext  设定函数地址  0x7c00

    $(OBJDUMP) -S obj/bootblock.o > obj/bootblock.asm
    $(OBJCOPY) -S -O binary obj/bootblock.o obj/bootblock.out

  //将bootblock.o中的内容复制到bootblock.out中,并且声明不复制重分配和符号信息
    tools/sign obj/bootblock.out obj/bootblock

  //生成引导扇区的内容
 # sign tool used to build boot sector
tools/sign: tools/sign.c
    $(HOSTCC) -O2 -o tools/sign tools/sign.c
# clean the produced files
clean:
    rm -f obj/* tools/sign
# run in QEMU emulator for x86 architecture
qemu: obj/xv6.img
    qemu -parallel stdio -hda obj/xv6.img
# run in BOCHS emulator for x86 architecture
bochs: obj/xv6.img
    bochs -q -f tools/xv6bochsrc.bxrc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值