カスタム (非常に基本的な「Hello world!」) ブートローダーをアセンブラーで作成しました。その中で C プログラムを実行したいと考えています。C プログラムは動作しますか、それともファイルが失われたために失敗しstdio.h
ますか? また、C プログラムとブートローダーを単一の .bin ファイルにバンドルしdd
て、フラッシュ ドライブ/CD に保存するにはどうすればよいでしょうか?
1067 次
1 に答える
7
「失われた」とはどういう意味かわかりませんstdio.h
が、 でプロトタイプ化されたものを含む多くの C ランタイム関数は、stdio.h
システム コールを使用して実装されています。OS が実行されていないと、これらのシステム コールは機能しません。
OS なしで実行する C コードを作成することは可能です。たとえば、最も一般的なブートローダーには、ごくわずかな量のアセンブラーと大部分が C コードしかありません。秘訣は、ランタイム ライブラリの使用を避けることです。syscall に代わるものとして、例えば表示などがありますが、これは BIOS 呼び出しとハードウェア固有の I/O です。
ほんの一例を挙げると、動的割り当てに加えてfopen
、読み取りモードでは次の低レベル操作が必要です。
- ストレージからのデータ ブロックの読み取り
- ファイル システム メタデータの読み取り (多くの場合、スーパーブロックとルート ディレクトリ)
- ファイル システム メタデータを処理して、ファイル コンテンツが保存されている場所を特定する
- ディスク上のデータを検索するの
fread
に十分な情報を含む FILE オブジェクトを作成するfgetc
それを支援するOSがありません。Cコードは、ブロック読み取り用のドライバー(おそらくBIOSを呼び出す)を実装し、他のステップの動作を実装する必要があります。
于 2011-05-29T17:03:30.803 に答える