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

  • 相关阅读:
    【转】36个经典的JQuery导航菜单演示+下载
    【转】ASP.NET 3.5 开发范例精讲精析读书笔记
    【转】js弹出框详解
    【转】谈谈三层架构中MODEL的作用
    【转】制作.net实体类生成器(1)
    ASP.NET开发实战宝典.pdf配套视频源码iso| 开发实战宝典pdf和配套视频源码iso
    【转】if (!IsPostBack)
    jquery
    取web.config 连接字符串
    js接收传递过来的参数
  • 原文地址:https://www.cnblogs.com/windmissing/p/3817233.html
Copyright © 2011-2022 走看看