

C言語のプログラムをOS無しでブートすることは可能ですか？  
英語版で似てる質問がありますが別人です。


CC BY-SA 4.0
2019-10-03T11:43:32.953
59433
2019-10-04T03:44:01.903
2019-10-03T11:49:50.663
32986
36054
question
c
C言語のプログラムをOS無しでブートすることは可能ですか？


組み込み向けのCPUではそれが普通です。  
PCでやろうとするなら、初期化部分を自分で書くなりすれば可能でしょう

まあ、そのコードをどうやってメモリ上に展開するのか、というのをまず考える必要がありますが


CC BY-SA 4.0
2019-10-03T23:51:00.620
59441
2019-10-03T23:51:00.620
27481
59433
answer


[c](/questions/tagged/c "'c' のタグが付いた質問を表示") 言語規格書は [c](/questions/tagged/c
"'c' のタグが付いた質問を表示") によって OS 自体を記述することを想定しています。 OS を記述するような状況のことを
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") 言語規格書は「フリースタンディング環境」と呼んでいます。その意味で
OS が起動する＝ [c](/questions/tagged/c "'c' のタグが付いた質問を表示") で書いたプログラムが起動するってことですね。

いわゆる「組み込み系」つまり家電製品など、ワンチップマイコンの開発においてはマイコン用コンパイラがマイコンの専用機能に対応しており、リセット解除直後処理（のことを、組み込み業界ではブート処理と呼びます）や割り込み処理などをすべて
[c](/questions/tagged/c "'c' のタグが付いた質問を表示")
だけで書くことが可能になっています。もちろん、アセンブラが無いと書けない超特殊な処理ってのもいまだにありますが、まあブート処理だけなら
[c](/questions/tagged/c "'c' のタグが付いた質問を表示") だけで書けます。オイラ自身が経験者として保証します。

いわゆる Windows パソコンの BIOS/UEFI のリセット解除直後処理であればおそらく 99% は [c](/questions/tagged/c
"'c' のタグが付いた質問を表示") で記述することができると思います。新しい CPU
がガンガン開発され新しい機能が増えまくっている関係で、初期化処理には [c](/questions/tagged/c "'c' のタグが付いた質問を表示")
コンパイラがまだ対応していない機能を使う必要があったりするので、どうしても残り 1% にはアセンブラが必須と考えていいでしょう。

* * *

質問が `printf()` 関数などごく普通の「ホスト環境」で動かす予定のプログラムを OS
なしで動かしたいということなら、現代的答えは「無理」というか「無意味」。まあ OS
を含めて自作すれば話は別っすけど、一般人が試みるにはコスト高すぎでしょう。

まあ世の中には（ワンチップマイコン向けでない）パソコン向けの OS を自作したいって人もいますので、興味があれば検索してみてください。


CC BY-SA 4.0
2019-10-03T23:59:23.430
59442
2019-10-04T01:24:59.833
2019-10-04T01:24:59.833
8589
8589
59433
answer


組み込みソフトの場合、WDTクリアをわざと止めて、CPUリセットをおこさせることもよくあります。


CC BY-SA 4.0
2019-10-04T03:44:01.903
59450
2019-10-04T03:44:01.903
24490
59433
answer