ブートローダーは2つのステージに分かれています。最初のステージはアセンブリで記述され、2番目のステージのみをロードし、2番目のステージはCにあります。Stage1はCのコードをアドレス0x0500:0にロードし、そこにジャンプします。Stage2は「hellomessage」を書き込んで停止する必要があります。
開始アドレスを次の人が作成した生のバイナリに設定するさまざまな方法を試しました:(しかし何も機能しませんでした)
cc -nostartfiles -nostdlib -c stage2.c
ld -s -T scrptfile.ld stage2.o /* I'm using ld just to set starting address of executable */
objcopy -O binary stage2 stage2.bin /* delete all unuseful data */
リンカースクリプト
SECTIONS
{
. = 0x0500;
.text : { *(.text)}
.data : { *(.data)}
.bss : { *(.bss)}
}
たぶん私はobjcopyで削除すべきではない何かを削除します。
では、どうすればこのstage2.binを実行できますか?
私が理解しているように、生のバイナリが16しか許可しない場合、32ビット長の命令を使用してCコードを記述しますか?
PSパラメータ-set-start(objcopy)はエラーを返します:無効なbfdターゲット。出力ファイルがバイナリだからですか?
回答ありがとうございます。