FatFSの移植(FDへのファイル作成) — 自作OS

ステップローダーの作成と本番用ブートローダーの分離と制御移行に成功したので、FatFsのファイル書き込み機能の実装を行った。これまでの経緯については、以前の記事を参照して欲しい。

disk_write()コマンドは、disk_read()コマンドの時と同様に、既に作成済みのDMA処理でディスクへ書き込む関数を流用して簡単に作成できた。
テスト用の簡易コマンドを作成して、コマンド実行で短いテキストファイルをフロッピーディスクイメージ内へ新規作成を行い、そのフロッピーイメージをManjaro Linuxでマウントすると、正常に認識され、Mousepadでも開いて中身を表示できた。一部を修正して保存。アンマウントして、再度、VirtualBoxで起動すると、簡易lsコマンドで一覧表示され、簡易catコマンドで修正した通りの内容が表示された。

直接関係ないことだが、FatFsをコンパイルする時に、i686-elf-gccでは8-bbyteのQWORDが選択され、エラーとなってしまって、付け焼刃で、QWORDを使用しないように勝手に修正している。/usr/lib/gcc/——-/stdint.hというインクルードファイルが必要だった。stdint.hから必要なものをリライトして、pseudo_stdint.hというファイルを作成して対応しようと思ったが、中身は#ifdefなどのマクロ判定の塊で、ロジックを追うのが面倒だったので、ff.hを手作業で32bit用に修正した。
確証はないのだが、コンパイルエラーの原因は、i686-elf-gccの問題だと思う。英語のサイトを調べ回って理解できた限りでは、Manjaro Linuxのi686-elf-gccのオリジナルはgcc-11.2.0なので、標準C言語の2011年仕様に準拠していて、FatFsは変数の型を選択する際、#defineマクロの__STD_VERSION__などで、1999L以上かどうかでstdint.hと8-byte=QWORDを採用するかどうか判定していて、i686-elf-gcc自体は32bit限定のgccなのだが、#defineマクロの判定のために、stdint.hとQWORD型を採用してしまっているように見えた。stdint.hを参照するようにすれば、エラーはなくなるのかもしれないが、i686-elf-gccがQWORD型へ対応できているのか分からない。

一応、目標とするところは終えた。Timer割り込みとカレンダー機能とか、共通ルーチンのライブラリ化と分離もやっておかないとソースが重複したり複雑になったりするので、今やっておいた方がいいし、必要なら簡易なシステムコールを作成するか、いろいろな事情があって迷っている。

カテゴリー: Linux, VirtualBox, 自作OS パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です