라즈베리 파이는 전 세계적으로 널리 쓰이느 리눅스 개발용 보드이자 소형 컴퓨터이다. 설치 과정이 간단하고, 가격 대비 성능이 좋아 다양한 디바이스 드라이버를 구현하는 데 사용할 수 있다. 교육용으로 많이 쓰이며 실전 개발에서도 다양한 데모용 디바이스로 자주 활용된다.
라즈베리 파이 장점
내 라즈베리파이 모델은 ARMv7 아키텍처 기반으로 작동하니 ARM 아키텍처와 관련 동작을 주로 할 예정이다.
ARM 아키텍처는 임베디드 기기에서 많이 사용되므로 공부하면 도움이 된다.
cat /proc/cpuinfo
을 라즈비안 터미널에 작성하면 CPU를 확인 할 수 있다.
불필요한 권한 설정을 피하기 위해 터미널에서 다음 명령어를 입력해 root 권한을 획득한다.
sudo su
만약 root의 비밀번호를 모른다면 root의 비밀번호를 다음 명령어를 통해 설정이 가능하다.
sudo passwd
/home/사용자이름
에 mkdir 폴더이름
을 통해 작업공간을 만든다
cd 폴더이름
을 통해 폴더에 들어가서 작업을 한다.
리눅스의 기본적인 명령어를 모른다면 공부를 하고 오는 것이 좋다.
라즈비안 리눅스 소스코드를 내려받기 전에 다음 명령어를 입력해 유틸리티 프로그램을 설치해야 한다.
apt-get install bc bison flex libssl-dev
이어서 다음 명령어를 입력해 리눅스 커널 소스코드를 다운로드한다
git clone --depth=1 https://github.com/raspberrypi/linux
그 다음 cd linux
와 git branch
로 버전을 확인할 수 있다.
라즈비안의 커널 소스를 내려받았으니 이제 빌드를 할 것이다.
위 사이트를 통해 커널 빌드를 하는 방법을 알 수 있다.
KERNEL=Kernel7
make bcm2709_defconfig
를 통해 커널을 빌드하기 위한 설정을 진행 할 수 있다.
빌드 명령어를 하나 하나 쓰면 많은 시간이 소비된다. 그래서 커널 빌드 명령어를 모아 하나의 파일로 만들 수 있다. 이것을 셀 스크립트
라고 부르고 대부분 임베디드 리눅스 개발에서 활용한다.
작업 공간으로 가서 vim build_rpi_kernel.sh
명령어를 통해 셀 스크립트를 만든다. .sh
가 셀 스크립트이다. 그 다음 밑에 코드를 작성한다
#!/bin/bash
echo "configure build output path"
KERNEL_TOP_PATH="$(cd "$(dirname "$0")" ; pwd -P )"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
KERNEL=kernel7
BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log.txt"
echo "move kernel source"
cd linux
echo "make defconfig"
make O=$OUTPUT bcm2709_defconfig
echo "kernel build"
make O=$OUTPUT zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG
그리고 chmod +x build_rpi_kernel.sh
를 통해 권한을 주고 ./build_rpi_kernel.sh
로 실행을 시킬 수 있다.
이제 코드를 살펴보자.
#!/bin/bash
: bash 쉘로 실행한다
KERNEL_TOP_PATH="$(cd "$(dirname "$0")" ; pwd -P )"
: 현재 작업 디렉터리를 KERNEL_TOP_PATH에 저장한다.
OUTPUT="$KERNEL_TOP_PATH/out"
: KERNEL_TOP_PATH 경로에 out 폴더를 추가해 OUTPUT이라는 셸 스크립트 변수에 저장한다.
위를 실행하면 OUTPUT
은 /home/pi/rpi_kernel_src/out
가 된다.
make O=$OUTPUT bcm2709_defconfig
: 커널 컨피그 파일을 생성한다. bcm2709_defconfig 파일에 선언된 컨피그 파일을 참고해 .config 파일을 생성한다
make O=$OUTPUT zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG
: 리눅스 커널 소스를 빌드하는 명령이다.
커널 코드를 빌드만 해서는 수정한 코드가 라즈베리 파이에서 실행되지 않는다. 컴파일해 생선된 이미지를 라즈베리 파이 설치해야 한다.
#!/bin/bash
KERNEL_TOP_PATH="$(cd "$(dirname "$0")" ; pwd -P )"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
cd linux
make O=$OUTPUT modules_install
cp $OUTPUT/arch/arm/boot/dts/*.dtb /boot/
cp $OUTPUT/arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
cp $OUTPUT/arch/arm/boot/zImage /boot/kernel7.img
install_rpi_kernel.sh
를 만들어 위 코드를 작성한다. 그리고 ./install_rpi_kernel.sh
를 통해 설치한다
반드시 빌드를 에러 없이 실행한 뒤 설치를 해야한다.