Raspberry PI 2 부트 과정

라즈베리파이 2의 부트과정은 단순하지 않다.

SoC내부에 ARM Cortex-A7이 4개가 있고, GPU도 있어서 두 개 다 부팅을 해야 한다.

내부에 부팅용 ROM이 내장되어 있고, RAM을 ARM과 GPU가 share하여 사용하도록 조정하며, ARM쪽에 사용된 RAM을 상부에서 맨 바닥(0x0000_0000)으로 이동시킨다. 이렇게 해서 리눅스 커널에서 사용하는 물리메모리의 위치는 0x0000_0000이 된다.

여러 번의 부트로더가 동작하는데 아래의 그림을 참고하기 바란다.

Raspberry

3 thoughts to “Raspberry PI 2 부트 과정”

  1. SD Card는 2개로 표시되어 있는데, 한개 아닌가요?
    SD Card boot 파티션-FAT32는 어떤 걸 의미하는지 궁금합니다.
    또한,
    U-Boot 사용의 경우, uImage를 SDRAM에 어떻게 올렸는지 방법이 궁금합니다.

  2. 1) 하나의 SD 카드를 사용하며 내부에 두 개의 파티션을 구성하였습니다.
    rasberry pi2용 sd 카드에 사용되는 jessie 이미지를 살펴보면 다음과 같이 fat32와 ext4 2 개의 파티션을 사용하였습니다. mount를 해보면 두 번째 파티션인 ext4에 커널의 파일 시스템이 구성되어 있는 것을 확인 할 수 있습니다.

    $ fdisk -l jessie.img
    Disk jessie.img: 4.1 GiB, 4371513344 bytes, 8538112 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x623fdbf4

    Device Boot Start End Sectors Size Id Type
    jessie.img1 8192 137215 129024 63M c W95 FAT32 (LBA)
    jessie.img2 137216 8538111 8400896 4G 83 Linux

    아래와 같이 /mnt 디렉토리에 마운트를 직접해서 확인해보시면 더 빠를 듯 합니다. (offset 마운트할 두 번째 파티션인 jessie.img2의 start 섹터 값 x 512바이트을 사용합니다)
    # sudo mount -v -o offset70254592 -t ext4 jessie.img /mnt

    만일 u-boot를 먼저 올리고 커널을 구성하려면 2 가지 방법이 있습니다.
    1) 첫 번째 파티션에 있는 부트로더를 u-boot로 교체. (Video Core를 사용한 u-boot 이므로 포팅 사례가 있는지 확인해야 할 듯합니다.)
    2) 두 번째 파티션에서 kernel.img 대신 u-boot를 rasberry pi2의 환경(arm)에 맞추어 포팅(인터넷에 있음)한 후 kernel.img가 그 다음에 로드되게 합니다.
    * 두 번째 방법은 인터넷에 사례들이 있으나 첫 번째 방법은 사례가 있을지 모르겠습니다.

  3. u-boot를 성공적으로 올릴 정도가 되면 uImage 위치를 지정하여 올리는 것은 무척 쉽습니다. (u-boot 인터넷 사례에서 나온 것을 참고하세요)

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.