임베디드 리눅스를 쉽게 접근할수 있게 배포된 “Buildroot”를 라즈베리파이 3에 올리는 방법
얼마전에 코드도사에서는 라즈베리파이3에 “OpenWRT”를 직접 컴파일 하여 올리는 방법에 대하여 기술한 적이 있습니다. 이번에는 라즈베리파이3에 또다른 오픈소스 빌드환경인 “Buildroot”를 올리는 방법에 대하여 설명을 해 보겠습니다.
Buildroot는 OpenWRT와 같이 임베디드 시스템에 리눅스를 손쉽게 올릴 수 있도록 menuconfig와 makefile, 각종 오픈 소스 패키지등이 포함된 빌드 환경 시스템입니다.
위의 링크는 “Buildroot”의 공식 홈페이지입니다. 공식 홈페이지에서는 Buildroot에 대한 소스와 문서등을 제공합니다. 이들 소스와 문서등은 누구나 다운로드 할 수 있고 열람이 가능합니다.
그래서 Buildroot는 수많은 CPU 제조사나 BSP 개발사에서 사용하여 추가 개발 과정을 거쳐서 배포하기도 합니다. 제가 제공받았던 몇몇 BSP 패키지에도 “Buildroot”의 툴체인과 빌드환경이 들어있는 것을 확인한 적이 있습니다.
Buildroot는 친절하게도 라즈베리파이3에서도 올릴 수 있게 가이드 및 패키지를 제공하고 있습니다. 물론 라즈베리파이3 뿐만 아니라 라즈베리파이 1 ~ 4까지 모든 라즈베리파이 제품군에도 Buildroot를 컴파일 하여 탑재할 수 있고 제공하고 있습니다.
그럼 이번 포스트에서는 직접 Buildroot를 다운로드 하고 컴파일 하여 라즈베리파이3에 올릴 수 있는 방법을 소개해 보겠습니다. 의외로 간단하니 놀라지 마세요^^
Buildroot 소스 다운로드 받기 및 컴파일
먼저 Buildroot 소스를 다운로드 받습니다. 공식 홈페이지에 접속하면 최신 버전의 Buildroot 컴파일용 소스 패키지를 다운로드 받을 수 있습니다.
위의 링크에 접속하면 Buildroot의 소스 패키지를 다운로드 받을 수 있습니다. 홈페이지에 접속해 보면…
위의 화면이 나오는데요, 최신 릴리즈 버전은 2020.02.1 입니다. 둘중에 어떤 것을 받아서 상관은 없습니다. 저는 .tar.bz2 파일을 다운로드 받아보겠습니다.
압축파일이 받기 약간 귀찮다면 Buildroot의 git repo 를 직접 clone 해도 됩니다. 주소는
git clone git://git.buildroot.net/buildroot 혹은 git clone https://git.buildroot.net/buildroot 으로 clone을 해도 괜찮습니다.
다운로드를 받고 적절한 곳에 압축을 푼 다음에 아래와 같이 입력합니다.
$ make raspberrypi3_defconfig
Buildroot 에서는 라즈베리파이 3 의 config 파일을 미리 만들어 놓았습니다. 따라서 만들어진 config 파일을 그대로 적용하고 컴파일만 해주면 됩니다.
다음에 make menuconfig로 한번 확인해 보겠습니다.
CPU 아키텍처가 cortex-A53 이라고 설정이 되어 있네요. 라즈베리파이 3 CPU가 맞습니다. 그대로 빠져나온 다음에 make 를 입력하여 Full Compile을 진행합니다.
참고로 Buildroot를 컴파일하면 “OpenWRT”와 같이 자동으로 소스 패키지와 리눅스 커널, 툴체인 등을 알아서 다운로드를 하게 됩니다. 따라서 별도로 프로그래머가 설정을 해야 하거나 하는 것은 없습니다.
컴파일과 패키지 다운로드를 동시에 진행하기 때문에 PC나 서버의 성능에 따라서는 꽤 시간이 걸릴 수도 있습니다. 제 PC 같은 경우에는 40분 정도가 소요되는군요. 아마 처음에는 시간이 꽤 소요되지만 패키지를 다운로드 받은 후에 재 컴파일 시에는 시간이 훨씬 더 줄어듭니다.
컴파일이 완료가 되면 위와 같이 “sdcard.img”를 생성했다는 메시지가 나타납니다. 컴파일이 별 문제 없이 종료가 되었네요. Buildroot에서 컴파일은 이제 더이상 안해도 됩니다. 간단하군요^^
이제 SD Card에 Write를 해줄 펌웨어 파일을 찾아야 합니다. “output/images” 에 지금까지 컴파일한 결과물들이 들어있습니다. 한번 살펴볼까요?
여러 파일들이 생성이 되었습니다. 그런데 여기서 실질적으로 필요한 파일은 “sdcard.img” 파일 한개입니다. 대략 160 MB 정도 되는 파일인데요, 이 파일에 리눅스 커널, DTB, Root Filesystem 이 한꺼번에 합쳐져 있습니다.
SD Card에 이미지를 복사하기 위해 “sdcard.img”를 자신의 PC로 복사를 해줍니다. 여기서 “Win32 Disk Imager”를 실행시킵니다.
다음으로 좀전에 컴파일하여 생성된 “sdcard.img” 파일을 선택해 줍니다. 개발 PC나 서버가 삼바로 설정이 되어있으면 훨씬 더 수월할꺼 같네요. 일단 저는 제 PC로 복사를 하였습니다. 다음에 준비한 빈 SD Card를 인식시킨 후에 “Write”를 누릅니다. 그러면 Buildroot의 이미지가 SD Card로 복사가 됩니다.
한 1~2분 정도 지나면 SD Card로 복사가 완료됩니다. 그런 다음에 SD Card를 라즈베리파이3의 슬롯에 꼽으면 됩니다.
라즈베리파이3 부팅
그럼 컴파일한 Buildroot의 이미지가 라즈베리파이3에서 정상적으로 부팅하는지 확인을 해볼까요? 먼저 라즈베리파이3의 시리얼 포트를 연결하여 시리얼 통신을 할 수 있게 준비합니다.
라즈베리파이3에서 시리얼 통신 관련 내용은 아래 링크를 참고하시기 바랍니다.
저는 USB to Serial 어뎁터를 리눅스의 개발 PC 에 연결해 놓은 상태입니다. 리눅스에는 minicom 이라는 어플리케이션으로 시리얼 통신이 가능합니다. minicom 관련해서는 이후에 별도로 설명을 해보도록 하겠습니다.
minicom을 실행하고 라즈베리파이 3의 전원이 켜보니 아래와 같은 터미널 화면을 볼 수 가 있네요.
라즈베리파이3에서 buildroot의 이미지가 정상적으로 부팅이 되는 것을 알 수 있습니다. 처음 전원을 인가하고 대략 3~4초 정도는 정지가 되어 있는데요, 이 시간이 지나면 터미널에서 부팅 메시지가 주욱~ 올라옵니다.
로그인 계정은 “root”를 입력하면 됩니다. 패스워드는 별도로 설정되어 있지 않습니다.
라즈베리파이3에 이더넷 케이블을 연결하면 자동적으로 IP와 DNS정보를 받아옵니다. 따라서 외부와의 네트워크도 동시에 활성화 됩니다. 아마 기본적으로 buildroot의 루트 파일 시스템에 DHCP Client가 내장이 되어 있는거 같습니다.
이상으로 라즈베리파이 3에 “Buildroot”를 컴파일하여 직접 올리는 방법에 대해 알아봤습니다. “Buildroot”는 취지대로 임베디드 리눅스를 좀더 쉽게 접근할 수 있도록 make 만 실행하면 자동으로 소스 패키지와 툴체인 소스를 내려받아 컴파일을 해주는 꽤 유용한 도구입니다. “Buildroot”로 임베디드 리눅스를 공부하는데에 도움이 되었으면 합니다.