Linux/Kernel Driver

Board Support Package (BSP) 이해

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

Board Support Package (BSP) 이해

임베디드 시스템 개발에서 Board Support Package (BSP)는 필수적인 요소 중 하나입니다. 이번 포스팅에서는 BSP의 개념, 중요성, 그리고 기존 BSP를 수정하거나 새로운 BSP를 작성하는 방법에 대해 알아보겠습니다. 이를 통해 Rockchip RK3399 시스템을 기준으로 실질적인 BSP 작성 과정을 살펴보겠습니다.


1. BSP란 무엇인가?

BSP(Board Support Package)는 특정 하드웨어 보드에서 운영 체제를 실행하기 위해 필요한 소프트웨어 계층입니다. BSP는 다음과 같은 주요 구성 요소로 이루어져 있습니다:

  • 부트로더(Bootloader): 시스템을 초기화하고 커널을 로드하는 역할을 합니다. 예: U-Boot
  • 디바이스 드라이버(Device Drivers): 보드의 하드웨어를 제어하는 커널 모듈
  • 보드 초기화 코드(Board Initialization Code): 보드의 핀 설정, 클럭 초기화 등 하드웨어 초기화를 담당
  • 디바이스 트리(Device Tree): 하드웨어 구성 정보를 커널에 전달

BSP는 하드웨어와 운영 체제(OS) 간의 다리 역할을 하며, BSP가 없다면 OS는 하드웨어를 제대로 인식하고 제어할 수 없습니다.


2. BSP가 왜 중요한가?

BSP의 중요성은 다음과 같은 이유에서 비롯됩니다:

  1. 하드웨어 추상화: BSP는 하드웨어 의존성을 줄이고 소프트웨어 개발자가 하드웨어 세부 사항을 몰라도 개발할 수 있게 합니다.
  2. 부팅 프로세스 관리: 부트로더와 초기화 코드를 통해 시스템 부팅을 원활하게 지원합니다.
  3. 디바이스 드라이버 관리: 보드에 필요한 모든 드라이버를 포함하여 하드웨어 제어를 가능하게 합니다.
  4. 이식성 제공: 동일한 BSP를 사용하면 동일한 하드웨어 보드에서 다른 OS를 실행하거나, 다른 하드웨어 보드에서 동일한 OS를 실행할 수 있습니다.

3. 기존 BSP 수정하기

3.1 BSP 수정 시 확인 사항

기존 BSP를 수정하기 전에 다음 사항을 검토해야 합니다:

  • 디바이스 트리: 새로운 하드웨어가 추가되었는지 확인
  • 드라이버: 기존 드라이버가 새 하드웨어와 호환되는지 확인
  • 부트로더: 추가적인 초기화가 필요한 경우 수정 필요

3.2 Rockchip RK3399의 디바이스 트리 수정 예제

다음은 RK3399 보드에서 새로운 UART 포트를 추가하는 디바이스 트리 수정 예제입니다:

&uart2 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&uart2_pins>;
};

pinctrl {
    uart2_pins: uart2-pins {
        mux {
            pins = "UART2_TX", "UART2_RX";
            function = "uart2";
        };
    };
};
  • &uart2: UART2의 디바이스 노드를 활성화
  • status = "okay";: 해당 디바이스를 활성화함을 의미
  • pinctrl: 핀 설정 정보 추가

디바이스 트리 수정 후에는 새로운 디바이스 트리를 빌드하여 적용해야 합니다:

dtc -I dts -O dtb -o rk3399-uart2.dtb rk3399-uart2.dts
cp rk3399-uart2.dtb /boot/dtb/

4. 새로운 BSP 작성하기

4.1 BSP 작성 흐름

  1. 부트로더 설정: U-Boot와 같은 부트로더 초기화 코드 작성
  2. 디바이스 트리 구성: 보드의 하드웨어 구조를 정의
  3. 커널 설정 및 빌드: 하드웨어에 필요한 커널 옵션 설정
  4. 파일 시스템 구성: 루트 파일 시스템 생성

4.2 Rockchip RK3399 BSP 작성 예제

부트로더 설정

RK3399에서 U-Boot를 설정하는 기본 과정:

git clone https://github.com/u-boot/u-boot.git
cd u-boot
make rk3399_defconfig
make

커널 빌드

  1. 소스 코드를 클론합니다:
git clone https://github.com/rockchip-linux/kernel.git
cd kernel
git checkout rk3399-linux
  1. 커널 설정을 로드하고 수정합니다:
make ARCH=arm64 rockchip_defconfig
make ARCH=arm64 menuconfig
  1. 커널을 빌드합니다:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
  1. 빌드된 커널 이미지를 보드에 배포합니다:
cp arch/arm64/boot/Image /boot/

5. 결론

이번 포스팅에서는 BSP의 개념, 중요성, 그리고 Rockchip RK3399 보드를 기준으로 BSP를 수정하고 작성하는 방법을 살펴보았습니다. BSP는 임베디드 시스템의 핵심 구성 요소로, 이를 잘 이해하고 활용하면 하드웨어와 소프트웨어 간의 통합을 원활하게 할 수 있습니다.

728x90
반응형