IELFTOOL 체크섬 - 여러 범위에 걸친
기술노트 53274
아키텍처:
ARM, RH850, RX, SH, STM8
컴포넌트:
general
업데이트:
2021-05-26 오전 10:04
소개
체크섬 계산은 여러 범위에 걸쳐 수행될 수 있습니다. 만약 해당 범위가 사용 중이라면, 다음 사항을 주목하시기 바랍니다:
- GUI는 오직 하나의 범위만 허용합니다. 따라서 체크섬 옵션을 비활성화 해야합니다. 대신에...
- Project > Options... > Linker > "Extra options" 에 일부 명령줄 옵션을 추가합니다.
- "build actions" > "post build command line" 에다가 일부 명령줄 옵션을 추가합니다.
- 낮은 주소범위를 가진 범위를 먼저 계산(프로그램 상에서) 해야 합니다.
- 계산은(프로그램 상에서) 체크섬 심볼(GUI에 의해 정의된)을 사용하지 못할 수도 있습니다, 따라서 프로그램에서 올바른 범위를 사용하도록 약간의 노력을 들여야 합니다.
Two ranges - two checksum values
다음 예제 프로젝트를 참고: Two ranges two checksums 650.zip.
첫 번째 범위는 0x1006000 부터 0x102FFFB 이고, 두 번째 범위는 0x1030000 부터 0x103EFFB입니다.
세 가지 변경사항이 필요합니다:
- "Project > Options... > Linker > Extra options"에 IAR ILINK 링커를 위한 수정사항이 반영되야 합니다.
다음을 추가하세요:--place_holder __checksum1,2,.checksum1,1
--place_holder __checksum2,2,.checksum2,1
--define_symbol __checksum_begin1=0x1006000
--define_symbol __checksum_end1=0x102FFFB
--define_symbol __checksum_begin2=0x1030000
--define_symbol __checksum_end2=0x103EFFB - 빌드 후에 체크섬 계산을 실행하는 명령 라인을 "Project > Options... > Build Actions > Post-build command line" 에서 설정한 뒤 사용합니다.
ielftool --fill 0xFF;0x1006000-0x102FFFB --fill 0xFF;0x1030000-0x103EFFB
--checksum __checksum1:2,crc16,0x0;0x1006000-0x102FFFB
--checksum __checksum2:2,crc16,0x0;0x1030000-0x103EFFB
--verbose "$TARGET_PATH$" "$TARGET_PATH$" - .icf 파일에, 메모리 범위와 어디에 체크섬을 위치시킬지 정의합니다:
define symbol __ICFEDIT_region_ROM_start__ = 0x1006000;
define symbol __ICFEDIT_region_ROM_end__ = 0x102FFFF;
define symbol __ICFEDIT_region_PFM_start__ = 0x1030000;
define symbol __ICFEDIT_region_PFM_end__ = 0x103EFFF;
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__
to __ICFEDIT_region_ROM_end__];
define region PFM_region = mem:[from __ICFEDIT_region_PFM_start__
to __ICFEDIT_region_PFM_end__];
place at end of ROM_region { readonly section .checksum1 };
place at end of PFM_region { readonly section .checksum2 };
Two ranges - one checksum value
다음 예제 프로젝트를 참고: Two ranges one checksum 650.zip.
첫 번째 범위는 0x1006000 부터 0x102FFFB 이고 두 번째 범위는 0x1030000 부터 0x103EFFF 입니다.
세 가지 변경사항이 필요합니다:
- "Project > Options... > Linker > Extra options"에 IAR ILINK 링커를 위한 수정사항이 반영되야 합니다.
다음을 추가하세요:
--place_holder __checksum,2,.checksum,1
--define_symbol __checksum_begin1=0x1006000
--define_symbol __checksum_end1=0x102FFFB
--define_symbol __checksum_begin2=0x1030000
--define_symbol __checksum_end2=0x103EFFF - 빌드 후에 체크섬 계산을 실행하는 명령 라인을 "Project > Options... > Build Actions > Post-build command line" 에서 설정한 뒤 사용합니다.
ielftool --fill 0xFF;0x1006000-0x102FFFB --fill 0xFF;0x1030000-0x103EFFF
--checksum __checksum:2,crc16,0x0;0x1006000-0x102FFFB;0x1030000-0x103EFFF
--verbose "$TARGET_PATH$" "$TARGET_PATH$" - .icf 파일에, 메모리 범위와 어디에 체크섬을 위치시킬지 정의합니다:
define symbol __ICFEDIT_region_ROM_start__ = 0x1006000;
define symbol __ICFEDIT_region_ROM_end__ = 0x102FFFF;
define symbol __ICFEDIT_region_PFM_start__ = 0x1030000;
define symbol __ICFEDIT_region_PFM_end__ = 0x103EFFF;
define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__
to __ICFEDIT_region_ROM_end__];
define region PFM_region = mem:[from __ICFEDIT_region_PFM_start__
to __ICFEDIT_region_PFM_end__];
place at end of ROM_region { readonly section .checksum };
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.