| 1 |
<html lang="ja"> |
| 2 |
<head> |
| 3 |
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> |
| 4 |
<META name="date" content="2002-05-02T21:55:04+09:00"> |
| 5 |
<title>Build Userland</title> |
| 6 |
</head> |
| 7 |
<body> |
| 8 |
<h1>ユーザーランドの構築方法</h1> |
| 9 |
<p> |
| 10 |
ユーザーランドをコンパイルするために必要な情報を整理しました。<br> |
| 11 |
uClibc回りはうそがあるかもしれません。 |
| 12 |
</p> |
| 13 |
<hr> |
| 14 |
<h2>コンパイル環境の構築</h2> |
| 15 |
<p> |
| 16 |
基本的にはH8/300クロス開発環境です。 |
| 17 |
</p> |
| 18 |
<p> |
| 19 |
ただし、最終的に生成されるバイナリに再配置情報が必要なので、 |
| 20 |
binutilsにパッチをあてる必要があります。<br> |
| 21 |
その他、ライブラリの問題もあるので、違うターゲット名を指定するなどの方法で、 |
| 22 |
専用のコンパイル環境を作った方が後々楽が出来ると思います。 |
| 23 |
</p> |
| 24 |
<h3>binutils</h3> |
| 25 |
<a href="ftp://download.sourceforge.jp/uclinux-h8/228/binutils-2.11.2.patch">binutils-2.11.2.patch</a> |
| 26 |
2.12用はまだ作ってません。<br> |
| 27 |
コンパイル手順 |
| 28 |
<pre> |
| 29 |
$ tar xzf binutils-2.11.2.tar.gz |
| 30 |
$ cd binutils-2.11.2 |
| 31 |
$ patch -p1 < binutils-2.11.2.patch |
| 32 |
$ ./configure --target=h8300-hitachi-hms |
| 33 |
$ make |
| 34 |
</pre> |
| 35 |
<p> |
| 36 |
パッチをあてててから、H8/300のクロス開発用でビルドしてください。 |
| 37 |
configureのオプションは、環境に合わせて適当に変更してください。<br> |
| 38 |
objcopyとobjdumpにもパッチをあてていますが、必須ではありません。<br> |
| 39 |
libbfd.aとlibiberty.aは後で使います。削除しないで下さい。 |
| 40 |
</p> |
| 41 |
<h3>gcc</h3> |
| 42 |
普通にH8/300のクロスコンパイラとして作ってください。<br> |
| 43 |
<pre> |
| 44 |
$ tar xzf gcc-3.0.4.tar.gz |
| 45 |
$ cd gcc-3.0.4 |
| 46 |
$ ./configure --target=h8300-hitachi-hms \ |
| 47 |
--enable-languages="c,c++" --without-newlib |
| 48 |
$ make |
| 49 |
</pre> |
| 50 |
<p> |
| 51 |
newlibを使わないので、これでコンパイルできるはずです。 |
| 52 |
ただし、最近作っていないので、ひょっとしたら間違っているかもしれません。 |
| 53 |
</p> |
| 54 |
<h3>coff2f;t</h3> |
| 55 |
<p> |
| 56 |
coff → Flat Binaryのコンバータです。uClinuxはCOFFのバイナリを読めないので、 |
| 57 |
これを使って読めるフォーマットに変換します。 |
| 58 |
</p> |
| 59 |
<p> |
| 60 |
ソースは、 |
| 61 |
<a href="http://www.uclinux.org/pub/uClinux/misc/CD-130999/coff2flt-0.5.tar.gz"> |
| 62 |
coff2flt-0.5.tar.gz</a>にあります。<br> |
| 63 |
で、これはm68k用なので、H8/300用のパッチが必要です。<br> |
| 64 |
<a href="ftp://download.sourceforge.jp/uclinux-h8/229/coff2flt-0.5.patch">coff2flt-0.5.patch</a> |
| 65 |
</p> |
| 66 |
コンパイル手順 |
| 67 |
<pre> |
| 68 |
$ tar xzf coff2flt-0.5.tar.gz |
| 69 |
$ cd coff2flt-0.5 |
| 70 |
$ patch -p1 < coff2flt-0.5.patch |
| 71 |
(LDFLAGSを修正) |
| 72 |
$ make |
| 73 |
</pre> |
| 74 |
<p> |
| 75 |
単純にコンパイルすると、 |
| 76 |
システムに標準で用意されているBFDライブラリをリンクしてしまうので、 |
| 77 |
makeする前に、H8/300用のBFDライブラリがリンクされるように、 |
| 78 |
LDFLAGSを修正します。<br> |
| 79 |
これを忘れると使えないcoff2fltが出来てしまうので、注意してください。 |
| 80 |
</p> |
| 81 |
<p> |
| 82 |
よくわからない場合は、binutils-2.11.2/bfd/libbfd.aと |
| 83 |
binutils-2.11.2/libiberty/libiberty.aをcoff2flt-0.5にコピーして、<br> |
| 84 |
LDFLAGS = -L ./ -lbfd -liberty<br> |
| 85 |
と、修正してからmakeすれば、通るはずです。 |
| 86 |
</p> |
| 87 |
<br> |
| 88 |
おまけで、コンパイル済みバイナリを置いておきます(i386/glibc2.1)。 |
| 89 |
どうしても動かない場合は、使ってください。<br> |
| 90 |
<h3>genromfs</h3> |
| 91 |
ROMFSを使わなければ不要です。<br> |
| 92 |
H8/300用パッチはありません。その辺からダウンロードしてきてコンパイルしてください。<br> |
| 93 |
ここにも |
| 94 |
<a href="http://www.uclinux.org/pub/uClinux/misc/CD-130999/genromfs-0.3.tar.gz"> |
| 95 |
genromfs-0.3.tar.gz</a>があります。 |
| 96 |
探せば、パッケージもあると思います。 |
| 97 |
<hr> |
| 98 |
<h2>ライブラリの構築</h2> |
| 99 |
uClibcを使います。<br> |
| 100 |
<p> |
| 101 |
<a href="http://www.uclibc.org/downloads/uClibc-0.9.9.tar.bz2"> |
| 102 |
uClibc-0.9.9.tar.bz2</a>を、ダウンロードしてください。 |
| 103 |
</p> |
| 104 |
<p> |
| 105 |
もっと新しいのも出ていますが、全然テストしていないので(ごめんなさい)、 |
| 106 |
動くかどうかわかりません(0.9.10はコンパイル出来ません。0.9.11は未確認)。<br> |
| 107 |
ただ、0.9.9もptraceがバグ付なので、 |
| 108 |
ptrace.cはCVSの最新と入れ換えた方がいいと思います。 |
| 109 |
</p> |
| 110 |
コンパイル方法は、readmeを読んで下さい。 |
| 111 |
おおよその手順は、 |
| 112 |
<ol> |
| 113 |
<li>extra/Configs/Config.h8300をトップディレクトリにConfigという名前で |
| 114 |
コピーしてください。 |
| 115 |
<li>Configの変数を環境に合わせて変更してください。 |
| 116 |
<table> |
| 117 |
<tr><td>CROSS</td> |
| 118 |
<td>クロスコンパイラのプレフィックス(H8300-hitachi-hms-とか)</td></tr> |
| 119 |
<tr><td>KERNEL_SOURCE</td> |
| 120 |
<td>カーネルソースのディレクトリ名</td></tr> |
| 121 |
<tr><td>DEVEL_PREFIX</td> |
| 122 |
<td>ヘッダ、ライブラリ、コンパイラドライバのインストール先</td></tr> |
| 123 |
</table> |
| 124 |
とりあえずこの3つを環境に合わせて設定すればライブラリは出来るようです。 |
| 125 |
<li>make |
| 126 |
<li>rootになってmake install |
| 127 |
</ol> |
| 128 |
ということらしいです。<small>実はよくわかっていない所がある</small><br> |
| 129 |
<p> |
| 130 |
newlibを使っている場合は、上書きしてしまわないように注意してください。 |
| 131 |
</p> |
| 132 |
<p> |
| 133 |
h8300-uclibc-gccとh8300-uclibc-ldというドライバが出来るので、 |
| 134 |
これを使うと楽できるのかもしれませんが、私は使っていないので、よくわかりません。<br> |
| 135 |
オプションを自動的に追加してくれるようです。 |
| 136 |
</p> |
| 137 |
これで、ユーザーランドのコンパイル環境は完成です。 |
| 138 |
<hr> |
| 139 |
<h2>コンパイル方法</h2> |
| 140 |
準備が終わったので、やっと本題のコンパイル方法に入れます。<br> |
| 141 |
基本的には、他のアーキテクチャと同じ手順でコンパイルできます。 |
| 142 |
m68kの情報も参考になると思います。<br> |
| 143 |
流れとしては、 |
| 144 |
<ol> |
| 145 |
<li>コンパイル |
| 146 |
<li>リンク |
| 147 |
<li>FlatBinaryへ変換 |
| 148 |
</ol> |
| 149 |
です。普通のH8/300クロス開発とほぼ同じです。<br> |
| 150 |
<h3>コンパイル</h3> |
| 151 |
<p> |
| 152 |
ごく普通にコンパイルしてください。<br> |
| 153 |
このとき、いくつかのオプション指定が必須になります。<br> |
| 154 |
-mh -mint32 -fsigned-char -Wl,-embedded-relocs(リンク迄行う場合)<br> |
| 155 |
付けなかった場合、ライブラリ、カーネルとの整合性が取れなくなって、 |
| 156 |
妙なことが起きるかもしれません。 |
| 157 |
</p> |
| 158 |
<h3>リンク</h3> |
| 159 |
<p> |
| 160 |
gccを使ってリンクする時は、同じく、<br> |
| 161 |
-mh -mint32 -fsigned-char -Wl,-embedded-relocs(リンクする場合)<br> |
| 162 |
を指定してください。<br> |
| 163 |
ldを直接呼ぶ場合は、<br> |
| 164 |
-m h8300h --embedded-relocs<br> |
| 165 |
を指定してください。<br> |
| 166 |
忘れると、再配置情報が生成されません。 |
| 167 |
</p> |
| 168 |
<h3>FlatBinaryへ変換</h3> |
| 169 |
<p> |
| 170 |
coff2fltでFlatBinary形式に変換します。使い方はhelpを見ればわかると思いますが、<br> |
| 171 |
$ coff2flt -o 出力 入力<br> |
| 172 |
です。 |
| 173 |
</p> |
| 174 |
<hr> |
| 175 |
<h2>イメージファイルの作り方</h2> |
| 176 |
出来上がったプログラムを持っていくには、今の所、 |
| 177 |
<ul> |
| 178 |
<li>ROMFSのイメージに入れる |
| 179 |
<li>NFSでサーバーのディスクをマウント |
| 180 |
</ul> |
| 181 |
という手段しかありません。<br> |
| 182 |
で、このイメージの作り方を簡単に説明します。 |
| 183 |
<h3>作成方法</h3> |
| 184 |
<ol> |
| 185 |
<li>適当なディレクトリをルートにして、/bin,/dev…の各ディレクトリを作成します。<br> |
| 186 |
雛形代わりに、テスト用ルートイメージの元を用意しました。参考にしてください。 |
| 187 |
<li>ファイルを適当に配置します。 |
| 188 |
<li>genromfsで、ファイル形式に変換します。<br> |
| 189 |
$ genromfs -f 出力ファイル名 ルートディレクトリ名<br> |
| 190 |
で、変換できます。 |
| 191 |
</ol> |
| 192 |
で、出来上がったファイルを、それなりの場所に読み込んで起動すると、 |
| 193 |
マウントされて、中が見えるようになります。 |
| 194 |
<h3>注意事項</h3> |
| 195 |
当然のごとくサイズの制限があります。現在は、最大448KBです(半端だ)。<br> |
| 196 |
ロードアドレスとサイズは、ldscriptで指定しているので、カーネルのサイズ、 |
| 197 |
起動後の空きメモリ容量と相談して、指定をを変更してください。<br> |
| 198 |
arch/h8300/platform/h8300h/aki3068net/ram.ldの<br> |
| 199 |
rdisk : ORIGIN = 0x4A0000, LENGTH = 0x70000<br> |
| 200 |
です。 |
| 201 |
修正した場合は、uramセクションの指定も修正してください。<br> |
| 202 |
本当は、カーネルコンフィグレーションで変更できるようにしたいんですが、 |
| 203 |
まだ、そこまで手が回りません。 |
| 204 |
<h3>おまけ</h3> |
| 205 |
カーネルにイメージファイルをリンクしてしまえば、限界までメモリを有効利用できます。 |
| 206 |
かわりに、ファイルサイズの肥大化により、ダウンロード時間が延びてしまいますが。<br> |
| 207 |
それでもいいという人は、以下の作業を行ってください。リンクできるようになります。<br> |
| 208 |
<ol> |
| 209 |
<li>objファイルに変換<br> |
| 210 |
h8300-hitachi-hms-objcopy --adjust-vma=0x88000 --adjust-arch=h8300h \<br> |
| 211 |
--adjust-mach=2 --add-section .rootimg=ルートイメージ(バイナリ) \<br> |
| 212 |
--remove-section .data -I binary -O coff-h8300 ルートイメージ(バイナリ) \<br> |
| 213 |
ルートイメージ(オブジェクト)<br> |
| 214 |
という、呪文のようなコマンドで、バイナリをobjに変換できます(要パッチ)。 |
| 215 |
<li>ldscriptの変更<br> |
| 216 |
MEMORYセクションのrdisk,uramを削除して、 |
| 217 |
OUTPUTセクションのrdisk,uramの指定をramに変更してください。 |
| 218 |
<li>生成されたイメージのobjをリンクされるように変更する。 |
| 219 |
makefileか、ldscriptを修正して、リンクされるようにしてください。 |
| 220 |
</ol> |
| 221 |
この修正を行った後、カーネルを構築すれば、イメージがリンクされるはずです。<br> |
| 222 |
うまく行かない場合は、arch/h8300/platform/generic/rom.ldを参照してください。 |
| 223 |
<hr> |
| 224 |
<h2>最後に</h2> |
| 225 |
<p> |
| 226 |
以前に書いた文章を、もう少しわかりやすくした…つもりですが、 |
| 227 |
あまり変わっていないような気が…。 |
| 228 |
</p> |
| 229 |
<p> |
| 230 |
uClinuxとH8/300Hに固有な部分はそれほど無い(はず)なので、 |
| 231 |
他のアーキテクチャでのクロスコンパイルの情報を参考にすれば、 |
| 232 |
何とかなるんじゃないかと思ってます。 |
| 233 |
</p> |
| 234 |
<p> |
| 235 |
ということで、誰かBusyBoxをコンパイルしてください。あれが動けば、 |
| 236 |
ユーザーランドの構築がだいぶ楽になりそうなので。 |
| 237 |
</p> |
| 238 |
<p> |
| 239 |
各種指摘・質問・「書き直してやったぞ」というありがたい報告等は、 |
| 240 |
出来れば<a href="https://sourceforge.jp/mail/?group_id=35">ML</a> |
| 241 |
に送ってください。<br> |
| 242 |
特にuClibcのところ。 |
| 243 |
<p> |
| 244 |
<hr> |
| 245 |
<a href="http://sourceforge.jp/projects/uclinux-h8/">Project Page</a><br> |
| 246 |
<address><a href="mailto:ysato@users.sourceforge.jp">Yoshinori Sato</a></address> |
| 247 |
</body> |
| 248 |
</html> |