읽었습니다 this tutorial 안내를 따라 코드를 실행할 수 있습니다. 하지만 질문이 있습니다. 1)로드 주소와 런타임 주소가 모두 필요한 이유는 무엇입니까? 우리가 .data도 플래시에 넣었 기 때문에 이해합니다. 그렇다면 우리가 왜 거기서 앱을 실행하지 않고 RAM에 복사하기위한 시작 코드가 필요한가? 우리가 여기 링커 스크립트와 시작 코드를 필요
를 연결 LD 내가 imx6q 위해 (코어 텍스 A9)에 코드를 연결하는 링커 스크립트를 가지고있는 동안은 : OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(Reset_Handler)
/* SEARCH_DIR(.) */
GROUP(li
저는 베어 메탈 커널을 작성 중이며 NOLOAD 섹션의 경우 출력이 ld 인 것을 이해하는 데 어려움이 있습니다. 나는 MMU가 활성화 된 상태에서만 존재하는 기호를 선언하므로 VMA와 LMA는 동일하지 않습니다. 나는 선언에 사용되는이 같은 이러한 섹션 _foobar_start = .;
.foobar : AT(ADDR(.foobar) - VA_PA_OF
ARC 프로세서 맵 파일을보고 끝 주소가 시작 주소보다 작은 섹션을 찾았습니다. 이것은 정상입니까, 아니면 링커 스크립트 나 다른 문제입니까? Section name type start addr end addr length
RM0_SECTION bss 00040000 0003ffff 00000000
GCC에서 MEMORY 명령은 대상에있는 메모리 블록의 위치와 크기를 설명합니다. 명령은이 way을 사용해야합니다. MEMORY
{
name [(attr)] : ORIGIN = origin, LENGTH = len
...
}
지금, 나는 링커 램 메모리 섹션이 방법을 정의 (은 TriCore 마이크로 컨트롤러는 Tri
가상 메모리 끝에 특수 섹션이있는 프로그램을 만들고 싶습니다. 그래서 나는이 같은 링커 스크립트 뭔가를하고 싶어 : /* ... */
.section_x 0xffff0000 : {
_start_section_x = .;
. = . + 0xffff;
_end_section_x = .;
}
문제는 그 GCC/LD/glibc는이
링크 된 파일에 특수 섹션을 만들었으므로 다른 세그먼트 권한을 갖도록 세그먼트를 구분해야합니다. 링커 스크립트에서 PHDRS 명령은 링크 된 파일의 세그먼트를 지정할 수 있습니다. 그러나 document에 나와 있듯이 PHDRS는 명령에 지정된 것 이외의 기본 정의 세그먼트를 만들지 않습니다. 그리고 ld --verbose 출력에는 PHDRS 명령이 없습니
링커 스크립트 나 맵 파일을 사용하여 심볼의 이름을 바꿀 수 있습니까? 저는 C++과 Fortran의 혼합으로 작성된 코드를 리눅스에서 하나 이상의 Fortran 컴파일러와 함께 사용할 수 있도록 조정하려고합니다. 현재 대소 문자를 구분할 수있는 옵션이있는 Solaris Studio 컴파일러 용으로 작성되었습니다. 나는 메이크 파일 (Makefile)에서와
오히려 새로운 AURIX TriCore MCU에서 일부 링커 스크립트를 적용하고 있습니다. 전혀 이해할 수없는 명령이 있으며 문서 [0]은별로 도움이되지 않습니다. 누군가가 원칙적으로 말해 줄 수, 거기에 무엇을하려고? "글로벌 주소"란 무엇이고 "핵심 지역 주소"는 무엇을 의미합니까? [0] 인피니언 테크놀로지스 AG :은 TriCore 개발 플랫폼, 2