저는 vxWorks에서 vxsim 바이너리를 테스트 할 프로젝트를 만들고 있습니다. 링크 과정에는 세 단계가 있습니다. 메이크의 관련 부분은 대략 다음과 같이 자세한 정보가 필요한(vxworks)이 링커 스크립트를 사용하여 생성 된 바이너리에서 첫 번째 주소가 텍스트 세그먼트 시작 주소에서 시작되지 않는 이유는 무엇입니까?
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 시간 후에 그 때까지 아무런 대답도 없을 경우이 질문을 더 자세하게 업데이트 할 것입니다.
다음은 링커 스크립트의 대략적인 스케치입니다. 어떤 전에 아무것도 포함되기 전에 wrs_kernel_text_start
텍스트 세그먼트의 시작 부분에 발생한다는 사실을
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 */
}
를 적어 둡니다과 : 당신이 Vx 웍스 6.x에서에 액세스 할 수있는 경우, 그것은 단지 기본 'link.RAM'스크립트입니다 ALIGN 문.
완료 한 다른 vxWorks 프로젝트에서 wrs_kernel_text_start = 0x60010000
; 그러나이 특정 프로젝트에서는 대략 0x6025XXXX
과 비슷한 수준입니다. 당신은 틀린 것을 읽지 않고 있습니다, 그 주소는 내가 기대하는 주소보다 1 자릿수 높습니다. 즉, 0x60025XXX
이 아닙니다. _sysInit
은 내가 예상 한대로 0x60010000
에서 바로 시작합니다.