(toppers-users 17) Re: TOPPERS/ASP3 Release3.5.0 ビルドエラー(fatal error)について

kaneko-nao kaneko-nao @ numata.co.jp
2019年 12月 9日 (月) 16:12:33 JST


小南様、高田先生

お世話になります。株式会社ヌマタ 金子です。
本件、原因が分かりました。

asp3/kernel/Makefile.kernel に、「生成されるオブジェクトファイルの依存関係の定義」
があります。
3.4.0以降は、
    $(addprefix $(OBJDIR)/, $(startup)) $(startup:.o=.s): startup.c
という記述ですが、3.3.0までは、
    $(startup) $(startup:.o=.s): startup.c
となっています。3.3.0から3.4.0にアップデートの際、この部分を更新せず、旧来のまま
使用していたことが原因でした。(Makefileにも「OBJDIR」を定義していない)
この度の3.5.0アップデートに際し、Makefile.kernelは新しくなりましたが、Makefileが未定義
のため、今回のエラーになったものと考えます。修正後、ビルドが通りましたので、ご報告
いたします。

関係者の皆様、お騒がせし、大変申し訳ありませんでした。




小南様、高田先生

はじめまして。株式会社ヌマタ 金子と申します。
ご丁寧にご指摘いただき、ありがとうございます。
本件、未解決ですが、都合により後回しにしておりました。

ご質問に回答します。
質問1. エラーは発生せず、正常終了します
質問2. ここで当該エラーが発生します

基本的には、最新のファイルを展開し、変更箇所のみ変更する、というスタンスですが、 


Makefileは3.4.0で使用していたものをそのまま流用しています。makeログから新旧バージョン
で異なるのは、3.5.0のコンパイルオプションに「mfpu=vfpv3-d16 」が追加されたことぐらいです。

ご指摘いただいた、*dが生成されない可能性を踏まえながら、Makefileを見直す予定です。
(少し時間がかかりますが・・・)
取り急ぎ、ご報告いたします。



金子様、高田先生、皆様

TOPPERSプロジェクト個人会員の小南です。

メールでのご質問には、TOPPERS/ASP3の3.5.0と3.4.0とだけ記述があり、具体的なターゲット
がわからない状態ですが、ASP3のARM向け簡易パッケージをDLして、私の環境でコンパイル
できるか試してみました。
結果は、3.5.0、3.4.0のどちらの場合も、コンパイルに成功し、コンフィギュレータによるチェック
もパスしました。

私の環境は以下の通りです。
OS: 64bit Windows10 Home Edition,
       cygwin(64bit),
クロスコンパイラ:  GNU ARM Embedded Toolchainの7-2018-q2-updateのWindows 
32bit版
  (以下よりダウンロードしたファイルでインストール)
  gcc-arm-none-eabi-7-2018-q2-update-win32-sha1.exe
  https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
ターゲット:ARM Cotex-A9(RZ/A1)
これは私がGR-PEACHのボードを所有しており、コンパイルしたあとにボード上で実行
してみる場合も想定して選択しました。

ARM向け簡易パッケージ(ARM11 MPCore, ARM Cotex-A9(RZ/A1))の非依存部のバージョン3.5.0と3.4.0
の以下のアーカイブ
3.5.0  https://www.toppers.jp/download.cgi/asp3_arm_gcc-20191006.tar.gz
3.4.0  https://www.toppers.jp/download.cgi/asp3_arm_gcc-20190320.tar.gz

行った手順
1. それぞれのアーカイブファイルをダウンロード、展開
2. asp3/OBJディレクトリを作成して、asp3/OBJに移動
3. ruby ../configure.rb -T gr_peach_gcc
4. make

makeの実行結果の最後の部分は以下の通りでした。

