マイコン工作実験日記

Microcontroller を用いての工作、実験記録

やっかいな引っ越し

2010-03-03 23:01:01 | Weblog
LPC2368でTINETが動かせたので、このコードを新しいUbuntsu環境に引っ越そうとしたところ、いろいろと問題が発生しました。以下、列挙しておきます。

まず、最初にTOPPERS/JSPのコンフィギュレータであるcfgがコンパイルできません。この問題については、すでにsuikanさんがLPC2388用のTOPPERS配布ファイルで対処されていたので、このコードを使うことで対処しました。どうやら、GCCのバージョンアップにともなって、C++のヘッダファイルが変わっているようです。

次に、TINETのminsvやnservをコンパイルしようとすると、tcp_cre_rep.oを作ろうとするところで、エラーが発生します。Fedora 5では問題ありませんでした。どうやらmakeのバージョンが関係しているようです。
この問題、調べてみると、すでに3年近く前にtoppers-users MLでも報告されていました。これまで古いバージョンのmakeしか使っていなかったので、TINETを使っていても、この問題には遭遇しなかったようです。makeのバージョンを下げるのが有効な対処法であるのはわかるのですが、Makefileの表記を変更することで回避可能なのかどうかはわかりませんでした。makeを入れ代えるのも面倒なので困っていたところ、いったんカーネルのライブラリを作っておき、アプリケーションのリンク時にはKERNEL_LIBを指定してやると、この問題を回避できることが判明。ほんとの原因とその修正方法がわかったわけではありませんが、そのテの探究には興味無し。わたしは自分のプログラムがとにかくmakeできればいいので、この回避方法で良しとします。

ようやく、コンパイルがとおるようになったら、今度はリンク時のエラーです。「.ARM.exidxがなんたら」というようなエラーです。この問題も頻出のようで、すぐに検索に引っ掛かり、リンカスクリプトでセクションを追加してやればいいことがわかりました。この問題は、GCCのバージョンと関連することなのでしょうか? あるいは、以前のGCCはEABIではなかったのですが、今回はEABIを使っていることと関係あるのでしょうか。

そんなこんなで、なんとかminsvをリンクできるところまでこぎつけました。が、しかし、結末でも驚くことに。。



サイズを確認してみたら、以前よりテキストが10KBもデカクなってます。コンパイル時はどちらも-O2で最適化しているんですが。。これって、EABIの影響なんでしょうか?