首页 > 代码库 > 测试文件系统

测试文件系统

一、本文主要内容

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=gccLD=ldOBJCOPY=objcopyCFLAGS=-cTRIM_FLAGS=-R .pdr -R .comment -R.note -S -O binaryLDFILE_BOOT=solrex_x86.ldLDFILE_DOS=solrex_x86_dos.ldLDFLAGS_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 *.BINdistclean: clean    @rm -f boot.imgrelease: 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