我正在构建一个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