Ошибка «ld: Неподдерживаемая архитектура PEI: pei-i386» при использовании LD - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь собрать файл 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.

Как исправить эту ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...