Голый металл Hello World PPC64 (QEMU + OFW) не работает - PullRequest
0 голосов
/ 26 марта 2020

Я новичок в программировании на голом металле и в ядре, и какой лучший способ начать свое путешествие, чем в мире приветствий!

К сожалению, когда дело доходит до моей предпочтительной архитектуры, PPC64 (Использование QEMU и OpenFirmware), я изо всех сил пытаюсь найти соответствующую информацию или примеры кода о том, как сделать программу hello world, используя прошивку.

До сих пор я изо всех сил пытался заставить работать самые простые вещи, пока я Я пытался использовать это start в качестве основной функции и скрипт компоновщика:

.section .boot, "aw"
.global start

start:
    b start # Basically halt the machine.
ENTRY(start)

SECTIONS
{
    . = 1M;

    .text : {
        *(.boot)
        *(.text*)
    }

    .data : {
        *(.data*)
        *(.rodata*)
    }

    .bss : {
        *(COMMON)
        *(.bss)
    }
}

Я проверял это с помощью:

clang --target=ppc64-unknown-elf -c <asm_file> -o <asm_file>.o
ld.lld --oformat elf_ppc64 --nostdlib -T <linkscript> <asm_file>.o -o output.elf
qemu-system-ppc64 -kernel output.elf -serial stdio

Но пока единственный результат из моих попыток был вывод SLOF в эмуляции QEMU:

Detected RAM kernel at 400000 (4 bytes) 

  Welcome to Open Firmware

  Copyright (c) 2004, 2017 IBM Corporation All rights reserved.
  This program and the accompanying materials are made available
  under the terms of the BSD License available at
  http://www.opensource.org/licenses/bsd-license.php

Booting from memory...


( 700 ) Program Exception [ 1dbf04c4 ]


    R0 .. R7           R8 .. R15         R16 .. R23         R24 .. R31
8000000000002000   000000001e478200   0000000000000000   0000000000000000   
000000001dc71000   8000000000000000   0000000000000000   0000000000000000   
0000000000000000   000000001e477010   0000000000000000   0000000000000000   
0000000000000000   0000000000000030   0000000000000000   0000000000000000   
0000000000000000   000000000000005b   0000000000000000   0000000000000000   
000000001dbf04c4   0000000000000000   0000000000000000   0000000000000000   
0000000000000000   0000000000000000   0000000000000000   0000000000000000   
0000000000000000   0000000000000000   0000000000000000   0000000000000000  

Как я мог заставить этот маленький фрагмент работать? Есть ли какая-нибудь документация, которую я мог бы использовать для завершения sh полной программы hello world? Заранее спасибо!

1 Ответ

1 голос
/ 26 марта 2020

Посмотрите на микро python powerp c порт README здесь: https://github.com/micropython/micropython/tree/master/ports/powerpc

Он показывает, как запустить qemu и пропустить открытую прошивку прямо в тесте. программа. Вам понадобится удаленный двоичный файл, а не эльф (см. Objcopy в Makefile)

В этом каталоге есть скрипт компоновщика и head.S, который показывает вам основы.

Удачи!

...