FrontPage
New
Index
SignIn
Edit
DOS/FreeDOS/build/kernel(2041)
no archive mode
[[DOS]]/[[FreeDOS|DOS/FreeDOS]]/[[build|DOS/FreeDOS/build]]/kernel FreeDOS のカーネルビルド法(OpenWatcom 編)。((br)) 想定しているカーネルのバージョンは 2041 です。((br)) ちなみに[[以前のやつ|DOS/FreeDOS/build/kernel(2035a)]]はカーネル 2035a 想定。 !!! 想定されているビルド環境 FreeDOS カーネルのビルド環境として、とりあえず以下のものが想定されているようです。 *DOS *Windows (32bit) *Linux (x86 32/64bit) 正直、64bit Windows より Linux 上の方がビルドは楽なんじゃないかな…。 !!! 必要なもの !! FreeDOS カーネルのソース * これ書いてる時点(2014-08)での最新リリースは 2041 - [sourceforge|http://sourceforge.net/projects/freedos/files/Kernel/2041/] でも [ibiblio|http://ftp.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/kernel/2041/] でもええねんで…。 * 開発版的なやつが [www.fdos.org にある|http://www.fdos.org/kernel/]→[github のソースリポジトリ|https://github.com/PerditionC/fdkernel] リリース版の zip に入ってるソースは改行コードが CR+LF なので、Linux 上でビルドする場合は多少注意が必要かも。展開時に unzip の -aa オプションで全部テキストファイルとみなしてしまう(改行コードを変換しつつ展開してくれる)のが楽かも。 !! コンパイラ ここでは [OpenWatcom C/C++|http://www.openwatcom.org/] を使うことにする。理由はほかのコンパイラよりバイナリサイズが小さくできるから。((br)) (それ以外のものを使う場合に関しては[[以前のやつ|DOS/FreeDOS/build/kernel(2035a)]]を適当にどうぞ) ちなみに OpenWatcom の Linux 版インストーラは、16bit ターゲットのコンパイラやライブラリをデフォルトではインストールしない。手動でチェックを入れる必要がある。 また Linux 上でビルドする場合は gcc も必要なので、事前に開発環境をインストールしておく。 !! アセンブラ * [nasm|http://www.nasm.us/] とりあえず最新版でいいんじゃないかと。((br))Linux なら apt-get とか yum とか使って普通に。 !! UPX * 公式サイト http://upx.sourceforge.net/ カーネルイメージ圧縮に使う。ビルドに必須ではないことになっているが、現状の makefile では使わないように設定できない気がする。makefile 中にある <tt>XUPX=...</tt> の設定を消去するかコメントアウトし、upx を使うかどうかは config.bat (config.mak) に任せるほうがいいと思う。(ほかにも exeflat には微妙なバグがあり、FAT16 カーネルが正しく展開できないことがあるため、utils/exeflat.c だけ[開発版のソース|https://github.com/PerditionC/fdkernel/blob/master/utils/exeflat.c]に置き換えたほうがいいと思われ) Ubuntu あたりだと apt-get で何も考えずにインストールできるが、これは ucl ライブラリを使った「オープンソース版」であり圧縮率が劣る(圧縮後のカーネルサイズが 1K バイト以上異なる)。公式サイトから落としたバイナリを使ったほうがいい。 !! その他ツール * [unzip|http://www.info-zip.org/UnZip.html] カーネルソースの展開に使う。((br))まあ zip がほどけるツールなら何だっていいんですが、コマンドライン版の unzip って意外と便利なんですよ…オプション -aa (treat all files as text) を使うと改行コードを変換しながら展開してくれる。つまり Windows 用の unzip だと LF → CRLF になるし(元から CRLF だったらそのまま)、Unix 版だと CRLF → LF になるのです… * make (GNU make) Linux 上でビルドする場合は必須。 !!! ビルド (Windows) おおまかな手順はこんな感じ(この項、以前とほぼ同じ…)。 + コンパイラやツールを(正しく)インストールしておく + copy config.b config.bat + config.bat を手持ちの環境にあわせて修正 + build.bat 実行 実際にビルドを行う前に、バッチファイルの改行コードを確認しておいたほうがいいと思う。CR+LF でないバッチファイルは動かない可能性がある。 現状では、ビルド中に 16bit DOS プログラム(exeflat)がビルド、実行されることに注意。((br)) これには以下のような問題(といっていいと思う)がある。 * 64bit 環境でのビルドが保証されない。 * フォルダ(ディレクトリ)の制限。16bit DOS アプリで正しくアクセスできない場所にソースが展開されているとビルドが失敗する。 * DOS プログラム実行時にコンソールが英語モードになってしまう(一応、chcp 932 すれば元の日本語コンソールに戻せるけど、ねえ…)。 (開発版のソースだと Linux とほぼ同様の手順で 16bit 非依存のビルドができるようになっている…はず) !! config.bat 環境変数をいろいろ設定しているので、使用ツールや作成したいカーネルの種別にあわせて各自で修正する。 : XNASM :: nasm のパス名。 デフォルトだと 16bit 版 nasm が指定されているので書きかえる。 : COMPILER :: デフォルトコンパイラの指定。((br)) 無指定時は WATCOM が選ばれる(が、config.b では TC2 が設定されている)。 Turbo C 2.0, Turbo C++ 1.01, Visual C++ 1.52, OpenWatcom の場合は build 時の引数でコンパイラを指定できるのであえて設定しなくてもいい。 その他のコンパイラ(Turbo C++ 3.0, Borland C++ 5.0)を使う場合は指定が必要。 : TC2_BASE, TP1_BASE, TC3_BASE, BC5_BASE, MS_BASE :: コンパイラがインストールされているベースディレクトリの指定。 : XUPX :: UPX のパス名(と実行時オプション)。((br)) UPX を使わない場合は set XUPX= と設定する(と config.b に書いてある)。 : XLINK :: カーネルリンク時に使うリンカのパス名。((br)) ふつうはコンパイラ付属のリンカを使うので、指定しなくてもいいと思う。 : MAKE :: ビルド時に使う make のパス名。((br)) COMPILER に WATCOM が指定されているときはデフォルトで wmake が使われるので、特に指定しなくてもよい。((br)) ちなみに Visual C++ 1.52 を使ったとき、付属の nmake だとうまくビルドできなかった。 Borland C++ 5.51 の make を指定して回避した。 : XCPU, XFAT :: ビルドするカーネルの種類。((br)) build 実行時にオプションで指定することも可能。 : ALLCFLAGS :: コンパイラに対する追加フラグ。 詳細は config.b のコメントと config.bat で。 : NASMFLAGS :: アセンブラに対する追加フラグ。 詳細は config.b のコメントと config.bat で。 Windows 3.1 サポート用のマクロ定義 <tt>-DWIN31SUPPORT</tt> は ALLCFLAGS と NASMFLAGS の両方に入れる必要がある。 !! build.bat ビルド時に実行するファイル。 実行時のオプションは build.bat の先頭付近に記述されている。 用例: 8< build fat16 tcpp 86 >8 * コンパイラ : Turbo C++ 1.01 * カーネル : FAT16, 8086 用 8< build -r fat32 wc 386 >8 * 以前のビルド時に作成したファイルをまず消去 * コンパイラ : OpenWatcom * カーネル : FAT32, 386 必須 オプションを変更して再構築するときは -r をつける。 !!! ビルド (Linux) おおまかな手順…まあ、Windows のときとほぼ同じというか、気分的にはむしろ楽? + コンパイラやツールを(正しく)インストールしておく + cp config.m config.mak + config.mak を手持ちの環境にあわせて修正 + make clobber && make all !! config.mak OpenWatcom によるクロスビルドしか考慮されていないので、(使用するツールのフルパス名を変更したい場合を除いて)特に変更の必要もないと思う。 : WATCOM :: OpenWatcom C/C++ がインストールされているベースディレクトリの指定。((br))自分で設定する場合は $WATCOM/binl にパスを通しておく必要がある。 : XUPX :: UPX のパス名(と実行時オプション)。((br)) UPX を使わない場合は(config.m に書いてある通りに)unexport XUPX を指定する。 : XCPU, XFAT :: ビルドするカーネルの種類。((br)) make 時に引数指定して上書きすることも可能。 : ALLCFLAGS :: コンパイラに対する追加フラグ。 詳細は上記の config.bat の説明参照。 : NASMFLAGS :: アセンブラに対する追加フラグ。 詳細は上記の config.bat の説明参照。 !! make 用例: 8< make clobber && make XCPU=86 XFAT=32 all >8 * カーネル : FAT32, 8086 用 !!! おまけ:最近の開発版のビルド (Linux/Windows) github にある[開発版ソースツリー|https://github.com/PerditionC/fdkernel]ではいちおう Windows でも Linux とほぼ同様の手順でビルドできるようになっている(はず)。 mingw 版の GNU make(mingw32-make。x64 環境ならたぶん mimgw64-make も使える)が必要。 主に Watcom コンパイラのパス名/オプション指定の都合により cygwin や msys 環境ではまともにビルドできないので、ふつうのコマンドプロンプトから make を行う。
Attachment
New: