Maison  >  Questions et réponses  >  le corps du texte

ubuntu - À propos du code du script de compilation makefile et du script d'éditeur de liens ld lors de la compilation sous Linux

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 : —————————————————————————————

!Makefile

C_SOURCES = $(shell find . -name "*.c")

C_OBJECTS = $(patsubst %.c, %.o, $(C_SOURCES))
S_SOURCES = $(shell find . -name "*.s" )
S_OBJECTS = $(patsubst %.s, %.o, $(S_SOURCES))

CC = gcc

LD = ld
ASM = nasm

C_FLAGS = -c -Wall -m32 -ggdb -gstabs+ -nostdinc -fno-builtin -fno-stack-protector -I include

LD_FLAGS = -T scripts/kernel.ld -m elf_i386 -nostdlib
ASM_FLAGS = -f elf - g -F poignarde

tous : $(S_OBJECTS) $(C_OBJECTS) lien update_image

.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:propre

propre:

$(RM) $(S_OBJECTS) $(C_OBJECTS) hx_kernel

.PHONY:update_image

update_image:

sudo mount floppy.img /mnt/kernel
sudo cp hx_kernel /mnt/kernel/hx_kernel
sleep 1
sudo umount /mnt/kernel

.PHONY:mount_image

mount_image:

sudo mount floppy.img /mnt/kernel

.PHONY:umount_image

umount_image:

sudo umount /mnt/kernel

.TÉLÉPHONE:qemu

qemu:

qemu -fda floppy.img -boot a

.TÉLÉPHONE:bochs

bochs:

bochs -f tools/bochsrc.txt

.PHONY:debug

debug:

qemu -S -s -fda floppy.img -boot a &
sleep 1
cgdb -x tools/gdbinit

——————————————————————————————

Voici le code de l'éditeur de liens : —————————————————————————————
/*

ENTRÉE(début)

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) }

}

————————————————————————————

漂亮男人漂亮男人2692 Il y a quelques jours729

répondre à tous(1)je répondrai

  • 漂亮男人

    漂亮男人2017-06-05 11:12:05

    Vous n’avez pas besoin de connaître l’assemblage pour cela. Vous devez apprendre le Makefile et le script ld.

    répondre
    0
  • Annulerrépondre