먼저 설정에 대한 몇 가지 세부정보는 다음과 같습니다.
- 리눅스-3.14.1
- ARM am335x 칩
- U-Boot 부트로더
내가 달성하고 싶은 것:
- U-Boot는 initramfs가 포함된 커널을 로드합니다(이 커널을 1이라고 함).
- U-Boot는 이 커널을 실행합니다.
- 커널 1은 내장된 initramfs를 포함하지 않는 커널 2를 로드합니다. NFS 루트를 사용합니다.
- 커널 1은 커널 2를 실행합니다.
질문:
커널 1은 커널 2를 실행할 수 없습니다. 이것이 제가 본 마지막 내용입니다.
[ 8.819174] Starting new kernel [ 8.822539] Bye!
핵심:
- initramfs 관련 설정을 제외하면 코어 1과 코어 2 모두 동일한 구성을 갖습니다. 모두 kexec가 활성화되어 있습니다.
- 커널 1은 부팅 루프가 성공할 수 있도록 다른 커널 1을 kexec할 수 있습니다.
- 커널 2는 U-Boot에서 직접 성공적으로 부팅할 수 있습니다.
- 커널 1과 2는 동일한 장치 트리를 사용합니다.
발생할 수 있는 문제:
- 내 NFS 루트에 잘못된 커널 명령줄 옵션이 있을 수 있지만 이러한 옵션은 대부분 U-Boot 작업에서 복사되었습니다.
- 루트 파일 시스템에 문제가 있다면 적어도 콘솔에서 뭔가를 볼 수 있을 것이라고 생각했습니다.
추가 생각:
- 아마도 이는 커널 크기의 큰 차이(k1=4523344, k2=2859240)와 관련이 있을 수 있습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
문제는 kexec가 zlib 없이 컴파일되므로 uImage 커널을 처리할 수 없다는 것입니다. 원래 "이미지" 커널 2는 정상적으로 부팅됩니다.