저는 P1022RDK(P1022 Core) 플랫폼에서 ltib Linux를 실행하고 있습니다. 512MB = 0x20000000의 메모리가 있습니다. 내 Linux 커널이 마더보드 메모리의 두 번째 절반(예: 256MB에서 512MB)을 사용하고 첫 번째 절반은 다른 목적으로 예약하고 싶습니다.
이를 위해 ltib를 사용하여 Linux 커널을 빌드하고 다음 커널 구성을 설정했습니다. 내가 올바른 방법으로 이 일을 하고 있는지 제안해 주세요.
CONFIG_LOWMEM_SIZE = 0x10000000 # 256 MB
CONFIG_PHYSICAL_START = 0x10000000 # Starting from 256MB (second half of memory)
Uboot에서는 다음을 통해 커널을 로드합니다.
setenv loadaddr 0x11000000 # Kernel base = 0x10000000 + 0x01000000 (offset)
setenv fdtaddr 0x10c00000 # Kernel base = 0x10000000 + 0x00c00000 (offset)
bootm $loadaddr - $fdtaddr My kernel Load address is 0x10000000 & kernel entry point is 0x10000000
위의 구성/단계를 사용하면 내 커널이 Uboot에서 다음 위치에 멈췄습니다.
Booting kernel from Legacy Image at 11000000 ...
Image Name: Linux-2.6.32.13
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 3352851 Bytes = 3.2 MB
Load Address: 10000000
Entry Point: 10000000
Verifying Checksum ... OK
Flattened Device Tree blob at 10c00000
Booting using the fdt blob at 0x10c00000
Uncompressing Kernel Image ... OK
그것~해야 한다여기에서 FDT의 압축을 풀고 계속하세요.
어떤 아이디어가 있나요?
답변1
David Schwartz의 답변에 세부 정보를 추가하려면 커널 부팅 매개변수를 지정하여 커널에서 사용하는 번호와 시작 주소를 설정하여 원하는 작업을 수행할 수 있습니다.
예를 들어 커널 부팅 매개변수에 다음 명령을 추가합니다.
mem=256M@0x80000000
0x80000000에서 시작하여 256M을 사용해야 한다고 커널에 지시합니다. 이것이 바로 여러분에게 필요한 것입니다.
CONFIG 설정을 원래 값으로 복원하고 커널이 기본 구성(mem= 설정 없이)으로 올바르게 부팅되는지 확인해야 합니다.
먼저 다음을 지정하여 mem=을 시도해 볼 수 있습니다.
mem=256M
이렇게 하면 0부터 시작하여 메모리 영역을 줄이고 상위 256M은 사용되지 않은 채로 남겨둘 수 있습니다. 이것이 작동한다는 것을 알게 되면 위의 오프셋과 함께 256M을 사용하십시오.
또한 최종 커널 메모리 영역과 충돌하지 않도록 uBoot를 통해 초기 압축 이미지가 RAM에서 로드되는 위치에 주의하세요.
답변2
반대 방향으로 하여 상위 256MB를 사용하지 않은 상태로 남겨두어야 한다고 생각합니다.CONFIG_PHYSICAL_START당신이 생각하는 대로 되지 않습니다. 커널이 사용하는 물리적 페이지가 아니라 커널이 로드되는 위치를 제어합니다.