ASPカーネルを1.7.0から1.8.0へアップグレードする
ASPカーネル1.7.0系だとperlのバージョンアップに伴って,make depend時に不要なワーニングがでたりするので1.8.0系に上げたいのだけど,簡易パッケージはまだまだ対応が少ない…。じゃあ個別パッケージを使ってカーネル本体(ターゲット非依存部)は1.8.0を使い,ターゲット依存部は1.7.0を使った場合の変更箇所をまとめました
変更箇所について
カーネルのdoc/version.txtに書かれていますが以下の変更がされているようです。
- char_t型の廃止
- SILのメモリ空間読出し関数に渡すポインタの属性の変更
- 非タスクコンテキスト用のスタック領域のサイズチェックの追加
- vasyslog.cをlibraryディレクトリに移動
- MISRA-C対応のためのコードの修正
- その他のバグフィックス
- サンプルのMakefileの修正
- その他の修正
これらありますが,ターゲット依存部に関連した作業をみていきます。
環境はapsh4_gccです。
char_t型の廃止
grepすれば一発ですが,prc_config.h,target_config.c,target_serial.c,target_serial.h,target_syssvc.hあとはPDICにあるsh_scif.c,sh_scif.hで使われていた char_t型をchar型へ変更しました。
サンプルのMakefileの修正
- LDFLAGSは,cfg1_out.cのリンク時には適用されないように修正.
このためにcfg1_out.cをビルドするときに-nostdlibがつかなくて,止まってました。
sampleのMakefileで該当箇所を見てみます。
1.7.0では
kernel_cfg.timestamp: $(START_OBJS) cfg1_out.o $(END_OBJS) $(HIDDEN_OBJS) kernel_cfg.timestamp $(CFG2_OUT): $(APPL_CFG) $(LINK) $(CFLAGS) $(LDFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \ $(START_OBJS) cfg1_out.o $(END_OBJS)
になっていたのですが,1.8.0では
$(CFG2_OUT_SRCS): kernel_cfg.timestamp kernel_cfg.timestamp: $(APPL_CFG) \ $(START_OBJS) cfg1_out.o $(END_OBJS) $(HIDDEN_OBJS) $(LINK) $(CFLAGS) $(CFG1_OUT_LDFLAGS) -o $(CFG1_OUT) \ $(START_OBJS) cfg1_out.o $(END_OBJS)
に変わっています。ポーティングガイドラインではCFG1_OUT_LDFLAGSについて以下のように記述されています。
(2-4-16) CFG1_OUT_LDFLAGS cfg1_out.cに対するリンクオプション ターゲットに依存して,cfg1_out.cをリンクする際に適用するオプションを追 加する場合には,上に示した変数に定義する. なお,LDFLAGSは,cfg1_out.cをリンクする際には適用されないため,LDFLAGS に定義したオプションで,cfg1_out.cをリンクする際にも必要なものは, CFG1_OUT_LDFLAGSにも定義する必要がある.
というわけで,Makefile.targetに追加すればよさそうです…。が実際にはMakefile.prcが以下のように悪さをしていました。
# # FPUを使用する場合 # ifeq ($(FPU_ENABLE),true) CDEFS := $(CDEFS) -DFPU_ENABLE CFG1_OUT_LDFLAGS := -lgcc endif
なので,この部分変更します。
# # FPUを使用する場合 # ifeq ($(FPU_ENABLE),true) CDEFS := $(CDEFS) -DFPU_ENABLE endif
それで,上に持っていきます。
# # コンパイルオプション # COPTS := $(COPTS) LDFLAGS := -nostdlib $(LDFLAGS) CDEFS := $(CDEFS) -DTOPPERS_LABEL_ASM LIBS := $(LIBS) -lgcc CFG1_OUT_LDFLAGS := -nostdlib -lgcc $(CFG1_OUT_LDFLAGS)
nostdlibの設定についてはポーティングガイドラインにはターゲットで…と書かれていますが,archで設定したほうがターゲット依存部で変更する箇所が少なくなるのでは…と思ったりもしています。この辺りはコントリビュータの好みかもしれませんが…。