2.6.38을 실행하는 ARMv6 보드(Samsung S3C6410)에 커널 4.6 포팅

2.6.38을 실행하는 ARMv6 보드(Samsung S3C6410)에 커널 4.6 포팅

S3C6410 보드에서 커널 4.6을 실행하려고 합니다.

포트를 완료하고 완전히 부팅하려면 보드의 NAND 플래시 및 SD 컨트롤러와 작동하도록 코어를 구성해야 했습니다.

커널을 포팅/크로스 컴파일하는 것은 이번이 처음이므로 정확한 해결책보다는 문제를 처리하고 진단하는 방법에 대한 조언을 더 찾고 있습니다.

내 보드는 커널 4.6을 부팅할 수 있지만 NAND 플래시나 SD 카드를 볼 수는 없습니다(그래서 rootfs가 없습니다).

실행할 수 있는 커널 제공

이 마더보드에는 "2.6.38-GZSD"가 함께 제공되며 일반 2.6.38과 비교할 때 다음이 포함됩니다.

  • 관심 없는 일부 오디오/비디오/TV/LCD 터치스크린 드라이버

  • 버튼/gpio/pwm/adc용 문자 장치 드라이버, 상관없음

  • yaffs2 파일 시스템(4.6으로 포팅했습니다)

  • 이 보드에 대한 기계 gzsd4610정의arch/arm/mach/mach-s3c64xx

  • NAND 드라이버는 에 있습니다 drivers/mtd/nand/s3c_nand.c. Kernel 4.6에는 해당 플랫폼에 대한 NAND 및 ONENAND 드라이버가 있으므로 2.6.38에서 이전 드라이버를 포팅하는 대신 이를 사용하려고 합니다.

설정

보드에 내장된 부트로더를 통해 소프트웨어를 보드에 업로드했습니다. SD 카드에서 NAND 플래시 메모리로 u-boot 이미지, 커널 이미지, rootfs 이미지를 로드합니다.

직렬 포트를 통해 마더보드와 통신하고 있습니다.

저는 GCC 6.1.1을 사용하여 커널 4.6을 컴파일하고 있습니다. 2.6.38-GZSD 커널 컴파일. 직접 컴파일하려면 GCC 4 버전이 필요합니다.


저는 소스 코드 수정 없이 4.6 커널 소스를 사용하려고 합니다. 따라서 구성 UI를 통해서만 가능합니다( make nconfig이 경우). 플랫폼을 설정하고 모든 관련 드라이버를 활성화했습니다(희망합니다).

GZSD6410이 메인라인에 없기 때문에 머신은 GZSD6410이 아닌 SMDK6410에 대해 설정되었습니다(2.6.38에서 포팅하려면 현재 가지고 있는 것보다 커널에 대한 더 많은 지식이 필요합니다). 나는 이것과 아마도 NAND 드라이버가 부팅 실패의 원인이라고 생각합니다.

현재 명령줄을 사용하고 있습니다.

init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2 loglevel=7 earlyprintk

이에 비해 작동 중인 2.6.38-GZSD 커널의 명령줄은 다음과 같습니다.

init=/linuxrc console=ttySAC0,115200 root=/dev/mtdblock2

특정 질문(및 로그)

핵심SD 카드 리더 초기화 실패.

그것은 또한ONENAND 초기화 실패.

ONENAND 대신 NAND를 사용하려고 하면역시 실패했다.

그럼에도 불구하고 이로 인해 커널이rootfs를 마운트할 수 없고 패닉이 발생함.

이에 비해 2.6.38-GZSD를 사용한 성공적인 부팅 로그는 다음과 같습니다.이와 같이.

관련 정보