OSのファイルは、ブート・ローダによって受信されRAMに展開されOSが起動できるようにされます。
ブート・ローダは割込みで最初に実行されるアドレスが決定されますが、OSはブート・ローダでソフトからアドレスを指定して実行されないといけません。
そのアドレスはどこにあるのか?
ELFヘッダの「Entry point address」で指定される必要があります。
この実行開始アドレスのことをスタート・アドレスやエントリ・ポイントと呼んでいます。
今度はそこに指定されるためには、何をどう記述すればよいのか?
リンカ・スクリプトに「ENTRY("_start")」と記述すればOKです。
_startとはstartup.sに記述したラベルのことです。
readelfで中を見るとこんなかんじで見事に指定されています。
--------------------
ELF Header:
Entry point address: 0xffc020
Symbol table '.symtab' contains 80 entries:
Num: Value Size Type Bind Vis Ndx Name
64: 00ffc020 0 NOTYPE GLOBAL DEFAULT 1 _start
--------------------
ブート・ローダの実行開始のアドレスはH8の仕様として割込みも鑑みて実施されていたものでした。
そのブート・ローダからのOS起動は、リンカ・スクリプトの記述で先頭の実行開始のアドレスを指定してやることで実現されます。
ブート・ローダは割込みで最初に実行されるアドレスが決定されますが、OSはブート・ローダでソフトからアドレスを指定して実行されないといけません。
そのアドレスはどこにあるのか?
ELFヘッダの「Entry point address」で指定される必要があります。
この実行開始アドレスのことをスタート・アドレスやエントリ・ポイントと呼んでいます。
今度はそこに指定されるためには、何をどう記述すればよいのか?
リンカ・スクリプトに「ENTRY("_start")」と記述すればOKです。
_startとはstartup.sに記述したラベルのことです。
readelfで中を見るとこんなかんじで見事に指定されています。
--------------------
ELF Header:
Entry point address: 0xffc020
Symbol table '.symtab' contains 80 entries:
Num: Value Size Type Bind Vis Ndx Name
64: 00ffc020 0 NOTYPE GLOBAL DEFAULT 1 _start
--------------------
ブート・ローダの実行開始のアドレスはH8の仕様として割込みも鑑みて実施されていたものでした。
そのブート・ローダからのOS起動は、リンカ・スクリプトの記述で先頭の実行開始のアドレスを指定してやることで実現されます。