728x90
반응형
- 라즈베리 파이 커널 : github.com/raspberrypi/linux
커널을 빌드하는데 두 가지의 방법이 있다.
- 로컬에서 빌드
- 크로스 컴파일
커널 크로스 컴파일의 장점은 ..
- 32bit OS를 사용하여 64bit 커널 빌드 가능 (반대 경우도 마찬가지)
- 라즈베리파이 자체보다 훨씬 빠르게 커널 크로스 컴파일이 가능
라즈베리파이에서 빌드
라즈베리파이에서 최신 버전의 OS를 설치 후 부팅한 후 로그인하여 인터넷 연결
아래 명령어로 깃과 빌드 의존성 설치 및 소스 내려받기
$ sudo apt install git bc bison flex libssl-dev make
$ git clone --depth=1 https://github.com/raspberrypi/linux
위의 git clone은 현재 활성 브랜치를 다운로드한다.
--depth=1을 생략하면 모든 브랜치의 전체 기록을 포함하여 전체 저장소를 다운로드하지만 오래 걸린다.
다른 브랜치를 다운로드하려면 --branch 옵션을 사용하면 된다.
$ git clone --depth=1 --branch <브랜치명> https://github.com/raspberrypi/linux
커널 Configuration
라즈베리파이의 모델에 따라 커널을 빌드하기 위한 설정을 할 수 있음.
나는 라즈베리파이 3B+ 이기 때문에 아래 명령어를 입력
$ cd linux $ KERNEL=kernel7 $ make bcm2709_defconfig
커널 빌드
커널, 모듈, dtb 설치 및 빌드
- 해당 과정은 라즈베리파이의 모델에 따라 시간이 매우 오래 걸릴 수 있다.
- -j4 옵션은 4개의 코어 모두에서 작업을 분할하여 컴파일의 속도를 높여준다.
$ make -j4 zImage modules dtbs
$ sudo make modules_install
$ sudo cp arch/arm/boot/dts/*.dtb /boot/
$ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
$ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
$ sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
크로스 컴파일 (Cross-Compiling)
크로스 컴파일 툴체인 설치
$ git clone https://github.com/raspberrypi/tools ~/tools
//또는
$ sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
$ sudo apt install crossbuild-essential-arm64
크로스 컴파일러를 사용하기 위해, 다운로드 한 arm용 gcc를 사용할 수 있도록 경로를 지정한다.
사용자 루트 디렉터리의. bashrc에 PATH를 등록하여 쉘을 열 때마다 자동으로 설정되도록 한다.
// 32bit
$ echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin >> ~/.bashrc
$ source ~/.bashrc
// 64bit
$ echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc
$ source ~/.bashrc
커널 설정
아래 명령어를 치면 '. config'라는 라즈베리파이 3 커널 설정 파일이 생성된다.
$ cd <라즈베리파이 디렉토리>/linux
$ KERNEL=kernel7
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
커널 컴파일
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
아래로 메시지가 엄청 많이 찍힌다.
모듈 설치
sd card를 가상 머신에 연결시킨 후, df 명령어를 통해 아래 정보를 확인한다.
$ mkdir mnt $ mkdir mnt/fat32 $ mkdir mnt/ext4
$ sudo mount /dev/sdb1 mnt/fat32
$ sudo mount /dev/sdb2 mnt/ext4
아래는 모듈 설치하는 명령어이다.
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=<install 경로> modules_install
커널 및 dtb 복사 & 이전 커널 백업
아래는 sd카드 마운트 하여 copy.. (네트워크 scp로 밀어 넣기도 가능하다.)
$ sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
$ sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
$ sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
$ sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
$ sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
$ sudo umount mnt/fat32 sudo umount mnt/ext4
728x90
반응형