(toppers-users 4433) Re: TOPPERS/ASPのSkyeye簡易パッケージの質問
yasuo kominami(nifty)
ykominami @ nifty.com
2015年 10月 12日 (月) 17:33:10 JST
小南と申します。
TOPPERSプロジェクトの個人会員です。
2015-10-09 17:05 GMT+09:00 <ozaki.minoru @ jp.panasonic.com>:
> はじめまして、
> パナソニックAVCネットワークスの尾崎です。
>
>
> 現在、TOPPERS/ASPの評価のために開発環境を構築しています。
> 評価基板を使用せずに、PC上で開発・デバックまでを行うため、ARMシミュレータSkyeyeを使った、簡易パッケージを使用しています。
>
> このパッケージのARMコンパイラSourcery G++ Lite
> 2010q1-188は、開発元のcodesourcery社がメンタグラフィック社に買収されたために、現在、有料版でしか入手することができません。
> このために他のgcc系のフリーのARMコンパイラ2つのうちどちらかを使用しようとしていますが、未だmakeできていません。
> そこで以下の2つの質問があります。
>
> 1.「GNUWing」コンパイラ
> http://www.embedded.jp/gnuwing/
>
> makefileを修正して、コンパイルはできますが、リンクスクリプトがSourcery G++ Lite
> のために\asp\target\at91skyeye_gcc\at91skyeye.ldでパースエラーが発生します。
> 「GNUWing」でもmakeできるためのリンクスクリプトのサンプル等ははありませんか?
>
> skyeye依存部の簡易パッケージは、gcovによるカバレッジ取得を行うために、Sourcery G++の
cs3.libに依存したつくりをしています。
正確には、MakefileでマクロENABLE_GCOVを定義すると、ファイル操作関係などlibcで定義さ
れたCの標準関数を呼び出します。
cs3.libはこの辺りをうまく扱ってくれ(libcの関数からの低レベルルーチン呼び出しを、ホスト環境
のサービスコール呼び出しにすり替える等)たり、スタートアップルーチンの機能ももっていたりし
ます。
大変便利なものですが、これはSourcery G++独自のものです。
gcovによるカバレッジをしないという前提であれば、libcとcs3.libをリンクせず、リンカスクリプトを
部分的に修正するだけで(私が確認した範囲でですが、)skyeyeで実行可能なものがつくれます。
私の環境では、sample1.cのコンパイル、実行が確認できました。
CYGWIN_NT-6.3-WOW moonlight 2.1.0(0.287/5/3) 2015-07-14 21:26 i686 Cygwin
(Launchpad GCC)
https://launchpad.net/gcc-arm-embedded
arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors) 4.9.3
20150529 (release) [ARM/embedded-4_9-branch revision 224288]
GNU ar (GNU Tools for ARM Embedded Processors) 2.24.0.20150604
GNU ld (GNU Tools for ARM Embedded Processors) 2.24.0.20150604
1.target/at91skyeye/Makefile.targetでマクロCOPTに-nostdlibを追加
Makefileでもコンパイル、リンク可能ですが、私はここで定義しました。
2.target/at91skyeye_gcc/start.Sを削除またはstart.S以外の名前にリネーム
こうするとarch/arm_gcc/common/start.Sがアセンブル、リンクされます。
3,target/at91skyeye_gcc/at91skyeye.ldを以下のように修正。
-GROUP(-lgcc -lc -lcs3 -lcs3hosted -lcs3arm)
+GROUP(-lgcc)
01234567890123456789012345678901234567890123456789012345678901234567890123456789
-lcの指定はMakefileでのコンパイラ、リンカへのオプション指定だけでなく、リンカスクリプトでも行
われているので、ここを削除(cs3.libのリンク指定も削除)
-INCLUDE arm-names.inc
+/* INCLUDE arm-names.inc */
arm-names.incはSourcery G++独自のファイルであるので削除。
-EXTERN(exit atexit)
+/* EXTERN(exit atexit) */
cs3.libがホスト環境のexit、atexitよぶようにする指定であるので削除。
-__libc_fini = _fini;
+/*__libc_fini = _fini;*/
libc中の_fini呼び出しを_finiと見なす指定のため、削除
.bss :
{
+ __bss_start = . ;
*(.shbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
*(.ram.b)
_end = .;
__end = .;
+ __bss_end = .;
} >ram
arch/arm_gcc/common/start.Sが要求する__bss_start、__bss_endを
定義
リンカスクリプト中でcs3関連の設定が残っていますが、cs3.libをリンク
しなければ、定義しても参照されないだけです。
4.target/at91skyeye/target_config.cのtarget_exit()に
マクロENABLE_GCOVが定義した時のみ、有効になるように#ifdef
を追加する。
+#ifdef ENABLE_GCOV
#ifdef TOPPERS_ENABLE_GCOV_PART
/*
#else /* TOPPERS_ENABLE_GCOV_FULL */
exit(0);
#endif /* TOPPERS_ENABLE_GCOV_PART */
+#endif /* ENABLE_GCOV */
この#ifdefがないと、ENABLE_GCOVが未定義でも、exitが未定義、
あるいはexitが呼び出す_finiが未定義というリンクエラーが発生する。
ただし、これらの修正でも、GNUWingのFTP版ではリンクできません。
FTP版は2003年公開で、ツールのバージョンが古く、at91skyeye.ldの
リンカスクリプトの文法を解釈できないところが多く存在します。
現在開発に用いるならLaunchpad GCCとか、GNUWingのパッケージ版
などをお勧めします。
2.Sourcery G++系のgcc-arm-none-eabi
> gcc-arm-none-eabi-4_8-2014q3-20140805-win32.exe
>
> arm-none-eabiなのでリンクスクリプトもパースエラーにはなりませんが、start.oとcrt0.oでstartがバッティングするため
> makefileをライブラリを参照しないように変更しました。
> LDFLAGS := -nostdlib $(LDFLAGS)
> CFG1_OUT_LDFLAGS := -nostdlib $(CFG1_OUT_LDFLAGS)
> LIBS := $(LIBS) -lgcc
>
> その結果、fini()が見つからないエラーとなります。
> undefined symbol `_fini' referenced in expression
>
> このコンパイラでもmakeできる設定方法はありませんか?
>
> GCC4.8であれば、上記の修正を加えれば、コンパイルできると思います。
補足
添付のpatchファイルには、上記の修正以外に、下記の修正を含みます。
cgywinのマウントで、/cygdrive以外のプレフィックスのディレクトリ名をつ
ける、あるいはそもそもプレフィクスのディレクトリ名をつけない(つまり
C:->/cygdrive/cではなく、c->/cとなる)環境でもmakedepが正しい依存
ファイルのパスを生成するようにするutil/makedepとMakefile.targetの
修正
Cドライブが/cygdrive/cになる場合
make depend
make
Cドライブが/cの場合
MAKEDEP_OPTS="-R /" make depend
make
Cドライブが/cygの場合
MAKEDEP_OPTS="-R /cyg" make depend
make
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://www.toppers.jp/pipermail/users/attachments/20151012/1ac977c2/attachment.html>
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: asp_at91skyeye-20140122-toppers-users_4428.patch
$B7?(B: application/octet-stream
$B%5%$%:(B: 10844 $B%P%$%H(B
$B @ bL@(B: $BL5$7(B
URL: <http://www.toppers.jp/pipermail/users/attachments/20151012/1ac977c2/attachment.obj>