라즈베리 파이는 전 세계적으로 널리 쓰이느 리눅스 개발용 보드이자 소형 컴퓨터이다. 설치 과정이 간단하고, 가격 대비 성능이 좋아 다양한 디바이스 드라이버를 구현하는 데 사용할 수 있다. 교육용으로 많이 쓰이며 실전 개발에서도 다양한 데모용 디바이스로 자주 활용된다.
라즈베리 파이 장점
내 라즈베리파이 모델은 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를 통해 설치한다
반드시 빌드를 에러 없이 실행한 뒤 설치를 해야한다.