zoukankan      html  css  js  c++  java
  • xv6 makefile

    1. xv6.img的构建

    在makefile中

    bootblock: bootasm.S bootmain.c
        $(CC) $(CFLAGS) -fno-pic -O -nostdinc -I. -c bootmain.c
        $(CC) $(CFLAGS) -fno-pic -nostdinc -I. -c bootasm.S
        $(LD) $(LDFLAGS) -N -e start -Ttext 0x7C00 -o bootblock.o bootasm.o bootmain.o
        $(OBJDUMP) -S bootblock.o > bootblock.asm
        $(OBJCOPY) -S -O binary -j .text bootblock.o bootblock
        ./sign.pl bootblock

      使用bootasm.S和bootmain.c构建bootblock.o,使用工具objcopy把bootblock.o的.text段(该段包含程序的可执行指令)拷贝出来生成bootblock

      使用perl脚本sign.pl把bootblock设置成512自己长度(不够部分填充0,最后2个字节是x55xAA)。该步生成的既bootloader,BIOS自检结束过后,首先执行的代码。

      另外,生成的entryother和initcode也只包含可执行指令

    kernel: $(OBJS) entry.o entryother initcode kernel.ld
        $(LD) $(LDFLAGS) -T kernel.ld -o kernel entry.o $(OBJS) -b binary initcode entryother
        $(OBJDUMP) -S kernel > kernel.asm
        $(OBJDUMP) -t kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > kernel.sym

      按照连接脚本kernel.ld的格式,把entry.o $(OBJS)这些文件连接成kernel;同时也把binary initcode entryother放入到kernel中,生成对应的全局变量_binary_*_start和_binary_*_size,也便在程序中定位指令的位置和大小。比如系统启动的第一个进程就是通过

    _binary_initcode_start和_binary_initcode_size定位的initcode指令的位置。
    xv6.img: bootblock kernel
        dd if=/dev/zero of=xv6.img count=10000
        dd if=bootblock of=xv6.img conv=notrunc
        dd if=kernel of=xv6.img seek=1 conv=notrunc

      使用工具dd把bootblock放在第一个512块(BIOS自检结束之后直接加载该块执行),kernel放在第一个块之后,生成xv6.img

      

  • 相关阅读:
    存储过程中Like没有数据?
    鼠标放上图片移动,字体移动
    Excel
    参数无效。区域性ID2155(0X086B)不是受支持的区域性
    JVM指令集及各指令的详细使用说明[转的]
    BTrace使用简介
    ST表
    树剖模板
    AjaxControlToolkit中的CalendarExtender被遮挡及日期格式本地化解决方法
    Using Beyond Compare with TFS
  • 原文地址:https://www.cnblogs.com/hygblog/p/9343068.html
Copyright © 2011-2022 走看看