Récemment, je lisais un tutoriel sur l'implémentation d'un système d'exploitation x86 simple. Parce que je ne connais pas très bien le système Linux, quand j'ai vu que pour configurer l'environnement de développement, je devais écrire des fichiers de script, des Makefiles et l'éditeur de liens ld utilisés dans le développement, Je ne pouvais vraiment pas le comprendre. , Je ne sais pas comment gérer ces codes. J'espère que les seniors pourront me dire quelles connaissances en langage assembleur et quelles opérations Linux je dois apprendre à comprendre.
Voici le code du makefile : —————————————————————————————
C_OBJECTS = $(patsubst %.c, %.o, $(C_SOURCES))
S_SOURCES = $(shell find . -name "*.s" )
S_OBJECTS = $(patsubst %.s, %.o, $(S_SOURCES))
LD = ld
ASM = nasm
LD_FLAGS = -T scripts/kernel.ld -m elf_i386 -nostdlib
ASM_FLAGS = -f elf - g -F poignarde
.c.o :
@echo 编译代码文件 $< ...
$(CC) $(C_FLAGS) $< -o $@
.s.o :
@echo 编译汇编文件 $< ...
$(ASM) $(ASM_FLAGS) $<
lien :
@echo 链接内核文件...
$(LD) $(LD_FLAGS) $(S_OBJECTS) $(C_OBJECTS) -o hx_kernel
.PHONY:proprepropre:
$(RM) $(S_OBJECTS) $(C_OBJECTS) hx_kernel
.PHONY:update_imageupdate_image:
sudo mount floppy.img /mnt/kernel
sudo cp hx_kernel /mnt/kernel/hx_kernel
sleep 1
sudo umount /mnt/kernel
.PHONY:mount_imagemount_image:
sudo mount floppy.img /mnt/kernel
.PHONY:umount_imageumount_image:
sudo umount /mnt/kernel
.TÉLÉPHONE:qemuqemu:
qemu -fda floppy.img -boot a
.TÉLÉPHONE:bochsbochs:
bochs -f tools/bochsrc.txt
.PHONY:debugdebug:
qemu -S -s -fda floppy.img -boot a &
sleep 1
cgdb -x tools/gdbinit
——————————————————————————————
Voici le code de l'éditeur de liens : —————————————————————————————
/*
*/
SECTIONS
{
/* 段起始位置 */
. = 0x100000;
.text :
{
*(.text)
. = ALIGN(4096);
}
.data :
{
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
*(.bss)
. = ALIGN(4096);
}
.stab :
{
*(.stab)
. = ALIGN(4096);
}
.stabstr :
{
*(.stabstr)
. = ALIGN(4096);
}
/DISCARD/ : { *(.comment) *(.eh_frame) }
}————————————————————————————
Vous n’avez pas besoin de connaître l’assemblage pour cela. Vous devez apprendre le Makefile et le script ld.