일반적인 Rockchip AP의 부팅 흐름 및 Rockchip Wiki의 내용을 정리 및 설명한 글입니다.

글 하단에 참조된 Rockchip wiki에서 추가적인 내용 및 영문 내용을 확인 할 수 있으니 참고 바랍니다.

 

Rockchip 부팅 흐름에서 부트로더 단계에서 두개의 스테이지를 가지고 있는데, 첫번째 스테이지는 Rockchip의 miniloader 또는 u-boot의 tpl/spl 단계에서 ddr initialize 및 초기 설정 후 두번째 스테이지에서 kernel 로 점프하기 위한 준비를 위하여 u-boot을 실행한다.

 

  • U-Boot TPL/SPL or rockchip U-Boot, fully source code
  • Rockchp idbLoader which is combinded by Rockchip ddr init bin and miniloader bin from Rockchip rkbin project;

 

일반적인 U-Boot 부팅 스테이지 사용 시 하기의 표를 참고

Rochip Wiki U-Boot Boot Stage table

 

Boot Rom에 Rom Code(idbLoader)를 Write하여 ddr init 및 초기 AP initialize가 필요한 부분을 수행하고 u-boot 코드로 점프하게 된다.

 

일반적인 이미지 업데이트 모드는 u-boot 에서 GPIO Pin 형태로 Boot-pin 또는 switch 인식하여 전환하게 되는데,

만약 BootRom 내에 이미 Code가 Write 되어 Rom 내역을 수행하고 U-Boot로 jump하는 흐름에서 문제 발생되었을 때는 정상적으로 부팅을 하지 못하게 된다.

 

이 상황에서 Mask Rom 모드로 진입이 가능하도록 eMMC 또는 부팅 매체로 jump되지 못하도록 설정하여 Rom 이미지를 다시 Write 또는 설정한다.

 

Rockhip AP의 Boot Flow는 아래의 그림과 같다.

Rochip Wiki U-Boot Boot Flow

 

위의 그림에서 각각 나와 있는 부팅 흐름은 크게 두가지이다.

 

  • Boot Flow 1 : 일반 적인 Rockchip Boot Flow로 Rockchip miniloader 바이너리를 사용
  • Boot Flow 2 : 일반적인 대부분의 AP 부팅 시퀀스로 U-Boot TPL/SPL에서 DDR init 을 진행하고 다음 스테이지 진행

보통의 경우 위의 두 가지 중 Boot Flow 1을 주로 쓰며, 바이너리 형태로 배포되는 miniloader 를 rkbin github에서 받아

Android Tool을 이용하여 프로그램을 넣는다.

 

*rkbin github : GitHub - rockchip-linux/rkbin: Firmware and Tool Binarys

 

GitHub - rockchip-linux/rkbin: Firmware and Tool Binarys

Firmware and Tool Binarys. Contribute to rockchip-linux/rkbin development by creating an account on GitHub.

github.com

 

 

rkbin 내용은 바이너리 형태로만 배포되며 miniloader 실행 시 포함된 ddr_xx.bin 바이너리 등에 의해 장착된 DRAM 의

사이즈와 연결 상태 및 간이로 DQS를 설정하도록 되어 있다.

 

DDR 설정 이후 u-boot.img로 점프 후 커널을 로드하기 위한 u-boot 코드가 실행되고 이후의 시퀀스는 일반적인 임베디드 리눅스 커널과 동일한 방식으로 커널이 로드된다.

 

DDR 설정을 배포된 바이너리에서 설정하게 되므로 커스터마이즈 및 보드 설계 시 지원되는 DRAM의 파트를 확인해야 하며 Pin Layout에 유의 해야 한다.

 

위의 부팅 시퀀스 이미지 중 ARMv8 이상의 프로세서 또는 안드로이드에서의 Trusted Boot 을 지원하기 위하여 별도의 Trust.img 또는 bl31, bl32.elf, tee.bin 가 존재한다.

 

Security Boot(Trusted)는 리눅스에서도 적용이 가능하나 적용이 필요 없다면 U-boot에서 zImage 와 dtb 파일을 로드하여 커널 부팅을 진행하면 된다.

 

다만, Bootloader(U-boot) 빌드 시 u-boot.img 파일이 필요하므로 빌드 시 img 파일이 생성될 수 있도록 한다.

(Rockchip SDK의 경우 'mkimage' 등의 커맨드를 통해 Rockchip 이미지용 img 파일 생성 레시피가 적용되어 있다.)

 

Android Tool 등의 사용 시 유의해야 할 사항은 Rockchip AP RK31xx, RK33xx 등의 경우 Rockchip Partition으로 생성되므로 커널에서 해당 옵션이 포함되어 빌드 되었는지 참고 하여야 한다.

 

Rockchip Partition으로 생성되어도 파일시스템 형식은 ext3,4 등 정상적으로 생성되는 것으로 확인된다.

(이게 왜 별도로 만들어졌는지는 모르겠다....)

 

Rockchip AP 프로그래밍 시에는 위의 설명과 같이 ROM Code 프로그램과 Secondary BootLoader 부분에 유의하여 진행하면 다른 문제점 없이 정상 동작됨을 확인할 수 있다.

 

파일시스템 관련은 init 시퀀스이므로 Ubuntu, Debian, Buildroot(Busybox)등의 종류 상관없이 모두 정상적으로 Rootfs 파티션에 위치해있고 'init=' 과 파일시스템 마운트 옵션만 지정한다면 정상 동작 할 것이므로 생략한다.

 

 

 

 

 

 

 

 

 

 

 

 

참고 : http://opensource.rock-chips.com/wiki_Boot_option

'System Programming > Arm' 카테고리의 다른 글

라즈베리파이(RPI)4 OpenOCD JTAG 연결 디버깅 방법  (0) 2023.06.18
ARM Processor 7개의 Mode  (0) 2016.08.29
ARM Processor 개요  (0) 2016.08.29

+ Recent posts