Я новичок в программировании на голом металле и в ядре, и какой лучший способ начать свое путешествие, чем в мире приветствий!
К сожалению, когда дело доходит до моей предпочтительной архитектуры, 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? Заранее спасибо!