> arm-none-eabi-ar -rcs libkernel.a objs/target_support.o objs/gic_support.o 
> objs/core_support.o objs/target_kernel_impl.o objs/chip_kernel_impl.o 
> objs/mpcore_kernel_impl.o objs/gic_kernel_impl.o objs/pl310.o 
> objs/chip_timer.o objs/core_kernel_impl.o objs/arm.o objs/startup.o 
> objs/task.o objs/taskhook.o objs/wait.o objs/time_event.o 
> objs/task_manage.o objs/task_refer.o objs/task_sync.o objs/task_term.o 
> objs/semaphore.o objs/eventflag.o objs/dataqueue.o objs/pridataq.o 
> objs/mutex.o objs/mempfix.o objs/time_manage.o objs/cyclic.o objs/alarm.o 
> objs/sys_manage.o objs/interrupt.o objs/exception.o
> arm-none-eabi-ranlib libkernel.a
> arm-none-eabi-gcc -c -o objs/tBannerMain.o -MD -MP -MF 
> objs/tBannerMain.d -O2 -Wall -g   -mlittle-endian -mcpu=cortex-a9  -DTOPPERS_EXECUTE_ON_RAM 
>  -D__TARGET_ARCH_ARM=7  -I. -I../include  -I../target/gr_peach_gcc -I../arch/arm_gcc/rza1 
>  -I../arch/arm_gcc/common -I../arch/gcc -I.. -I../sample -I./gen -I../tecs_kernel 
> ../syssvc/tBannerMain.c
> 
> rm-none-eabi-gcc -O2 -Wall -g   -mlittle-endian -mcpu=cortex-a9  -DTOPPERS_EXECUTE_ON_RAM 
>  -D__TARGET_ARCH_ARM=7  -I. -I../include  -I../target/gr_peach_gcc -I../arch/arm_gcc/rza1 
>  -I../arch/arm_gcc/common -I../arch/gcc -I.. -I../sample -I./gen -I../tecs_kernel 
>  -nostdlib  -mlittle-endian -mcpu=cortex-a9  -Wl,-T,../target/gr_peach_gcc/gr_peach_ram.ld 
>   -L. -o asp.exe \ 
> objs/start.o  objs/sample1.o objs/log_output.o objs/vasyslog.o 
> objs/t_perror.o objs/strerror.o   objs/tTask_tecsgen.o 
> objs/tSemaphore_tecsgen.o objs/tInterruptRequest_tecsgen.o 
> objs/tISR_tecsgen.o objs/tInitializeRoutine_tecsgen.o 
> objs/tTerminateRoutine_tecsgen.o objs/tSerialPortMain_tecsgen.o 
> objs/tSerialAdapter_tecsgen.o objs/tSysLog_tecsgen.o 
> objs/tSysLogAdapter_tecsgen.o objs/tLogTaskMain_tecsgen.o 
> objs/tBannerMain_tecsgen.o objs/tPutLogSIOPort_tecsgen.o 
> objs/tSCIF_tecsgen.o objs/tSIOPortRZA1Main_tecsgen.o objs/tTask.o 
> objs/tISR.o objs/tInitializeRoutine.o objs/tTerminateRoutine.o 
> objs/tSerialPortMain.o objs/tSerialAdapter.o objs/tSysLog.o 
> objs/tSysLogAdapter.o objs/tLogTaskMain.o objs/tBannerMain.o 
> objs/tPutLogSIOPort.o objs/tSCIF.o objs/init_tecs.o  objs/kernel_cfg.o 
>   -lkernel -lc -lgcc
> arm-none-eabi-nm -n asp.exe > asp.syms
> arm-none-eabi-objcopy -O srec -S asp.exe asp.srec
> ruby ../cfg/cfg.rb --pass 3 --kernel 
> sp -O -I. -I../include  -I../target/gr_peach_gcc -I../arch/arm_gcc/rza1 -I../arch/arm_gcc/common 
>  -I../arch/gcc -I.. -I../sample -I./gen -I../tecs_kernel -T 
> ../target/gr_peach_gcc/target_check.trb \
                             --rom-symbol asp.syms --rom-image asp.srec
