vxWorks で作業しているプロジェクトがあり、テスト用に vxsim バイナリを構築しています。リンク プロセスには 3 つの段階があります。メイクファイルの関連部分は、おおよそ次のようになります。
partialImage.o: ${SYSTEM_OBJS} ${OBJS} version.o
ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@}
# Don't ask me why they did it this way; it seems redundant to re-use
# all the other objects as well as partialImage.o, but I'm also not extremely
# versed in what's necessary for munch.tcl to do its thing.
ctdt.o: partialImage.o ${SYSTEM_OBJS} ${OBJS} version.o
${VXSIMNM} ${^} | tclsh ${path to munch.tcl} > ${@:%.o=%.c}
ccsparc ${appropriate CFLAGS go here} ${@:%.o=%.c} -o ${@}
${FINAL_IMAGE}: ${a list of dependencies here}
ldsparc -N -e _sysInit -Ttext 60010000 \
${appropriately ordered list of objects} \
-defsym _VX_DATA_ALIGN=16 \
-T link.RAM \
-o ${@}
さらに情報が必要な場合 (フラグなど)、お知らせください。私は現在、そのコンピューターの前にいませんが、約 1 時間後に、その時点までに回答が得られない場合は、この質問を詳細に更新します。
以下は、リンカー スクリプトのラフ スケッチです。vxWorks 6.x にアクセスできる場合は、デフォルトの「link.RAM」スクリプトです。
START(_sysInit)
SECTIONS {
.text {
wrs_kernel_text_start = .;
/* A few other variable declarations and inclusions from various other segments */
. = ALIGN(16);
}
. = ALIGN(16);
/* The rest of the linker script */
}
wrs_kernel_text_start
何かが含まれる前、および ALIGN ステートメントの前に、テキスト セグメントの先頭に発生するという事実に注意してください。
私が行った他の vxWorks プロジェクトではwrs_kernel_text_start = 0x60010000
、ただし、この特定のプロジェクトでは、 とほぼ同等の別のアドレス0x6025XXXX
です。あなたは間違って読んでいるわけではありません。アドレスは、私が期待するアドレスよりも 1 桁大きくなっています。つまり、そうではありません0x60025XXX
。 私が期待するように_sysInit
すぐに始まります。0x60010000