일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- gui
- 최단경로
- AWS
- 디바이스 드라이버
- 디바이스드라이버
- 모듈
- 라즈비안
- dfs recursive
- tftp 서버
- 일곱 난쟁이
- 2309
- .config
- tftp
- tftp-hpa
- 백준
- putty
- Module.symvers
- 한수
- 인접행렬
- stack
- 라즈베리파이3
- 라즈베리파이3 ftfp
- u-boot
- uboot
- 라즈베리파이 uboot
- DFS
- GPIO
- 라즈베리파이3 라즈비안
- deque
- STL deque
- Today
- Total
달공이와 임베디드
라즈베리파이 3B 를 U-boot 를 통해 실행하기 본문
라즈베리파이 3B 를 U-boot 를 통해 실행하기
라즈베리 파이의 부팅 순서는 다음과 같다.
첫번째 부트로더가 SD카드에 있는 두번째 부트로더(bootcode.bin)을 호출한다. 두번째 부트로더가 SD카드에 있는
config.txt를 읽고 실행한다. 두번째 부트로더가 세번째 부트로더(start.elf)를 호출 및 실행하여, ARM Core를 활성화한다.
ARM Core가 활성화되면 네번째 부트로더(kernel.img)를 호출, 실행한다.
라즈베리파이 3이 라즈비안(OS)로 실행되기 위한 최소 파일은 다음과 같다.
bootcode.bin, start.elf, kernel7.img, bcm2710-rpi-3-b.dtb, overlays (폴더)
라즈베리파이 3이 u-boot 을 통해 라즈비안으로 실행되기 위한 최소 파일은 다음과 같다.
bootcode.bin, start.elf, kernel7.img, bcm2710-rpi-3-b.dtb, overlays (폴더)
config.txt, u-boot.bin
여기서 config.txt 는 위에서 설명한 네번째 부트로더를 호출할 때 커널이 아닌 u-boot 를 호출하도록 설정할 수 있고,
이 때 호출하는 파일이 바로 u-boot.bin 인 것이다.
따라서 우리는 config.txt 를 수정하는 것과 u-boot.bin 을 만드는 것이 필요하다.
u-boot.bin 컴파일 및 config.txt 파일 수정
1-1. u-boot 다운
(1) u-boot git down : git clone git://git.denx.de/u-boot.git
GIT으로부터 해당 uboot 을 받아온다. 이때 가장 기본이 되는 denx u-boot 을 받아온다.
(2) cd u-boot
GIT이라는 명령어를 통해 받아오기 위해서는 다음과 같은 과정이 전에 수행되어야 한다.
1. apt-get update / apt-get upgrade
2. apt-get install git
1-2. uboot.bin 만들기( 다운 받은 u-boot 파일을 보드에 맞게 컴파일 )
(3) export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
다음은 받아온 u-boot 파일을 이용하여 u-boot.bin 바이너리 파일로 컴파일 하기 위해 컴파일 정보를 설정해
주는 단계이다. 여기서는 gnueabihf- 버전을 사용하고 있다. 이것은 gnueabi- 버전에서 좀더 상향된 버전이다.
위 명령어를 수행하기 위해서는 다음과 같은 과정이 전에 수행되어야 한다.
apt-get install gcc-arm-linux-gnueabihf
또는 apt-get install gcc-arm-linux-gnueabi
위의 경우에는 32bit 에 맞게 컴파일 해주는 것이고, 만약 64bit 을 컴파일 하려한다면
apt-get install gcc-aarch64-linux-gnu
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
(4) make rpi_2_defconfig (라즈베리파이 3이지만 라즈베리파이2 도 호환이 됨)
(5) make all
2. config.txt 파일 설정
config.txt 파일에 다음을 입력
dtoverlay=pi3-miniuart-bt
kernel=u-boot.bin ( 커널을 동작시키는 부분에 유부트를 실행하도록 설정 )
라즈비안 이미지를 SD카드에 설치할 때 만든 파일 중 필요한 파일과 위 과정을 통해 만들거나 설정해준 파일을 모으면
위와 같다. 이제 u-boot 을 통해 라즈비안 커널을 부트해 보자.
u-boot 을 통한 커널 부트
위와 같은 파일을 가지고 라즈베리파이 3B을 실행시키면 다음과 같은 명령어 창이 뜬다. "uboot>" 이것은 uboot 가
제공하는 부팅 설정을 위해 제공하는 터미널 창이라 할 수 있겠다. 이 터미널에도 다양한 명령어가 존재한다. 간단하게
기본적인 부팅을 위해 필요한 명령어는 다음과 같다. ( u-boot 는 기본적으로 개발환경에서 부팅을 편리하게 하기 위한
개발 툴이다. ip 설정과 serverip 설정이 변수로 지정되는 것은 당연하다고 할 수 있다. )
setenv bootargs ( 부팅시 환경변수 설정 )
setenv ipaddr 211.188.17.38 setenv serverip 211.188.17.39 ( ip & server address 설정 )
saveenv ( 저장된 변수들은 uboot.env 파일에 저장된다. saveenv 명령어를 사용하면 생성됨 )
printenv / printenv ipaddr ( 설정된 변수들을 보여줌. 기본적으로 설정된 것도 많음 )
fatload mmc 0:1 ${kernel_addr_r} kernel7.img ( 여기서 kernel_addr_r 은 기본적으로 설정 )
기본적인 u-boot의 명령어 구조를 알아보았으니, 이제 u-boot 를 통해 커널을 부트시켜보자.
다음과 같이 명령어를 통해 각 주소( kernel_addr_r 또는 fdt_addr_r )에
커널이미지와 DT(Device tree)를 올리고 부팅을 수행하면 된다.
fatload mmc 0:1 ${kernel_addr_r} kernel7.img
fatload mmc 0:1 ${fdt_addr_r} bcm2710-rpi-3-b.dtb
bootz ${kernel_addr_r} - ${fdt_addr_r}
※ 이때, 불러오는 커널의 이미지가 uimage 인 경우 bootm 을 사용하면 된다.
'라즈베리파이' 카테고리의 다른 글
OpenCV 설치하기 (0) | 2018.09.21 |
---|---|
라즈베리파이 절전 모드 해제방법 (0) | 2018.09.20 |
라즈베리파이 3B 를 U-boot & TFTP 실행하기 (0) | 2016.08.17 |
라즈베리파이 3B 실행하기 (0) | 2016.08.16 |