(toppers-users 1294) Re: フルセット版カーネルサービスコールの実装について

Futoshi Okazaki okazaki.futoshi @ renesas.com
2003年 12月 2日 (火) 15:46:35 JST


岡崎です。
長文でのご説明ありがとうございます。

>この話題をusersでして良いのかどうかの判断がつかないのですが...
> # フルセットの話題ならipa-oss,1.4の話題ならdev辺りが相当かと

確かに。
そっちのメーリングリストの存在を忘れていました。

>まず,JSP1.4から何がどう変わっているかについてから.
>
>JSP1.4から,これまでslp_tskやwup_tskなどの全てのAPIを
>一つのオブジェクトファイルにしていたものを,
>slp_tsk.o, wup_tsk.o のようにAPI毎のオブジェクトファイルを
>生成するようになっています.そして,カーネルに必要な全ての
>ファイルをまとめたライブラリ,libkernel.aを作成します.
Makefile.kernelにある「#各ソースファイルから生成されるオブジェクトファイルの定
義」がそれですね。

sample\Makefileの
 $(KERNEL_LCOBJS): %.o:
  $(CC) -D__$(*F) -o $@ -c $(CFLAGS) $(KERNEL_CFLAGS) $<
で、-D__$(*F)で確かにdefine指定していますね。
「#各ソースファイルから生成されるオブジェクトファイルの定義」が、ソースファイル
から生成される
オブジェクトファイルの名前と、define定義名を兼ね、

sh-hitachi-elf-gcc -D__slp_tsk -o slp_tsk.o ・・・・ ../kernel/task_sync.c
sh-hitachi-elf-gcc -D__tslp_tsk -o tslp_tsk.o ・・・・ ../kernel/task_sync.c
sh-hitachi-elf-gcc -D__wup_tsk -o wup_tsk.o ・・・・ ../kernel/task_sync.c
   :
   :
sh-hitachi-elf-gcc -D__sus_tsk -o sus_tsk.o ・・・・ ../kernel/task_sync.c

とtask_sync.cから順に生成していたんですね。そのための#ifdefだったとは・・・。
(これだと確かにtask_sync.oは生成されませんね)

>最初にMakefileが正しく1.4のものなのかを確認する必要がありそうです.
>1.4対応のMakefileであれば,task_sync.oは生成されません.
>libkernel.aが存在するか,または nm libkernel.a でslp_tskが存在するか
>を確認してみてください.
1.4のものです。
ただ、DOS上でコンパイルをしたくて、H8Sの生成方法を参考に
(H8Sの開発環境はCygwinとDOS窓を併用していて、コンパイル/リンクはDOS上で行って
いる)
sample\Makefile.h8sを改造してやっていたため、説明いただいた様にはなっていません
でした。

>以上,何かの参考になれば幸いです.
カーネルライブラリの生成過程について、とても参考になりよく分かりました。
ご説明を参考に、カーネルライブラリの生成まわりを修正してみます。
ありがとうございました。