ドコモバで cross compile しようよ

よりよい環境のをつくるには、時には自力でコンパイルせねばならないこともある。 そんな時には…
  1. クロスカウンター
  2. 再インストール
  3. 両手ぶらりん
  4. そして勝負の行方は…

cross compile

さて無事起動したとしましょう。 一般ユーザを作ったり、環境設定をしたりしましょう。 これで一応英語は読み書きできるようになりました。 次は日本語環境の構築です。 NetBSDにはどうやら kon のような簡単にできる日本語コンソールがないようなので、 MGL2 というXみたいなものをいれてみましょう。 これをいれるには、ソースからコンパイルしないといけません。 そして当然のようにモバのCFにゃそんな容量はございません。 そこで他のマシンでモバ用のbinaryを作っちゃおうというのが cross compile です(多分)。 早速 pkg で cross compiler を導入。 で、でやっと mgl2 をコンパイルしてみるが、あっさりエラー。 … やけくそでコンパイラ環境を current にしてしまいました。 これが運の尽き。 実は current は ELF なのだが 1.4.2-release は AOUT だったのでした。 そんな事知らんわー、と叫んだところでもう後の祭。 Hello, World! もコンパイルできなくなり、再起不能に陥ってしまいましたとさ。

NetBSD/i386再インストール

ELFとAOUTのさかいめで1.4.2-releaseは爆死してしまいました。 そこでおとなしく20000527のsnapshotできれいにインストールしなおすことにしました。 boot floppy はUNIXでは

dd if=boot?.fs of=/dev/fd0a
とかいう感じでつくれます。 ま、インストールは非常に簡単に終ります。 んで、適当に環境の設定をします。 私は基本的にcross compile用に用意したので、 rootパスワードと一般ユーザの設定くらいしかしませんでした。 さて。このままでは使いにくいのでパッケージをいれませう。 pkgsrc.tgzを展開して(めちゃ時間かかる)かたっぱしからmakeします。 いれたのは これであっさりcross compile環境ができました(と思う)。

それではさっそくMGL2をコンパイルしてみましょう。 なんか mil 関係でひっかかります。 とりあえず

/usr/pkg/cross/bin/mipsel-netbsd-gcc -o mini_mil.so mil.po -shared -L../lib -rdynamic -L/usr/X11R6/lib -Wl,-rpath,/usr/pkg/lib -lmgl2 -L/mnt/usr/pkg/lib -ljpeg -L/usr/pkg/lib -lungif /usr/pkg/cross/bin/mipsel-netbsd-gcc -shared -I../lib -DMINI -DEXECUTABLE -o mini_mil mil.c -lmgl2 -L/mnt/usr/pkg/lib -ljpeg -L/usr/pkg/lib -lungif -L../lib /usr/pkg/cross/mipsel-netbsd-gcc -shared -I../lib -o mil mil.c -lmgl2 -L/mnt/usr/pkg/lib -ljpeg -L/usr/pkg/lib -lungif -L../lib
とまあこんな感じで、エラったところは強引にコンパイルしました。 インストールする時、make install で一発で行くように conf/config.mk のライブラリ関係のパスを /mnt/usr/pkg/… とかしてしまったため、 いざモバギで mgl を動かした時 /mnt/usr… といったファイルを見にいってしまうため、 やりなおしになってしまいました。 というわけでコンフィグファイルを元に戻し手動でインストール。 あとフォントは要町をとってきて、それを使いたかったのだが、 その前に mgl_fontcreate の作成の段階で失敗してしまいます。 どうせフォントを作るだけならi386だろうがhpcmipsだろうが関係ないであろうと勝手に解釈をし、 そこだけi386上で作りました。 そして設定ファイルを適当に編集して、とにかくXを立ち上げる。 そして bin/ で hpcmips-make install-font とやればフォントを作ってくれます (もちろん一般ユーザではインストールに失敗するがかまわぬ)。 最後にかたっぱしから手動でインストールします(各Makefile参照)。

それではCFを umount してモバギを起動しましょう。 util/ にある mglcons.sh を実行すれば mgterm が起動するはずです。 (util/ 以下のファイルもインストールしておくといいのかな?) が、やはり失敗。

md_hpcmips init MD_INIT ERROR
とかいうエラーがでて動きません。 ま、ちゃんと(?)動いてくれているようで一安心です。 ソースを grep した結果、どうやら lib/md_hpcmips.h というファイルの MD_INIT() という関数でこけているようです。 要はマウスがないよんってことですか? dmesg で確認してみると wsmouse0 というのがきちんと認識されています。 おかしいと思ったら、/dev/ にデバイスファイルがありませんでした。 というわけで ./MAKEDEV wsmouse0 (ついでに wsmouse1 もしちゃいました)。 次は ttyE0 がないよんだとさ。 これも作ったら、ついに起動してくれました!! ログアウトすれば終了してくれます。 そこで root になって mgl_calibrate をすればスタイラスも使えます。 すげぇ。

問題点としては、やっぱり mil れませんでした(ToT)。 ちょっと強引すぎたようで、やりなおし。 あと、 jless が package では動きません。 なんとかってライブラリをリンクしないでコンパイルするといいそうです。 というわけで cross compile だ。 ていうか jless がないと本当に日本語が表示できるのか分からぬ。 あ、w3m とかでもいいのか。

crossできぬ

というわけで jess を cross compile してみました。 できません。 configure で ANCI C な header file でかたっぱしから no がでてしまいます。 最初は mipsel-netbsd なインクルードファイルを見に行ってないんだろうと思いましたが、 config.log を見てみると、見ています。 どうやら sys/cdefs.h の #error "No function renaming possible" とかいうところで全てひっかかってます。 こりゃ、ヘッダファイルが古いってことですか? i386の方なら問題なくコンパイルできるのに、くそぅ。 よう分からん。

crossできた

で、よう分からんまま月日は過ぎていったのですが(そんなにはたってません)、 ふと snapshot 置場にある mipsel-netbsd.tgz なる package に気がつき、 それを使ってみたらあっさりコンパイルできました。 やっとで jless ncurses なしが作れた! 日本語が読めるっ、読めるぞっ(ムスカ調)。

が、ここまで。 slnag はコンパイルできたものの、jed だめ、mutt だめ、w3m だめとダメダメ尽し。 でもカーネルの再構築はできます。 そこで最新のカーネルソースを取ってきて再構築したら、案の定うまく動かなくなりました。 白黒反転して、top などが使えなくなるという… よいこはまねしないようにね。

メインページに戻る
お帰りになる

Last-Modified: Fri, 29 Mar 02:36:34 2002 JST.
Yohei Terada (youhe@cherrylain.que.ne.jp)