메뉴 건너뛰기

시스템프로그램 - RaspberryPi.NCLab

1. Cross Compiler
가. RaspberryPi에서도 compile을 할 수 있지만 매우 오래(12시간) 걸리므로 PC에서 cross compile을 해야 함
나. RaspberryPi와 PC의 CPU는 명령어  set이 다르기 때문에 각각에 맞는 compiler가 필요
. gcc-arm-linux-gnueabi package를 cross compiler로 사용
라. make package를 사용하여 build 할 예정
arm-linux-gnueabi-gcc-4.7이 사용됨
마. apt-get install 명령어를 사용하여 설치
$ sudo apt-get install gcc-arm-linux-gnueabi make
그림3.png


2. 기존 설정 가져오기

가. RaspberryPi는 /proc/config.gz에 kernel의 설정을 가지고 있음

나. 그 설정을 기반으로 kernel을 build할 것이기 때문에 Ubuntu에서 scp를 통해 파일을 복사해 와야 함

* 단, 여기서 RaspberryPi는 정상적으로 부팅하여 네트워크에 연결된 상태로 ssh가 가능해야 함

* 네트워크에 연결하는 방법은 개발환경 구축하기를 참고

* RaspberryPi에 정상적으로 연결할 수 없어 기본 설정을 사용하려면 라즈베리파이의 커널 빌드하기 - 부록 기본 설정을 커널 소스에 적용하기 참고

$ scp root@192.168.1.161:/proc/config.gz ./

그림4.png

1). 192.168.1.161은 RaspberryPi의 주소이며 개발자의 환경마다 다를 수 있으므로 주의

2). root 계정으로 로그인 하기 때문에 root 계정의 암호를 입력, 초기에 암호를 설정하지 않았다면 root계정의 암호는 root



3. 기존 설정을 커널 소스에 적용하기

가. linux 디렉토리로 이동하여 kernel source의 이전 설정 값들을 모두 지움

$ cd linux
$ make mrproper
그림5.png


나. RaspberryPi에서 가져온 기존 설정을 linux/.config로 저장하고 확인

$ zcat ../config.gz > .config
$ ls -al | grep .config

그림6.png


다. 기존 설정을 kernel source에 적용

1). 'ARCH=': kernel이 동작할  target의 architecture(쉽게 말해서 CPU의 종류)를 지정, 여기서는 arm이 됨

2). 'CROSS_COMPILE=': cross compiler의 prefix(접두사)를 지정, 여기서는 arm-linux-gnueabi-가 됨

3). 'oldconfig':  기존 설정을 kernel source에 적용하라는 의미

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- oldconfig

앞으로 자주 사용될 옵션이므로 외우거나 따로 적어두는게 좋음

그림7.png



4. Kernel Build

가. make로 architecture와 cross compiler를 지정 후 build

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

그림8.png

* 약 20분 가량 소요


나. build된 kernel의 version 확인

$ make kernelversion
그림9.png

* version은 계속 바뀌기 때문에 github에서 clone 한 시점에 따라 다를 수 있으므로 유의




--

라즈베리파이의 커널 빌드하기 - 01 개발환경 소개

라즈베리파이의 커널 빌드하기 - 02 커널 소스 다운받기

라즈베리파이의 커널 빌드하기 - 04 Module 설치

라즈베리파이의 커널 빌드하기 - 05 Kernel Image 교체

라즈베리파이의 커널 빌드하기 - 06 Kernel Image 적용 확인

라즈베리파이의 커널 빌드하기 - 부록 기본 설정을 커널 소스에 적용하기

라즈베리파이의 커널 빌드하기 - 부록 config.txt 파일 수정으로 부팅할 kernel 교체

위로