> 
> /cygdrive/v/ASP/ASP3/asp3_arm_gcc-20190320.tar/asp3_arm_gcc-20190320/asp3/kernel/kernel_check.trb:94: 
> warning: assigned but unused variable - epar2
> configuration check passed


金子様のメールから時間がたっていますので、もう解決されたか、優先度が下がったなどで時間が取れない
状態なのかもしれません。

ただ、もしまだ原因を知りたいという段階であれば、以下の質問をさせてください。


質問1. 金子様の環境では、ASP3 3.5.0の金子様が利用されているターゲットの簡易パッケージの
アーカイブから展開したディレクトリに対して、asp3/doc/user.txtの「3.3 サンプルプログラムの
構築と実行」の示す手順では、makeはエラーは発生せずに終了しますか。

質問2. 質問1でエラーが発生せずに終了した場合、
  make realclean
で、いったん生成物をすべて削除した後、アーカイブを展開したディレクトリに、金子様が
バージョンアップされる前の、各プロジェクトに対して独自に追加・変更されたのをそのまま、
追加・変更してから、
  make
を実行すると、エラーは終了せずに終了しますか。



ASP3の3.5.0、3.4.0の簡易パッケージから、まっさらな状態のディレクトリで、
configureの生成するMakefile、objsディレクトリを利用してコンパイル、リンク
できることは、TOPPERSプロジェクトがパッケージを公開する前にチェックして
いることですし、現時点でも、私の環境で確認することは出来ました。

これは、3.5.0 の簡易パッケージ 、あるいは3.4.0の管理パッケージというひとまと
まりに対して確認したということです。


実は、asp3/doc/user.txtを確認しても、カーネルのバージョンアップの方法は記述さ 

れていません。
「3.クイックスタートガイド」も、まっさらな状態で、アーカイブファイルから
構築する方法が述べられているだけです。

ですので、金子様が3.4.0から3.5.0にバージョンアップされたというのが、具体的に
どういう手順で行われたか、私には分かりません。


私が試した3.5.0の簡易パッケージと、3.4.0の簡易パッケージは、カーネルや
ライブラリのソースだけでなく、make中に呼び出される各種ツールの内部も
いろいろ変更が入っています。
(WinMergeというディレクトリ、ファイルの差分表示・マージをツールで確認しま
した。)

ですので、バージョンアップの作業の結果、TOPPERSプロジェクトで公開されている
パッケージの内容が、例えば異なるバージョンのものが混ざってしまっている状態に
なっていたならば、なんとも言いようがないです。





以下では、ASPとASP3の構築手順の違いについて述べます。

ASPの場合、
make depend
でソースの依存関係のファイルを生成した後、
make
を実行していました。

ASP3の場合
make
を実行するだけです。
依存関係のファイルは、ソースファイルのコンパイル時に、同時に生成しています。
またTECSを使われている場合、tecsgenは最初に1回のみ実行されます。
tecsgenはCソースファイル、ヘッダファイル、Makefile.tecsgenをgenディレクトリに生成
します。
このgen/Makefile.tecsgenを読み込むために、新たにmakeを実行します。



またconfigure.rbが生成するファイル自体は1つのMakefileですが、このMakefileの4か所で
include命令を使って他のディレクトリに存在するMakefile、依存関係のファイルを読み込
んでいます。

* Makefielのincludeその1
#
#  ターゲット依存の定義のインクルード
#
include $(TARGETDIR)/Makefile.target

* Makefielのincludeその2

#
#  TECSが生成する定義のインクルード
#
ifndef OMIT_TECS
GEN_DIR = $(TECSGENDIR)
-include $(TECSGENDIR)/Makefile.tecsgen
endif

* Makefielのincludeその3

#
#  カーネルのファイル構成の定義
#
include $(SRCDIR)/kernel/Makefile.kernel

* Makefielのincludeその4

