임베디드 Linux 원칙을 이해하려고하고 있으며 u-boot 출력시 주소를 파악할 수 없습니다.U-Boot 프로세스의 Linux로드 주소 이해
예를 들어, 나는 UDOO 보드 i.MX6 쿼드 프로세서를 기반으로 내가 U-부팅에서 다음과 같은 출력을 가지고 있습니다
U-Boot 2013.10-rc3 (Jan 20 2014 - 13:33:34)
CPU: Freescale i.MX6Q rev1.2 at 792 MHz
Reset cause: POR
Board: UDOO
DRAM: 1 GiB
MMC: FSL_SDHC: 0
No panel detected: default to LDB-WVGA
Display: LDB-WVGA (800x480)
In: serial
Out: serial
Err: serial
Net: using phy at 6
FEC [PRIME]
Warning: FEC MAC addresses don't match:
Address in SROM is 00:c0:08:88:a5:e6
Address in environment is 00:c0:08:88:9c:ce
Hit any key to stop autoboot: 0
Booting from mmc ...
4788388 bytes read in 303 ms (15.1 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
Image Name: Linux-3.0.35
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4788324 Bytes = 4.6 MiB
Load Address: 10008000
Entry Point: 10008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
Starting kernel ...
내가로드 주소 0x10008000의 가치를 이해하지 않습니다. 이 특정 프로세서의 설명서에 따르면 주소 영역 0x10000000 - 0xffffffff는 주 메모리에 매핑됩니다. 하지만 0x8000 오프셋 무엇입니까? 나는이 가치에 대한 이유를 알 수 없다.
커널 이미지가로드되는 주소 0x12000000도 이해할 수 없습니다. SD 카드에 매핑 된 메모리 영역이 있습니까?
제발,이 주소에 대한 설명이나이 주제에 대한 리소스에 대한 참고 자료를 제공해 줄 수 있습니까? 필자의 목표는 u-boot 및 Linux 커널을 다른 보드로 이식하는 방법을 배우는 것입니다.
감사합니다.
커널 부팅 요구 사항은 [Documentation/arm/Booting] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/Booting)에 설명되어 있습니다. . 나는 정확하게 기억하지 못한다. 왜 TEXT_OFFSET이 일인지는 모르지만, 그렇다. – Notlikethat
Typical은 'ATAGS'가 가장 낮은 주소에 저장되므로 RAM + 0x8000의 시작입니다. Freescale에서 iMX6 참조 설명서를 다운로드하면 모든 주소가 처음 몇 장 중 하나에 포함됩니다. –
* "커널 이미지가로드되는 주소 0x12000000도 이해할 수 없습니다."* - U-Boot는이 값을 저장하기 위해 ** loadaddr ** 변수를 사용합니다. 그것은 상위 메모리에서 어느 정도 임의의 값이지만 U-Boot가 실행중인 위치보다 여전히 아래에 있습니다. 이 주소는 비 휘발성 메모리 (예 : NAND 또는 SDcard)에서 읽거나 네트워크에서로드 할 때 커널 uImage 또는 zImage 파일이 주 메모리에 임시 저장되는 위치입니다. uImage 또는 zImage에 대한이 ** loadaddr **는 커널 이미지의 압축 해제를 허용하기 위해 실제 커널의 "로드 주소"0x10008000과 달라야합니다. – sawdust