IELFTOOL Checksum - NXP LPC 장비 사용시

기술노트 52619

아키텍처:

ARM

컴포넌트:

general

업데이트:

2021-05-27 오전 4:44

소개

본 기술 노트는 일부 NXP LPC 장비에 필요한 "특별한" 벡터 테이블 체크섬에 대해 다룹니다.

NXP LPC 장비를 위한 참고 사항

NXP LPC 장비는 (벡터 테이블 상에)특정한 주소에 배치되기 위해 특별한 체크섬이 필요합니다. IAR Embedded Workbench for ARM은 이 체크섬을 자동으로 계산하고 배치시킵니다. 벡터 테이블의 이 특수 체크섬을 통해 사용자 정의 CRC 체크섬을 계산해서는 안 됩니다.

문제 1 - ielftool 에러

빌드 시에 만날 수 있는 에러
ielftool error: Checksums have dependencies

벡터 테이블 체크섬과 프로그램 체크섬이 동일한 ielftool 명령에 의해 계산되기 때문에 에러가 발생합니다.

해결방법 1 - 벡터 테이블 제외하기

벡터 테이블을 프로그램 체크섬의 계산에서 제외해 해결할 수 있다.  시작 주소를 벡터 테이블에 이어지는 첫 번째 주소로 설정하여 해결할 수 있다.

"Linker > Checksum > Start address" 에서 옵션을 0x0에서 0x40으로 변경한다.

(.intvec 섹션의 끝 주소를 찾기 위해 .map 파일을 점검)

문제 2 - 벡터 테이블을 포함하는 체크섬

프로그램의 체크섬에 벡터 테이블을 포함해야 하는데, "해결방법 1"에서 벡터 테이블을 제외한 경우

해결방법 2 - post-build 명령 라인을 사용

만약 post-build 명령 라인을 사용하면, 두 개의 체크섬이 계산될 것이다. 각각 다른 ielftool 명령에 의해, 즉, ielftool 에러를 발생시킨 의존성을 방지할 수 있고, 시작 주소 0x0을 사용할 수 있다.

  1. "Linker > Checksum > Fill unused code memory"옵션 선택 해제
  2. "Linker > Extra Options > Use command line options"옵션 추가
    --place_holder __checksum,2,.checksum,1
    --define_symbol __checksum_begin=0x0
    --define_symbol __checksum_end=0xfffb
  3. "Build Actions > Post-build command line"옵션 설정
    ielftool
    --fill 0xFF;0x0-0xfffb
    --checksum __checksum:2,crc16,0x0;0x0-0xfffb
    --verbose "$TARGET_PATH$" "$TARGET_PATH$"

문제 3 - 이진파일에 체크섬이 포함되지 않음

"Output Converter > Output > Generate additional output > Output format: binary" 옵션은 설정되었으나, 프로그램의 체크섬이 생성된 이진파일에 포함되지 않았습니다.

그 이유는 이진 파일이 링킹 이후에 생성이 되나 이 과정은 post-build 동작 이전에 일어납니다. 즉, post-build 동작 이전에 체크섬이 계산되어야 합니다.

해결방법 3 - post-build .bat 파일을 사용

먼저 체크섬을 계산한 뒤에 추가로 출력 파일을 생성하도록 하는 .bat 파일을 post-build 명령 라인이 호출하도록 하는 것입니다.

다음의 예제 프로젝트를 참고하세요. IAR Embedded Workbench for ARM - Example (LPC device).zip.

참고사항:

'Example (1 range, 3 diff. locations)'를 기반으로 한 예제 프로젝트, 'PlaceEndOfROM'를 설정. ielftool 에러를 유발하기 위해 타깃(target)이 LPC1768로 변경되었지만, 체크섬이 계산되는 주소 범위를 넘어서는 것은 원래 예제 프로젝트와 동일합니다.

기술:

  1. "Build Actions > Post-build command line"옵션을 설정
    $PROJ_DIR$\post-build.bat "$TARGET_BPATH$"
  2. 다음 항목을 수행하여, 프로젝트 폴더안에 post-build.bat 파일 생성:
    set OUT=%1.out
    set HEX=%1.hex
    set BIN=%1.bin

    :: calculate application checksum
    ielftool --fill 0xFF;0x0-0xfffb --checksum __checksum:2,crc16,0x0;0x0-0xfffb --verbose %OUT% %OUT%

    :: generate additional output: hex
    ielftool.exe --ihex --verbose %OUT% %HEX%

    :: generate additional output: binary
    ielftool.exe --bin --verbose %OUT% %BIN%

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.