uClinux for H8/300H Project Homeへ、移転しました。
uClinuxをH8/300Hに移植しました。
現在はGDBのシミュレータ上で動作しています。
秋月の H8/3068ボードでの起動に成功しました。
H8/3068ボードでの起動方法
シングルユーザーでshが起動するようになりました。
コマンドの実行も出来ます。
マルチユーザーモードでログイン出来るところまでたどりつきました。
長い道のりだった…。
uClinux for H8/300H Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne Calibrating delay loop.. ok - 5.12 BogoMIPS Memory available: 3832k/4080k RAM, 515k/1024k ROM (2296k kernel data, 509k code) Swansea University Computer Society NET3.035 for Linux 2.0 NET3: Unix domain sockets 0.13 for Linux NET3.035. Swansea University Computer Society TCP/IP for NET3.034 IP Protocols: ICMP, UDP, TCP uClinux version 2.0.38.1pre3 (ysato@vc6300cb1) (gcc version 2.95.3 20010315 (release)) #286 2002年 1月23日(水) 02時18分59秒 JST Hitachi SCI driver version 0.01 hitachi-sci.c(1465): info=2178fe num=0 ttySC0 at 0xffffb0 (irq = 52 - 55) hitachi-sci.c(1465): info=217a02 num=1 ttySC1 at 0xffffb8 (irq = 56 - 59) hitachi-sci.c(1465): info=217b06 num=2 ttySC2 at 0xffffc0 (irq = 60 - 63) Ramdisk driver initialized : 16 ramdisks of 4096K size Blkmem copyright 1998,1999 D. Jeff Dionne Blkmem copyright 1998 Kenneth Albanowski Blkmem 1 disk images: 0: 82496-9E895 (RO) PPP: version 2.2.0 (dynamic channel allocation) TCP compression code copyright 1989 Regents of the University of California PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. PPP line discipline registered. SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256). CSLIP: code copyright 1989 Regents of the University of California. Open of blkmem arena 0 at 82496, length 1c400 VFS: Mounted root (romfs filesystem) readonly. init: Booting to single user mode. # hello Hello World #
BogoMIPSはクロック16MHz(16bit bus/2cycle)で計算しています。
uClinux for H8/300H Project Home
に、引っ越します。流浪のページですね。
ここの内容は古文書状態になってます。最新情報は↑。消すのは面倒なので残しておきます。
TCPとUDPのチェックサムを間違えるバグが見つかりました。
include/asm-h8300/checksum.hをCVSの最新版に入れ換えてください。
これでネットワークがまともにつながるようになります。
今後、開発ネタは、
uClinux for H8/300H Project Homeに持っていきます。
ここのドキュメントは古くなってきてるし…。
メモリリークの原因がわかりました。
なんで動くんだぐらいのバグなので、パッチを作りました。
uClinux-H8-020429.diff.gzです。
ネットワークは安定しました。簡単に負荷テストを行ってみましたが、
問題なく動いてます。
ネットワークが使えるようになりました。
ただ、どこかでメモリリークしてるらしいので、そのうち死んでしまいます。
RTL8019ASがneドライバで見えるようになりました。
設定関係がやたら不安定なので、まともに動いているとは思えませんが。
sourceforge.jp
にプロジェクト登録したので、ソースがほしい人は、
CVSから持っていってください。
プロジェクトホームはまだ出来てません。
21日の分は、uclinux.orgにも入っています。
カーネルのパッチを更新しました。 秋月ボードで動いているものです。 H8/3068ボードでの起動方法 のページから持っていってください。
またまた久々の更新です。近況報告的な更新ですが、
実機での起動を確認しました。
H8/3068ボードでの起動方法
H8/300Hのクロスコンパイラとして必要です。カーネルをコンパイルする場合は、
2.95.3が必要です。
2.95.2と3.0.1では、コンパイルしても動かなかったらしいです。
バージョンは特に関係ありませんが、ユーザーランドを作成する時にパッチが
必要になります。
2.11.2のパッチしか用意していないので、それ以外のバージョンを使う場合は、
自力で何とかしてください。
これもパッチが必要です、5.0以外を使う場合は、自力で何とかしてください。
ユーザーランドをコンパイルする時に使用します。
m68k版のuClinuxに同じ名前のユーティリティがありますが、互換性がありません。
h8300-coff用にコンパイルする必要があります。
ルートイメージを作る時に使います。他で使っている場合は、そのまま使えます。
普通のH8/300クロスコンパイラとして構築してください。
uClinuxではnewlibを使わないので、newlibは必要に応じてコンパイル
してください。
$ tar xzf binutils-2.11.2.tar.gz
$ cd binutils-2.11.2
$ patch -p1 < binutils-2.11.2.patch
$ ./configure --target=h8300-hitachi-hms
$ make
:
:
という風に、パッチを当てた後H8/300用で構築してください。
ld/BFDライブラリ/objcopy/objdumpにパッチを当てていますが、objcopy/objdumpの
パッチは必須ではないので、いらない場合は適当に直してください。
$ tar xzf gdb-5.0.tar.gz
$ cd gdb-5.0
$ patch -p1 < gdb-5.0.patch
$ ./configure --target=h8300-hitachi-hms
$ make
:
:
という風に、パッチを当てた後H8/300用で構築してください。
$ tar xzf coff2flt-0.5.tar.gz
$ cd coff2flt-0.5
$ patch -p1 < coff2flt-0.5.patch
(ここでMakefileを修正する)
$ make
:
:
という風に、パッチを当てた後makeするとシステム標準のlibbfdとlibibertyが
リンクされてしまうという落とし穴があります(半日悩んだ)。
パッチを当てたら、MakefileのLDFLAGSを修正して、coff-h8300のlibbfdとlibibertyが
リンクされるようにしてください。
よく分からない場合は、binutilsをmakeしてから、binutils-2.11.2/bfd/libbfd.aと
binutils-2.11.2/libiberty/libiberty.aをコピーして、
LDFLAGS = -L ./ -lbfd -liberty
と変更してから、リンクしてください。
パッチは無いので、普通に構築してください。
パッケージになっている物があったような気がするので(rpmはどこかで見た記憶有り)、
よく分からない場合は、探してきてインストールした方が早いかも。
gcc/binutils/gdbは、ごく普通のクロス開発環境の構築なので(パッチがあるけど)、 よく分からない場合は、もっと親切に書いてあるページを探してください。
先頭に戻る
$ tar xzf linux-2.0.38.tar.gz
$ cd linux-2.0.38
$ zcat ../uClinux-2.0.38.1pre7.diff.gz | patch -p1
$ zcat ../uClinux-H8-020203.diff.gz | patch -p1
これでuClinux-h8のソースツリーが展開されます。
注:以前公開したパッチとはファイルの配置が違うので、かぶせることは出来ません。
おまけ(CVS版)
2月4日以降のパッチは、CVS最新版用に作ってあるので、CVSから最新ソー
スツリーを取ってきてパッチを当ててください。持ってくる方法は、
ここに書いてあります。
パッチがRejectされたら、自分でなんとかしてください。ついでに連絡
をもらえるとうれしかったりします。
$ make {,menu,x,old}config
$ make dep
$ make clean
(rootimage.oをコピー)
$ make all
で、コンパイルできます。linuxが出来上がったカーネルです。
cleanでrootimage.oも消えるので、
cleanが終わってからコピーしてください。
注1:最後のターゲットはallを指定してください。それ以外を指定してもコンパイル
出来ません。
注2:デフォルト以外のコンフィグレーションはぜんぜんテストしていないので、
変更する場合は、注意してください。
注3:標準の設定で、デバッグ情報を生成するようになっています。
そんなもんいらんわ、という人はarch/h8300/Rules.makeのCLFAGSの-gを
削除してください。
ここから先の手順は、私もよく分かっていません。 uClibcに詳しい人は、どんどん突っ込んでください。
インストールの所は実際にやってないので、かなりあやしい物があります。 間違って標準のlibcを上書きしないように注意してください。
先頭に戻るuClibcを構築すると、h8300-uclibc-gccというコンパイラドライバが出 来るので、使うと楽できるかもしれません。
この辺になるとH8に依存する部分はほとんど無いので、
uClinuxで調べれば大概の問題は解決すると思います。
というか、この辺はぜんぜん分からないので、H8に固有の問題以外は書けません。ごめんなさい。
uCsimmのユーザーランドが、
uC-src-0.9.1.tar.gz
にあったので、取ってきてコンパイルしてみました。
ライブラリのバージョンがあわないので、#includeとMakefileを直した
ら、、ipfwadmとboottools以外はコンパイルできました。
(boottoolsはuCsimm専用なので無理、ipfwadmはIP Masquarade入れれば
通るんじゃないかと思う)
initとshは実際に動いています。
$ genromfs -f 適当な名前 ルートにしたディレクトリで、イメージファイルを作ってください。
ルートイメージの雛型として、テストに使っているルートイメージの元を 置いておきます。
先頭に戻る
で、作ったルートイメージをカーネルにリンクする必要がありますが、genromfsが吐き出すファイルは生バイナリなので、そのままリンクできません。
力技で.oに変換できないことも無いですが、めんどくさくなったので、objcopyで変換できるようにしました。
h8300-hitachi-hms-objcopy --adjust-vma=0x88000 --adjust-arch=h8300h \ --adjust-mach=2 --add-section .rootimg=ルートイメージ(バイナリ) --remove-section .data \ -I binary -O coff-h8300 ルートイメージ(バイナリ) ルートイメージ(オブジェクト)
という(長い)コマンドで、.oに変換できます。
出来上がった.oファイルをカーネルソースのトップディレクトリにおいて、
makeすると新しいルートイメージの組み込まれたカーネルが出来上がります。
ルートイメージを別に持ちたい。という要望は多数出そうなので、どこを変更すればいいかというお話です。
drivers/block/blkmem.cが、ROMFSのドライバで、ルートイメージはここの管理下に
置かれています。
で、area_t構造体が、ディスクイメージのアドレスを管理する構造体なので、
ここの初期値を適当に修正してしまえば、どこでも自由に配置できます。
現状は、.rootimageセクションに配置されたデータが、ルートイメージということ
になっています。詳しいことは、blkmem.cと
arch/h8300/platform/h8300h/generic/rom.ldを見てください。
$ h8300-hitachi-hms-gdb linux
(gdb) target sim
SCI0=ttya0
(gdb)
秋月のボードは購入資金を用意しているうちに売り切れてしまったので、
次回入荷待ちです。
自分で作るという選択肢もありますが、
手間を考えると出来ている物を買った方が早そうなので待ちます。
もっとも、ブートローダーの準備がまだ出来ていないので、
物があってもすぐにはテストできません。
次は5月らしいので、それまでには準備できるでしょう。
作業開始から1年、ようやく動きました。
上の項目とも関係がありますが、最低限ne.cは動かしたいところです。
回路図はあるので、コンパイルが通るぐらいのところまではいじれると思いますが。
neの移植が終わりました。割り込みまわりを直したら動いてしまったので、
何もしていないのと同じですが(笑)。
内蔵のI/O用ドライバも用意したいところです。
いまのコードでも動くはずですが、H8Sの拡張機能を使えるようにしたいので。
実機を用意できるかどうかが問題です。
世の中の流れ的にはこっちなので(uClinuxもH8以外みんなELFになっている)、
適当なところで移行しないと・・・
時期的にはbinutils-2.12(になるのか)がリリースされたら移ろうと思っています。
| 2001年10月10日 | 公開 |
| 2002年 1月27日 | いろいろ更新(カーネル、ライブラリ、ユーザーランド) |
| 2002年 1月28日 | rootimage.o → rootimage.o.gzに変更。少し書き足した。 英語ページ公開。 超訳なので、誰か査読してください。 |
| 2002年 1月30日 | uClibc-0.9.8パッチ公開。0.9.5のほうもしばらく残します。 ページレイアウトを少し修正。 |
| 2002年 2月 2日 | カーネルパッチ更新。シグナルが腐ってました。 |
| 2002年 2月 3日 | カーネルパッチ更新。execveが遅いのを直しました。 念のため、昨日のバージョンも残しておきます。 読めないプログラムがあったら、試してみてください。 2.0.38.1pre7ベースのパッチは、致命的な問題がなければ、 これで終わりにします。 少し直したらCVSに入れてもらうので、 そっちを見てください。 |
| 2002年 2月 4日 | coff2flt-0.5.patch更新。
表示を少し変えただけなので、
無理に更新する必要はありません。 カーネルCVS最新用のパッチを追加。 uclinux.orgにも送ってあるので、 そのうちマージされるでしょう。 uClibcが本家にマージされました。 最新スナップショットからパッチは不要になります。 ということで、0.9.5の記述を削除しました。 ふと気がついたら、3日連続で更新している・・・。 |
| 2002年 2月12日 |
カーネルパッチ更新(CVS先頭)を追加。 ptraceが使えるようになります。&シグナル まわりを修正しました。 ptraceは実験的な実装です(仕様を満たしているか どうかよくわからない)。おかしな所があったら、 指摘してください。何も来ない場合は、今の実装を H8バージョンの仕様にします。 いつの間にか(おい)uClibcの0.9.9がリリース されていたので、uClibcの部分を更新。パッチを更新 (と言うより追加?)しました。 2.0なカーネルの移植はだいたい終わりかなと 思っているところです。実機に載せるのが 残っていますが、秋月のNIC付き3067ボードが 出るまで待ち状態です。 しばらく謎作業するので、 何もなければ更新しません。 また長くなったな・・・別なところに 書いたほうがいいかな・・・ |
| 2002年 2月13日 | しばらく更新しないとか言っておきながら、
次の日に更新してるし・・・ カーネルのコンパイル方法のところで書き 忘れていることがあったので、追加しました。 ついでにCVS版の説明も少し書きました。 今度こそしばらく更新しません(多分・・・) |
| 2002年 3月 9日 | 予告通り久々に更新。
久々に更新しました。ページレイアウトをいろいろいじってあります。
uClinux.orgにて、
Source Distribution
が公開されています。カーネルソース・ライブラリ・ユーザーランドが
まとめられているので、これを使った方が楽でしょう。
H8/300H差分のCVSへのマージ作業が完了しました。最新版がCVSから取得出来ます。
ということで、カーネルとライブラリの差分は基本的に作りません。
必要な時は、CVSから持ってきてください。
需要があったので、H8/3048他対応のコードを入れました。ただし全然テストしてません。
calibrate_delayの辺りが山。 |
| 2002年 4月20日 | またまた久々の更新。 実機で起動しました。 準備にえらく時間がかかりましたが。 ちなみに、移植を開始してからちょうど1年です。 (あれ、1〜2日前だったか?まあ、おおよそということで) しばらくは更新頻度をあげられると思います。 |
| 2002年 4月21日 | パッチを作りました。 次はne.cの移植かな。 |
| 2002年 4月23日 | neまわりを追記。 sourceforge.jpアナウンス追加 |
| 2002年 4月28日 | ne移植完了。ifattachにくるしめられた。 つぎはmmnommuまわり。安定させないと。 |
| 2002年 4月29日 | 結構致命的なバグを発見。よく動いてたな。 直したら、メモリ管理は安定したような気がする。 |
| 2002年10月 9日 | 半年ぶり。ここは捨てます。 |