Linux/Kernel Driver

Embedded Linux Kernel: Custom Kernel 패치 및 빌드

임베디드 친구 2025. 3. 28. 09:06
728x90
반응형

Embedded Linux Kernel: Custom Kernel 패치 및 빌드

Embedded 시스템에서 Linux Kernel을 사용하는 경우, 하드웨어 및 소프트웨어 요구사항에 맞춰 커널을 커스터마이징하는 작업은 필수적입니다. 오늘 포스팅에서는 Rockchip RK3399 시스템을 기준으로 Kernel 소스 코드 수정 및 패치 작성 방법과 특정 Embedded 시스템에 맞춘 Kernel 빌드 방법을 설명합니다.

1. Kernel 소스 코드 수정 및 패치 작성

커널 패치 작성은 기존 커널 소스에 새로운 기능을 추가하거나, 기존 코드를 수정하여 시스템에 적합한 커널 이미지를 생성하는 과정입니다.

1.1 Kernel 소스 코드 준비

  1. Rockchip GitHub에서 Kernel 소스를 클론합니다:
# Kernel 소스 다운로드
git clone https://github.com/rockchip-linux/kernel.git -b release-4.19-rk3399
cd kernel
  1. Kernel 소스를 확인하고 원하는 기능을 추가하거나 수정할 파일을 탐색합니다. 예를 들어, 디바이스 드라이버를 수정한다고 가정합니다:
vi drivers/input/input.c

1.2 패치 파일 생성

  1. 소스 코드 수정을 완료한 후 변경 사항을 기록합니다:
git diff > my_custom_patch.patch
  1. 생성된 패치를 확인합니다:
cat my_custom_patch.patch

1.3 패치 적용

수정된 패치를 다른 시스템에서도 적용하려면 아래 명령어를 사용합니다:

patch -p1 < my_custom_patch.patch

이제 패치가 성공적으로 적용되었습니다.

2. 특정 Embedded 시스템에 맞춘 Kernel 빌드

2.1 Cross-Compiler 설정

Embedded 시스템은 대개 Host 시스템과 다른 아키텍처를 사용하므로 Cross-Compiler가 필요합니다.

Rockchip에서 제공하는 Toolchain을 사용합니다:

wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz
tar -xvf gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf.tar.xz
export PATH=$PWD/gcc-linaro-7.5.0-2019.12-i686_arm-linux-gnueabihf/bin:$PATH

2.2 Kernel Configuration

  1. Rockchip RK3399에 맞는 디폴트 설정을 로드합니다:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_defconfig
  1. 추가 설정이 필요한 경우 아래 명령어를 통해 수정합니다:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

2.3 Kernel 빌드

  1. Kernel을 빌드합니다:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
  1. 빌드 완료 후, Kernel 이미지를 확인합니다:
ls arch/arm64/boot/Image

2.4 DTB(Device Tree Blob) 파일 빌드

  1. RK3399의 Device Tree 파일을 빌드합니다:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk3399.dtb
  1. 빌드된 DTB 파일을 확인합니다:
ls arch/arm64/boot/dts/rockchip/rk3399.dtb

3. 커널 이미지 및 DTB 배포

3.1 SD 카드 또는 eMMC로 복사

  1. 생성된 Kernel 이미지와 DTB 파일을 SD 카드에 복사합니다:
sudo dd if=arch/arm64/boot/Image of=/dev/sdX bs=4M
sudo cp arch/arm64/boot/dts/rockchip/rk3399.dtb /mnt/sdcard/boot/
  1. SD 카드를 Embedded 보드에 삽입하고 부팅합니다.

4. 확인 및 디버깅

Embedded 시스템에서 새로운 Kernel이 정상적으로 작동하는지 확인합니다. 문제가 발생하면 다음 명령어로 로그를 확인하세요:

dmesg | grep -i error

결론

이 포스팅에서는 Rockchip RK3399을 기준으로 Kernel 소스 코드 수정 및 패치 작성, 그리고 Embedded 시스템에 맞춘 Kernel 빌드 과정을 설명했습니다. 이러한 작업은 다양한 Embedded 시스템에서 요구되는 환경에 맞는 커널을 구현하는 데 필수적인 단계입니다.

반응형