zoukankan      html  css  js  c++  java
  • 测试文件系统

    一、本文主要内容

    1.制作一个可执行文件,用于测试

    (1)在一个新的文件loader.S中写一段测试代码,及相应的.ld文件

    (2)修改makefile,使loader.S编译成loader.bin

    (3)把loader.bin拷贝到boot.img上

    2.加载测试文件

    对上一篇文件的代码稍做修改,使得能搜索并加载指定文件《loader.bin》到内存指定位置

    3.控制权转移到内存指定位置

    二、写一个测试文件

    (1)loader.S

    .code16
    
    .text
        mov $0xb800, %ax
        mov %ax, %gs
        mov $0xf, %ah
        mov $'L', %al
        mov %ax, %gs:((80*0+39)*2)
        jmp .

    (2)solrex_x86_dos.ld

    这里我不太懂,加载的时候es:bx说明加载的位置,这个ld有什么用呢?

    SECTIONS
    {
        . = 0x0100;
        .text :
        {
            _ftext = .;
        } = 0
    }

    (3)makefile

    a.增加loader.S –> loader.bin的make

    b.增加make copy, 用于把loader.bin拷贝到boot.img上

    CC=gcc
    LD=ld
    OBJCOPY=objcopy
    
    CFLAGS=-c
    TRIM_FLAGS=-R .pdr -R .comment -R.note -S -O binary
    
    LDFILE_BOOT=solrex_x86.ld
    LDFILE_DOS=solrex_x86_dos.ld
    LDFLAGS_BOOT=-T$(LDFILE_BOOT)
    LDFLAGS_DOS=-T$(LDFILE_DOS)
    
    all: boot.img LOADER.BIN
        @echo '#################################################################'
        @echo '# Compiling work finished, now you can use "sudo make copy" to'
        @echo '# copy LOADER.BIN into boot.img'
        @echo '#################################################################'
    
    boot.bin: boot.S
        $(CC) $(CFLAGS) boot.S
        $(LD) boot.o -o boot.elf $(LDFLAGS_BOOT)
        $(OBJCOPY) $(TRIM_FLAGS) boot.elf $@
    
    LOADER.BIN: loader.S
        $(CC) $(CFLAGS) loader.S
        $(LD) loader.o -o loader.elf $(LDFLAGS_DOS)
        $(OBJCOPY) $(TRIM_FLAGS) loader.elf $@
    
    boot.img: boot.bin
        @dd if=boot.bin of=boot.img bs=512 count=1
        @dd if=/dev/zero of=boot.img skip=1 seek=1 bs=512 count=2879
    
    # You must have the authority to do mount, or you must use "su root" or
    # "sudo" command to do "make copy"
    copy: boot.img LOADER.BIN
        @mkdir -p /tmp/floppy;
        mount -o loop boot.img /tmp/floppy/ -o fat=12;
        cp LOADER.BIN /tmp/floppy/;
        umount /tmp/floppy/;
        rm -rf /tmp/floppy/;
    
    clean: 
        @rm -f *.o *.elf *.bin *.BIN
    
    distclean: clean
        @rm -f boot.img
    
    release: clean
        @mv boot.img solrex.img

    三、加载测试文件

    不需要特殊处理,把要加载的文件名和文件名长度设置一下就可以了

    四、转移控制权

    在LABEL_FILE_LOADED后面加上

    jmp        $BaseOfLoader, $OffsetOfLoader

    四、编译

    DARN)E$8UN`7TR`V80YV[S9

    五、运行

    (1)打印“Booting**”:引导程序开始执行

    (2)打印“Loaded in”:找到了loader.bin

    (3)打印“L”:跳转到loader.S的代码中

    JRYYNZHC])2LI@ZPH3@8J$B

  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/windmissing/p/3817233.html
Copyright © 2011-2022 走看看