1

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

4

1 に答える 1

1

質問を削除するつもりでしたが、誰かが回答から何らかの価値を得るかもしれないと思います. makefile は実際には次のようになっています。

outfile: ${SYSTEM_OBJS} ${OBJS} version.o link.RAM
    ldsparc ${appropriate LDFLAGS go here} ${^} -o ${@}
(...)

リンカー スクリプトは依存関係リストにあり${^}、入力ファイルの 1 つとして含めていたことに注意してください。依存関係リストからリンカー スクリプトを削除すると、すべてが正常に見えるようになりました。

于 2011-08-03T16:09:49.913 に答える