라즈비안 커널 빌드

김민세·2022년 10월 25일
1
post-thumbnail

라즈베리 파이

라즈베리 파이는 전 세계적으로 널리 쓰이느 리눅스 개발용 보드이자 소형 컴퓨터이다. 설치 과정이 간단하고, 가격 대비 성능이 좋아 다양한 디바이스 드라이버를 구현하는 데 사용할 수 있다. 교육용으로 많이 쓰이며 실전 개발에서도 다양한 데모용 디바이스로 자주 활용된다.

라즈베리 파이 장점

  • 막강한 커뮤니티
  • 저렴한 가격
  • 간단한 설치
  • 최신 리눅스 커널을 지원

내 라즈베리파이 모델은 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 linuxgit 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를 통해 설치한다

반드시 빌드를 에러 없이 실행한 뒤 설치를 해야한다.

profile
김민세

0개의 댓글