2015-01-24 7 views
10

임베디드 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 커널을 다른 보드로 이식하는 방법을 배우는 것입니다.

감사합니다.

+1

커널 부팅 요구 사항은 [Documentation/arm/Booting] (https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/Booting)에 설명되어 있습니다. . 나는 정확하게 기억하지 못한다. 왜 TEXT_OFFSET이 일인지는 모르지만, 그렇다. – Notlikethat

+1

Typical은 'ATAGS'가 가장 낮은 주소에 저장되므로 RAM + 0x8000의 시작입니다. Freescale에서 iMX6 참조 설명서를 다운로드하면 모든 주소가 처음 몇 장 중 하나에 포함됩니다. –

+1

* "커널 이미지가로드되는 주소 0x12000000도 이해할 수 없습니다."* - U-Boot는이 값을 저장하기 위해 ** loadaddr ** 변수를 사용합니다. 그것은 상위 메모리에서 어느 정도 임의의 값이지만 U-Boot가 실행중인 위치보다 여전히 아래에 있습니다. 이 주소는 비 휘발성 메모리 (예 : NAND 또는 SDcard)에서 읽거나 네트워크에서로드 할 때 커널 uImage 또는 zImage 파일이 주 메모리에 임시 저장되는 위치입니다. uImage 또는 zImage에 대한이 ** loadaddr **는 커널 이미지의 압축 해제를 허용하기 위해 실제 커널의 "로드 주소"0x10008000과 달라야합니다. – sawdust

답변

1

include/configs 폴더를 확인하십시오. 그것은 매우 유사한 보드에 다른 포트,베이스에

i.MX uboot include/configs

포트 uboot 모든 보드의 정의를 포함하고 거기에서 수정합니다.

+1

alex : 링크가 계속 작동합니까? –

6

u-boot의 환경 변수를 확인하면 커널 이미지가 부팅 장치에서 fatload과 같은 명령을 통해 RAM 위치 (여기, 12000000)로 복사된다는 것을 알 수 있습니다.

이제는 LOADADDRESS이 아닙니다. 커널을 컴파일하는 동안 명령 행에 LOADADDRESS을 주면이 주소는 대부분 프로세서의 실제 주소 공간에있는 RAM 시작부터 32K 오프셋에 있습니다.

RAM은 10000000에 매핑되고 커널 LOADADDRESS10008000 (32K 오프셋)입니다. bootm 명령은 12000000에서 10008000 주소로 커널 이미지의 압축을 풀고 kernel entry point을 호출합니다.