ubuntu - À propos du code du script de compilation makefile et du script d'éditeur de liens ld lors de la compilation sous Linux
漂亮男人
漂亮男人 2017-06-05 11:10:05
0
1
764

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

  • kernel.ld -- script de lien écrit pour le format du noyau

    */

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

}

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

漂亮男人
漂亮男人

répondre à tous(1)
漂亮男人

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal