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に書かれていますが以下の変更がされているようです。

  1. char_t型の廃止
  2. SILのメモリ空間読出し関数に渡すポインタの属性の変更
  3. 非タスクコンテキスト用のスタック領域のサイズチェックの追加
  4. vasyslog.cをlibraryディレクトリに移動
  5. MISRA-C対応のためのコードの修正
  6. その他のバグフィックス
  7. サンプルのMakefileの修正
  8. その他の修正

これらありますが,ターゲット依存部に関連した作業をみていきます。
環境は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で設定したほうがターゲット依存部で変更する箇所が少なくなるのでは…と思ったりもしています。この辺りはコントリビュータの好みかもしれませんが…。