5.4.1. 타입 1, 로드 영역 하나와 연속되는 출력 영역

이 타입의 이미지는 로드 뷰에 있는 단일 로드 영역과 실행 뷰에 있는 세 개의 실행 영역으로 이루어져 있습니다. 실행 영역은 메모리 맵에 연속적으로 배치됩니다.

--ro-base address는 RO 출력 섹션을 포함하는 영역의 로드 및 실행 주소를 지정합니다. Example 5.11--ro-base 0x040000의 사용에 해당하는 스캐터 로딩 설명을 보여줍니다.

Example 5.11. 로드 영역 하나와 연속되는 실행 영역

LR_1 0x040000     ; Define the load region name as LR_1, the	 region starts at 0x040000.
{
    ER_RO +0      ; First execution region is called ER_RO, region starts at end of previous region.
                  ; However, since there was no previous region, the address is 0x040000.
    {
        * (+RO)   ; All RO sections go into this region, they are placed consecutively.
    }
    ER_RW +0      ; Second execution region is called ER_RW, the region starts at the end of the 
                  ; previous region	. The address is 0x040000 + size of ER_RO region.
    {
        * (+RW)   ; All RW sections go into this region, they are placed consecutively.
    }
    ER_ZI +0      ; Last execution region is called ER_ZI, the region starts at	 the end of the 
                  ; previous region at 0x040000 + the size of the ER_RO regions + the size of 
                  ; the ER_RW regions.
    {
        * (+ZI)   ; All ZI sections are placed consecutively here.
    }
}

Example 5.11에 표시된 설명은 로드 영역이 0x040000LR_1이라고 하는 하나의 로드 영역을 가진 이미지를 만듭니다.

이미지에는 각각 RO, RW 및 ZI 출력 섹션을 포함하는 ER_RO, ER_RWER_ZI라고 하는 세 개의 실행 영역이 있습니다. RO와 RW는 루트 영역입니다. ZI는 런타임에 동적으로 만들어집니다. ER_RO의 실행 주소는 0x040000입니다. 세 개 실행 영역은 모두 실행 영역 설명에 대한 기준 지정자의 +offset 형식을 사용하여 메모리 맵에 연속적으로 배치됩니다. 따라서 실행 영역이 선행 실행 영역의 끝 부분 바로 뒤에 배치될 수 있습니다.

--reloc 옵션은 재배치 가능한 이미지를 만드는 데 사용됩니다. 자체적으로 사용될 경우 --reloc는 이미지를 단순 타입 1과 유사하게 만들지만 단일한 로드 영역에는 RELOC 특성이 있습니다.

ropi 예제 변형

이 변형에서 실행 영역은 메모리 맵에 연속적으로 배치됩니다. 그러나 --ropi는 RO 출력 섹션을 포함하는 로드 및 실행 영역을 위치 독립적으로 만듭니다.

Example 5.12--ro-base 0x010000 --ropi의 사용에 해당하는 스캐터 로딩 설명을 보여줍니다.

Example 5.12. 위치 독립적 코드

LR_1 0x010000 PI        ; The first load region is at 0x010000. 
{
    ER_RO +0            ; The PI attribute is inherited from parent.
                        ; The default execution address is 0x010000, but the code can be moved.
    {
        * (+RO)         ; All the RO sections go here.
    }
    ER_RW +0 ABSOLUTE   ; PI attribute is overridden by ABSOLUTE.
    {
        * (+RW)         ; The RW sections are placed next	. They cannot be moved.
    }
    ER_ZI +0            ; ER_ZI region placed after ER_RW region.
    {
        * (+ZI)         ; All the ZI sections are placed consecutively here.
    }
}

Example 5.12에서 표시되듯이, ER_RO 즉, RO 실행 영역은 로드 영역 LR_1에서 PI 특성을 상속합니다. 다음 실행 영역인 ER_RWABSOLUTE로 표시되고 기준 지정자의 +offset 형식을 사용합니다. 이렇게 하면 ER_RWER_RO에서 PI 특성을 상속하지 못합니다. 또한, ER_ZI 영역에는 +0의 오프셋이 있기 때문에 ER_RW 영역에서 ABSOLUTE 특성을 상속합니다.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0206GK
Non-Confidential