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

      

  • 相关阅读:
    教你在mac上配置adb环境变量
    Android Mediaplayer 调用release()的时候ANR
    Android ANR
    安卓android WebView Memory Leak WebView内存泄漏
    android 小结
    struts提供文件上传功能
    struts自定义拦截器
    struts拦截器的配置和使用
    Struts框架属性驱动
    struts配置文件
  • 原文地址:https://www.cnblogs.com/hygblog/p/9343068.html
Copyright © 2011-2022 走看看