09年2月19日 開発環境を整える あれから10日空きました(^^; eCos/RedBootの修正を再実施しようと思ったけれど、ここで頑張るのはあまり意味が無いという結論に達したため、公開されているバイナリパッケージをDLして使用する事にしました。 で、自分で作成した4MB用eCos/Redbootとuclinuxを構築して、焼きこみ&起動完了。 一通りuclinuxが作動することが分かったので、次はデバッグ環境に取り組むことにしました。 まず、本に記載されているinsiightを使って見る。 デバッグ付きでビルドしたeCos/Redboot用アプリを起動。が、「libtermcap.so.2」が無いと怒られる。 いろいろ、調べて見ると 「ldso」と「libc5」と「termcap-compat」をインストールすれば使えるらしい。 aptitudeでパッケージを探すと、どれもそれらしいものが存在しない。 webで調べてとりあえず「ldso」は「ld.so.preload-manager」をaptitudeでインストール。「libc5」は「libc6」がすでにインストール済みだったので、何もせずに放置。「termcap-compat」はdebianのサイトからパッケージ「Termcap-compat_1.1.0.deb」をDLしてインストール。 で再度、insightを起動。画面が表示される。結局2つインストールしたどちらが効いたのかは不明だけれど「Termcap-compat_1.1.0.deb」のような気がする。 09年2月9日 AKI H8/3069NETボードで遊ぶ の続き tftpd-hpaがこけてから、Debianの再インストールを実施。 前回はパーテーションを分けてインストールしていたけれど、今回はすべて同じパーテーションにインストール。 ブラウザ等等もインストールし、gccも構築。 前はデスクトップをKDEにしていたけれど、Eclipseを使うし、どうも標準の流れがGNOMEっぽいので、今回はGNOMEメイン。 いろいろ使い勝手がKDEと異なるので戸惑いながらも何とか初期設定的なものは完了。 早速tftpとnfsを設定。tftpは前回hpaで上手くいかなかったので今回はtftpdを使用。nfsはインストール時のパッケージ選択ですでにインストールされていたので、tftpdのみaptitudeで取得。 設定はHPで方法を調べて実施。設定が完了したので、tftpdでカーネルをDLして起動…動かない。 調べて見るとeCos/RedBootのバグ?でelfファイルのloadが上手く言ってない様子。 バグのあるソースを修正して、eCos/RedBootを4MBRam設定で再構築する必要があるとのこと。 なんだかめんどくさそうなので、後回しにして先にEclipseをインストールすることに。 本家からEclipseCDTのパッケージをDL、解凍して起動させると、JVMの1.5以上が必要と怒られる。 しょうがないのでSUNからJavaSEをDLしてインストール、というよりDLした実行ファイルを実行。 許諾契約っぽいものを読んでyesを実行するとそのまま解凍。 インストールされたかな!?と思ってEclipseを実行するとやっぱりJVMが無いと怒られる。 現在のシステムを調べると、どうやら「/etc/alternatives/java」のリンク先を変更する必要があるっぽいことがわかったので、DLしてきたJVMの「java」ファイルへリンク先を変更して、eclipseを起動、おっ動いた〜♪ でも英語…。 どうやら日本語パッチがあるようなので、早速DLしてREADMEを読む。DLした日本語化キットのpluginとfeaturesフォルダ内のファイルを、インストールしたeclipseの同盟フォルダへコピーすれば良い様子。早速実施して、eclipseを再起動させたところバッチリ日本語〜♪ さて、次は戻ってeCos/RedBootを何とかせねば。 09年2月5日 AKI H8/3069NETボードで遊ぶ の続き Eclipsでソフト開発をする予定ですが、 その前にAKI H8-3069NETボードが手に入ったので、組み立てることに。 前にuclinuxを動かしたときは、カーネルの起動と同時にメモリーが足りなくなっていたのでとりあえず増設。 4MBになったところで、動作テスト。 eCosは4MB対応版をFlashへ書き込み。 uclinuxのカーネルはnfsでマウントするため、hostの設定を開始。 ちょうどウチには常時稼動マシンとして玄箱があるので、玄箱のdebianへnfsとtftpサーバーをインストール&設定。 tftpは「tftp-hpa」、nfsはnfs-kernel-serverが使いたかったんだけれど、linuxのkernelが対応していないって 起こられてしまったので 「unfs3」で実施して見ることに。 あっちこっち、設定して完了。 H8/3069NETからtftpでカーネルをload OK で、ブートコマンドを入れてブートしたものの…、nfsのマウントに失敗…。 error 13 しょうがないのでhostを変更、通常のパソコンに nfsとtftpdをインストール。 aptitudeでインストールしたところtftpd-hpaが調子悪く…。 aptitude で remove も reinstall もできなくなった=どうにもならないのでHOSTのdebianを再インストールすることに。 というわけで、今日はココまで。 tftpd-hpaのせいでだいぶ後戻りだ…ぅぅぅ。 09年2月2日 AKI H8/3069NETボードで遊ぶ の続き 昨日コンパイル完成したh8300-elf-gccが正常に動くかテスト。 ダウンロード済みのeCos/RedBootに対して、ecosconfig実施後 make。 あれ、昨日gccをコンパイルする際に出た、アセンブラコードの認識不良によるエラーメッセージと似たような結果が表示されるぞ…。 で、検索をする。 どうもbinutilの--prefix指定先と、gccの--prefix指定先が違うことが原因の様子。 Makefileをいじるなんて強引なことをしたのがいけなかったのかな…。 改めて「--prefix」指定先を「/usr/local/bin/h8300-elf/」に統一して実施。 順番にmake、コンパイル完了。 で、再度eCos/RedBootをmake、やったバッチリmakeできた◎ そんなわけで記念の記録
09年2月1日 AKI H8/3069NETボードで遊ぶ せっかくいろいろいじりだしたので日記の意味で記録を残すことに。 どこまで続くか分かりませんが。 「はじめる組み込みLinux」 を去年購入したので、ぼちぼちいじり始める。 とりあえず、本に載っていた内容を順番に進め、eCos/RedBootを書き込み。 問題なく動作する。 続けてuclinuxを試す。 本にしたがってTFTPを立ち上げ、構築したカーネルを呼び出してみる。 NFSの呼び出しに失敗して、カーネルパニック…。 NFSの設定を見直したところ、一部間違っていたところがあったので直して再起動。 uclinuxがとりあえず起動。起動中からメモリーが足りないと表示されたけれど、まぁ気にしない気にしない。 ↑ココまでは1月中に実施。 ここまで順調に進んだので、次はeCos/RedBootを自分で構築したいと思い出し、本を参考に実施。 redbootの構築にはuclinux用のgccは使用できないらしい。 どうせなので、gccも自分で構築して見るかと思い、ネットをあさる。 eCos/RedbootのH8/300移植のプロジェクトHP「eCos/RedBoot for H8/300」に掲載されている 佐藤氏の手順にしたがって準備する。 とりあえず、必要なものは ・binutils-2.12.1.tar.gz ・gcc-3.1.1.tar.gz ってことなので、webをあさって入手。 記載されている公式の手順に従って、構築を始める。 binutilsはconfigure→make→make install は特に問題なし。 続けてgcc こちらもそのまま実施。 DLしたパッケージを解凍して、公式HPからDLしたパッチを当てて、configure→make あれれ、Errorが出てしまう…。 エラーは
なんだか左辺のインクリメントがおかしいらしい。 エラーの発生元を探る。どうやら「obstack.h」内が原因の様子。 どうすれば良いか分からないけれど、適当にいじってみる。 とはいえ、linux自体はじめたのが去年の12月。どうすれば良いかまったく分からず途方にくれる。 そもそも #define宣言の書き方自体が見慣れた書き方じゃない…。 ナゾだと思いつつ、いろいろいじり倒して見る。 void**をchar**に変更するなどなど、繰り返しつつmake。上手く行かない。 半分あきらめモードになりながらソースを眺めていると、どうやら#ifで別の部分が実行されている様子 たどっていくと見慣れた#define宣言が。とはいえやっぱりどうしたものか…。 その後も色々いじった結果、好転せず。あきらめモード…。 でも、あきらめきれずHPを検索。 すると、修正方法っぽいことが記載されているブログを発見。 どうやら引っかかっていた部分を修正するdiffファイルの断片っぽい。 ためしにその内容を適用して見る。おっ進んだ!! 変更したのは「obstack.h」
どうやら ++ = となっているのがよろしくないらしい。 =の適用を先に実施して、++は次の行で +=として実施すればOKになった。
エラーの内容は
左辺への適用ができないらしい。なんかさっきも同じようなことがでたなぁ、と思いつつソースを見る。 さっきと様子が違う。さすがに同じようには修正できないっぽい。 しょうがないので、修正方法を再び探すと、さっき見つけた修正箇所が記載されていたブログの同じところ。 というか、適用しなかった残りのdiff修正箇所が該当することが判明。 同じように修正したら無事に通過〜♪ 変更したのは「decl.c」
結構進むようになったなぁと思っていたら、また止まる。 エラーの内容は
いろいろwebで調べたところ、どうも先にインストールしたbinutilsが上手く適用されていないため アセンブラで記述されてるソースコードを上手く処理できないのが原因の様子。 binutilsをインストールするときに「--prefix」でインストール場所を指定したのがまずかったっぽい!? いろいろ考えた結果 1.とりあえず「h8300-elf-gcc」は「はじめる組み込みLinux」に掲載されていた内容から入手しているので なくても大丈夫といえば大丈夫。 2.--prefixを指定せずにbinutilをインストールすると上記で取得したgccに悪影響が出たらやだなぁってことで あきらめることに。 で、とりあえず作業終了ということでパソコンをシャットダウン。 小一時時間ほどたって、 改めてこのページを書くために、エラーメッセージの詳細が欲しく、makeを実施。 あれ!?makeが通ったぞ? おかしいなと思い、 Makefileの内容をチェック あ、「--prefix」を指定してなかった。 で指定して見る。 あ、同じエラーが出た。 ということはMakefileをどうにかすれば良いのか。 で探して見ると
うわー、すごくそれっぽい なのでココをちょっと変更
この状態で、再度make おっ、ばっちりだ〜♪ あとは、作ったgccでeCos/RedBootをmakeして、AKI H8/3069NETボードへインストールして実験だ。 余談: ココまでいろいろいじっていいて、ふと思った。 昔この状態でリリースされていて、問題なく動いていたということは、このソースをコンパイルしているhostのgcc が新しくなっているため、コンパイルエラーが出ている!? ためしに、最新のgccのソースコードをあさって見る。 修正した「obstack.h」 の該当の場所を見て見ると。 ありゃ、記述内容が全然違う…。 で結局解決せず。 |