内核(屏幕驱动程序)的某些功能无法正确编译 - osdev

时间:2017-05-21 08:39:51

标签: c gcc compiler-errors kernel osdev

我正在构建一个OS内核。当某些功能编译不正确时,我遇到了问题。

我在Windows上的Linux子系统上使用gcc编译器编译代码。但是当我编译代码时,它没有超过13833字节。这会产生问题,因为最后出现的屏幕驱动程序功能(打印功能)无法正常工作。

即使我通过数组添加了一千个uint64_t变量,即使这样,大小也不会增加。这个问题可能在构建过程中。

我的 makefile 是 -

DIRECTORIES = boot kernel drivers HALx86 dataman physmm

C_SOURCES = $(wildcard HALx86/*.c dataman/*.c physmm/*.c drivers/*.c)
ASM_SOURCES = $(wildcard HALx86/*.asm)

CC = gcc
CFLAGS = -DDEBUG -m32 -ffreestanding -c -nostdlib -lgcc

KERNEL = kernel/kernel_start.o kernel/kernel.o

ASM = nasm
AOFLAGS = -f elf32 -o
ABINFLAGS = -f bin -o

OBJ = ${C_SOURCES:.c=.o}
ASMOBJ = ${ASM_SOURCES:.asm=.o}

all: os-image.img

os-image.img: boot/boot_sector.bin boot/boot_stage2.bin kernel/kernel.bin
    cat $^ > $@
    echo "OS Image size:"
    wc -c os-image.img

kernel/kernel.bin: ${KERNEL} ${ASMOBJ} ${OBJ}
    ld -melf_i386 -o $@ -Ttext 0x1000 $^ --oformat binary

%.o : %.c
    $(CC) $(CFLAGS) $< -o $@

%.o : %.asm
    $(ASM) $< $(AOFLAGS) $@

%.bin : %.asm 
    nasm $< $(ABINFLAGS) $@

clean:
    rm -fr kernel/*.o
    rm -fr drivers/*.o
    rm -fr HALx86/*.o
    rm -fr dataman/*.o
    rm -fr physmm/*.o
    rm -fr boot/*.bin
    rm -fr os-image.img *.bin *.o

rebuild:
    make clean
    make

backup:
    make clean
    zip -r backups/BACKUP_DATE-`date +%d-%m-%Y_%H-%M-%S`.zip $(DIRECTORIES) README.txt makefile
    make

0 个答案:

没有答案