ubuntu - Mengenai kod skrip kompilasi makefile dan skrip pemaut ld semasa menyusun dalam Linux
漂亮男人
漂亮男人 2017-06-05 11:10:05
0
1
724

Baru-baru ini saya membaca tutorial tentang melaksanakan sistem pengendalian x86 yang mudah Kerana saya tidak begitu biasa dengan sistem Linux, apabila saya melihat bahawa mengkonfigurasi persekitaran pembangunan, saya perlu menulis fail skrip, Makefiles dan linker ld yang digunakan dalam pembangunan, Saya benar-benar tidak dapat memahaminya, saya tidak tahu cara menangani kod ini. Saya harap warga emas dapat memberitahu saya pengetahuan bahasa himpunan dan operasi Linux yang perlu saya pelajari.

Ini ialah kod 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 - = -ASM_FLAGS g -F tikam

semua: $(S_OBJECTS) $(C_OBJECTS) pautan kemas kini_imej

.c.o:

@echo 编译代码文件 $< ...
$(CC) $(C_FLAGS) $< -o $@

.s.o:

@echo 编译汇编文件 $< ...
$(ASM) $(ASM_FLAGS) $<

pautan:

@echo 链接内核文件...
$(LD) $(LD_FLAGS) $(S_OBJECTS) $(C_OBJECTS) -o hx_kernel

.FONI:bersih

bersih:

$(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

.FONI:qemu

qemu:

qemu -fda floppy.img -boot a

.FONI:bochs

bochs:

bochs -f tools/bochsrc.txt

.PHONY:debug

debug:

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

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

Ini ialah kod pemaut: ——————————————————————————————
/*

  • kernel.ld -- skrip pautan ditulis untuk format kernel

    */

MASUK(mula)

BAHAGIAN
{

/* 段起始位置 */

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

}

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

漂亮男人
漂亮男人

membalas semua(1)
漂亮男人

Anda tidak perlu tahu pemasangan untuk ini. Anda perlu belajar Makefile dan skrip ld.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!