Develop and Download Open Source Software

Browse CVS Repository

Contents of /uclinux-h8/htdocs/userland.html

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download) (as text)
Thu May 2 14:27:08 2002 UTC (21 years, 10 months ago) by ysato
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/html
update

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 &lt; 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 &lt; 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>

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26