#
#  依存関係ファイルのインクルード
#
-include $(DEPDIR)/*.d


*.dが生成されていないとのことですが、2つ可能性が考えられます。

可能性1
make実行中にcompilerエラーが発生し、makeが中止されたため、期待するソースファイル
のコンパイルが実行されず、したがって*.dファイルも生成されなかった

可能性2
Makefileで定義される変数の値に基づき、makeはファイルの依存関係を解析するのですが、
なんらかの原因でその変数の値から、コンパイルしたいファイルがなくなってしまうと、 

makeはそのファイルをコンパイルしません。
Makefileがincludeするファイルは、静的に存在するものだけでなく、ツールが生成するものも
あります。
includeするファイルが意図したものであるか否か、includeするファイルの内容が意図した通り
であるか否かにより、makeの依存関係の解析結果が変わってしまう可能性があります。 

なんらかの原因で変数の値が干渉をうけ、期待したものとは、異なったものになることもありえます。


私がよく行うのは、以下のように標準エラー出力を標準出力にリダイレクトし、teeコマンドで
標準出力の内容をコンソールに出力しつつ、ファイルにも出力することです。
どこでどういう エラーが 発生したかを確認しやすくなります。
また正常な場合の出力結果と比較することで、単にエラー発生個所だけでなく、正常な出力結果との
差異を調べることで、エラーの原因の追究がしやすくなります。

正常な場合の出力結果をみる場合も、makeの挙動を把握することに役立ちます。

make 2>&1 | tee make.log

それから、
  make -d
または
  MAKEFLAGS=-d make
でmakeが依存関係をどのように判断しているかを出力させることが出来ます。

ただ大量に出力されるので、以下のマニュアルを参考に、出力内容を指定したほうが良いかもしれません。

http://www.quruli.ivory.ne.jp/document/make_3.79.1/make-jp_8.html#Options-Summary




On Fri, Nov 29, 2019 at 4:33 PM kaneko-nao <kaneko-nao @ numata.co.jp> wrote:
名古屋大学
高田広章 先生

いつもお世話になります。株式会社ヌマタ 金子です。

エラー箇所の依存関係ファイルが生成されていないようなので、3.4.0で作成した*.dを試験的にコピーし、ビルドを再実行したところ、以下のファイルでエラー(*.dが生成されない)となりました。これらファイルに何か共通することがあればご指摘願います。因みに、これら全てパスすれば、実行ファイルの生成まで行えます。

ext_ker,tskterm,mtxhook,iniwque,sigtim,get_inf,ref_tsk,dly_tsk,ter_tsk,ref_sem,ref_flg,ref_dtq,ref_pdq,
ref_mtx,ref_mpf,fch_hrt,cyccal,almcal,sns_ker,get_ipm,xsns_dpn

以上、よろしくお願いします。






名古屋大学
高田広章 先生

いつもお世話になります。株式会社ヌマタ 金子です。
早々のご連絡、ありがとうございます。

Makefileは、3.4.0で動作していたものをそのまま使用しています。該当箇所は、次の通りですが、もう一度、「sample」内のMakefileと付き合わせてみます。状況が変われば、またご相談させてください。因みに、該当箇所をsample通りに変えてみましたが、結果は同じでした。

$(KERNEL_LCOBJS): %.o:
    $(CC) -DTOPPERS_$(*F) -o $@ -c -MD -MP -MF $(DEPDIR)/$*.d \
                                    $(CFLAGS) $(KERNEL_CFLAGS) $<

以上、よろしくお願いします。




金子様
Cc: 皆様

名古屋大学の高田です。とりあえず,すぐにわかる範囲で回答します。

エラーのログからわかる直接的な原因は,ext_ker.o をコンパイルする
コマンドに,入力ファイルがないこと,具体的には,最後につくべき
../kernel/task_term.c がないことです。つまり,ビルドの問題です。

このコンパイル指示は,Makefile の以下の記述で出しており,この辺
りは,3.4.0 から 3.5.0 で変更していないはずです。

$(KERNEL_LCOBJS): $(OBJDIR)/%.o:
     $(CC) -c -o $@ -DTOPPERS_$(*F) -MD -MP -MF $(DEPDIR)/$*.d \
                                     $(CFLAGS) $(KERNEL_CFLAGS) $<

御社の方で Makefile を変更されているということはないでしょうか?

# こちらでは再現しません。

高田広章
名古屋大学

On 2019/11/28 11:03, kaneko-nao wrote:
> TOPPERSプロジェクト御中
>
> お世話になります。
> 株式会社ヌマタ 金子と申します。
>
> この度、ASP3のバージョンアップ(3.4.0->3.5.0)を行っていますが、下記の通り「ext_ker」の部分でエラーとなってしまいます。弊社で設計する複数のプロジェクト全てで同じ現象です。何かお気付きの点があれば、ご指摘いただきたく、お願いいたします。
>     CPU:RZA1L/H
>     GNU Make Version :  3.81
>
> 以上、よろしくお願いいたします。
>
> 以下、エラー部の抜 -------------------------------------------------------------------
> arm-none-eabi-gcc -DTOPPERS_sta_ker -o sta_ker.o -c -MD -MP -MF
> deps/sta_ker.d \
>                                                                         -O0
>  -Wall -g -DTOPPERS_OMIT_SYSLOG   -mlittle-endian -mcpu=cortex-a9 -mfpu=vfpv3-d16
>  -DTOPPERS_OMIT_TECS  -DTOPPERS_EXECUTE_ON_RAM -D__TARGET_ARCH_ARM=7  -I.
>  -I../include  -I../target/gr_peach_gcc -I../arch/arm_gcc/rza1 -I../arch/arm_gcc/common
>  -I../arch/gcc -I.. -I../J2_SRC -I../RZA1 -I../OSC -I../../common/VDC5 -I../../common/VDC5/INC
>  -I../../common/VDC5/iodefines -I../../common/VDC5/RenesasBSP/drv_inc -I../../common/VDC5/RenesasBSP/drv_src/display
>  -I../../common/VDC5/RenesasBSP/drv_src/display/lcd -I../../common/VDC5/RenesasBSP/drv_src/display/lcd/include
>  -I../../common/VDC5/RenesasBSP/drv_src/display/lcd/src -I../../common/VDC5/RenesasBSP/drv_src/display/vdc5/include
>  -I../../common/VDC5/RenesasBSP/drv_src/display/vdc5/src -I../../common/VDC5/RenesasBSP/drv_src/display/vdec
>  -I../../common/VDC5/RenesasBSP/drv_src/display/vdec/include -I../../common/VDC5/RenesasBSP/drv_src/display/vdec/src
>  -I../../common/VDC5/RenesasBSP_example/Display/library/wrapper -I../../common
>  -I../../common/FatFs -I../../common/eep -I../../common/sFlash -I../../common/sFlash/spibsc
>  -I../../common/sFlash/spibsc/src -I../../common/sFlash/spibsc/inc -I../../common/uart
>  -I../../common/USB -I../../common/USB/drivers\userdef -I../../common/USB/drivers/r_usb_basic
>  -I../../common/USB/drivers/r_usb_basic/src/driver -I../../common/USB/drivers/r_usb_basic/src/driver/inc
>  -I../../common/USB/drivers/r_usb_basic/src/hw -I../../common/USB/drivers/r_usb_basic/src/hw/inc
>  -I../../common/USB/drivers/r_usb_pcdc -I../../common/USB/drivers/r_usb_pcdc/src
>  -I../../common/USB/drivers/r_usb_pcdc/src/inc -I../../common/USB/drivers/r_usb_hmsc
>  -I../../common/USB/drivers/r_usb_hmsc/ref -I../../common/USB/drivers/r_usb_hmsc/src
>  -I../../common/USB/drivers/r_usb_hmsc/src/inc -I../../common/USB/drivers/r_usb_hmsc/src/ff11
>  -I../../common/USB/drivers/r_usb_hmsc/src/ff11/src -I../../common/USB/drivers/r_usb_hmsc/src/ff11/src/option
>  -I../../common/USB/drivers/intc/intc_driver -I../../common/USB/drivers/intc/inc
>  -I./gen -I../tecs_kernel -D__RZA1L -DRZ -D_NORMAL  -I../kernel
> ../kernel/startup.c
> arm-none-eabi-gcc -DTOPPERS_ext_ker -o ext_ker.o -c -MD -MP -MF
> deps/ext_ker.d \
>                                                                         -O0
>  -Wall -g -DTOPPERS_OMIT_SYSLOG   -mlittle-endian -mcpu=cortex-a9 -mfpu=vfpv3-d16
>  -DTOPPERS_OMIT_TECS  -DTOPPERS_EXECUTE_ON_RAM -D__TARGET_ARCH_ARM=7  -I.
>  -I../include  -I../target/gr_peach_gcc -I../arch/arm_gcc/rza1 -I../arch/arm_gcc/common
>  -I../arch/gcc -I.. -I../J2_SRC -I../RZA1 -I../OSC -I../../common/VDC5 -I../../common/VDC5/INC
>  -I../../common/VDC5/iodefines -I../../common/VDC5/RenesasBSP/drv_inc -I../../common/VDC5/RenesasBSP/drv_src/display
>  -I../../common/VDC5/RenesasBSP/drv_src/display/lcd -I../../common/VDC5/RenesasBSP/drv_src/display/lcd/include
>  -I../../common/VDC5/RenesasBSP/drv_src/display/lcd/src -I../../common/VDC5/RenesasBSP/drv_src/display/vdc5/include
>  -I../../common/VDC5/RenesasBSP/drv_src/display/vdc5/src -I../../common/VDC5/RenesasBSP/drv_src/display/vdec
>  -I../../common/VDC5/RenesasBSP/drv_src/display/vdec/include -I../../common/VDC5/RenesasBSP/drv_src/display/vdec/src
>  -I../../common/VDC5/RenesasBSP_example/Display/library/wrapper -I../../common
>  -I../../common/FatFs -I../../common/eep -I../../common/sFlash -I../../common/sFlash/spibsc
>  -I../../common/sFlash/spibsc/src -I../../common/sFlash/spibsc/inc -I../../common/uart
>  -I../../common/USB -I../../common/USB/drivers\userdef -I../../common/USB/drivers/r_usb_basic
>  -I../../common/USB/drivers/r_usb_basic/src/driver -I../../common/USB/drivers/r_usb_basic/src/driver/inc
>  -I../../common/USB/drivers/r_usb_basic/src/hw -I../../common/USB/drivers/r_usb_basic/src/hw/inc
>  -I../../common/USB/drivers/r_usb_pcdc -I../../common/USB/drivers/r_usb_pcdc/src
>  -I../../common/USB/drivers/r_usb_pcdc/src/inc -I../../common/USB/drivers/r_usb_hmsc
>  -I../../common/USB/drivers/r_usb_hmsc/ref -I../../common/USB/drivers/r_usb_hmsc/src
>  -I../../common/USB/drivers/r_usb_hmsc/src/inc -I../../common/USB/drivers/r_usb_hmsc/src/ff11
>  -I../../common/USB/drivers/r_usb_hmsc/src/ff11/src -I../../common/USB/drivers/r_usb_hmsc/src/ff11/src/option
>  -I../../common/USB/drivers/intc/intc_driver -I../../common/USB/drivers/intc/inc
>  -I./gen -I../tecs_kernel -D__RZA1L -DRZ -D_NORMAL  -I../kernel
> arm-none-eabi-gcc.exe: fatal error: no input files
> compilation terminated.
> make: *** [ext_ker.o] Error 1
>






More information about the USERS mailing list