link script(ld) 수정 방법
안녕하세요,
아래는 arm-elf-ld에 의해 링크되는 linker.ld 파일인데요,
요렇게 build하게 되면 0x0번지부터 code가 죽.. 실행하게 됩니다.
하지만 제가 원하는 것은 startup code(EVT)부터는 0x0번지부터 실행하면 되는데,
이후 main함수로 branc하고부터는 0x8c000000번지에서 실행하게끔 하고 싶습니다.
MMU를 enable하여 pagetable 수정은 다 끝났는데,
여기서 막히네요. 어디를 어떻게 수정해야 할까요.
스크립트를 해석할 줄 몰라 힘드네요.
도움 부탁 드립니다~~!
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(EVT)
__TEXT_START__ = 0x00000000;
__DATA_START__ = 0x00010000;
__STACK_END__ = 0x00090000;
SECTIONS
{
.text __TEXT_START__ :
{
*startup.o(.text)
*(.text)
*(.text.*)
}
PROVIDE (__etext = .);
.rodata :
{
*(.rodata)
*(.rodata.*)
}
. = ALIGN(4);
__INIT_DATA_START__ = .;
.data __DATA_START__ :
{
*(.data)
*(.data.*)
SORT(CONSTRUCTORS)
}
. = ALIGN(4);
PROVIDE (__DATA_END__ = .);
__bss_start__ = .;
.bss :
{
*(.bss)
*(.bss.*)
*(COMMON)
. = ALIGN(4);
}
. = ALIGN(4);
__bss_end__ = . ;
PROVIDE (end = .);
}
이건 스크립트
이건 스크립트 차원에서 해결하는것 보다는 startup code에 강제로 원하시는 주소로 뛰게끔 code를 집어넣는 것이 해결책인거 같은데요. elf를 따른다면(다른 곳도 비슷한 것으로 알고 있지만) 어차피 code entry는 하나밖에 없습니다. 이거 하고 나서 저거 해라 라는 옵션은 없죠. 원하시는 주소로 뛰는 코드를 만든 뒤에 스크립트가 startup과 main 사이에 해당 코드를 집어넣게 스크립트를 수정해야 겠죠.
추가로
.text __TEXT_START__ :
{
*startup.o(.text)
mainfilename(.text) = 0x8c000000
*(.text)
*(.text.*)
}
형태로 하시면 혹시라도 main이 저 위치에 되는지 모르겠네요. 주소를 절대 주소로 직접 써 넣는건 해보지 못해서;
댓글 달기