Я пытаюсь собрать файл C и файл ASM вместе и каким-то образом получаю эту ошибку "ld: Unsupported PEI architecture: pei-i386"
при использовании LD. Я использовал этот урок с некоторым измененным кодом из ответа на этот вопрос
После всего набора интересующих файлов
1) Основной сборочный файл
;;kernel.asm
bits 32 ;nasm directive - 32 bit
global entry
extern _kmain ;kmain is defined in the c file
section .text
entry: jmp start
;multiboot spec
align 4
dd 0x1BADB002 ;magic
dd 0x00 ;flags
dd -(0x1BADB002 + 0x00) ;checksum. m+f+c should be zero
start:
cli ;block interrupts
mov esp, stack_space ;set stack pointer
call _kmain
hlt ;halt the CPU
section .bss
resb 8192 ;8KB for stack
stack_space:
2) Файл C
/*
* kernel.c
*/
void kmain(void)
{
const char *str = "kernel 1.0";
char *vidptr = (char*)0xb8000; // video mem begins here
unsigned int j = 0;
unsigned int i = 0;
while(j < 80 * 25 * 2) {
/* blank char */
vidptr[j] = ' ';
/* attr. byte - light gray on black screen */
vidptr[j+1] = 0x07;
j = j + 2;
}
j = 0;
/* this loop writes the string into vram */
while(str[j] != '\0') {
/* the characters ASCII */
vidptr[i] = str[j];
/* atr. byte - give character black bg and light gray fg */
vidptr[i + 1] = 0x07;
++j;
i = i + 2;
}
}
3) Файл компоновщика
/*
* link.ld
*/
OUTPUT_FORMAT(pei-i386)
ENTRY(entry)
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
4) Пакетный файл, который я сделал для упрощения процесса сборки всего этого. Я использую Cygwin
@echo off
echo Building...
nasm -f elf32 kernel.asm -o kasm.o
echo ok
gcc -m32 -c kernel.c -o kc.o -ffreestanding -nostdlib -nostdinc
echo ok
ld -T link.ld -o kernel kasm.o kc.o -build-id=none
echo ok
objcopy -O elf32-i386 kernel kernel.elf
echo ok
echo Done.
Как исправить эту ошибку?