Petalinux Design Flow 중 1/3이 끝났다. 이젠 본격적으로 Petalinux 프로젝트의 하드웨어-소프트웨어 플랫폼을 최적화하고, 내가 만든 Vivado 하드웨어 디자인에 맞게 Embedded Linux를 커스터마이징하는 단계인 configuration에 대해 알아보자.
PetaLinux에서 petalinux-config 명령을 실행하면, 프로젝트의 핵심 설정을 관리할 수 있는 메뉴로 진입하게 된다. Zynq SoC 플랫폼의 부팅, 하드웨어, 소프트웨어 구성 전반을 제어하는 중요한 항목들을 설정할 수 있다. 아래는 각 메뉴 항목의 의미와 주요 설정 가능 내용을 정리한 것이다.
- Linux Components Selection
- 리눅스 커널과 관련된 컴포넌트들을 선택하는 메뉴이다. 사용자는 기본 제공되는 커널 버전을 선택하거나, 커스텀 커널을 Git repository 또는 로컬 경로에서 지정하여 사용할 수 있다. 또한 kernel module, driver, 파일 시스템 기능 등 빌드 옵션을 추가하거나 제거할 수 있다.
- Auto Config Settings
- PetaLinux가 자동으로 하드웨어-소프트웨어 연동 설정을 수행하는 방법을 지정한다. 예를 들어, Vivado 하드웨어 디자인을 새로 가져왔을 때 자동으로 디바이스 트리, U-Boot 환경, FSBL 설정을 갱신할지 여부를 조정한다.
- DTG Settings
- Device Tree Generator(DTG)의 동작 방식을 제어한다. 디바이스 트리 출력 파일명, 추가 디렉토리 포함 여부, 또는 커스텀 Device Tree Source(.dts) 파일을 병합할지 여부 등을 설정할 수 있다. 고급 사용자들이 SoC 디바이스 트리 최적화나 확장에 활용한다.
- FSBL Configuration
- FSBL(First Stage Bootloader)의 빌드 설정을 관리한다. FSBL은 Zynq SoC가 부팅될 때 가장 먼저 실행되는 코드로, 초기 하드웨어 세팅 및 U-Boot 로드를 담당한다. 여기서는 FSBL에 추가할 커스텀 코드나 특정 기능(예: QSPI, NAND 부트 설정)을 지정할 수 있다.
- FPGA Manager
- Linux 부팅 후, 사용자 공간에서 FPGA bitstream을 로드하거나 관리하는 기능을 포함시킬지 여부를 설정한다. Linux 내에서 동적으로 PL을 리프로그램하려는 경우 이 항목을 활성화한다.
- u-boot Configuration
- U-Boot 부트로더의 버전과 소스 위치, 빌드 옵션을 지정한다. 디폴트 U-Boot 환경변수, 스크립트, 자동 부트 순서 등을 변경하거나, 외부 레포지토리의 U-Boot을 지정하여 사용할 수도 있다.
- Image Packaging Configuration
- 최종적으로 생성되는 부트 이미지(BOOT.BIN, image.ub, rootfs 등)의 구성 방식을 지정한다. 루트 파일 시스템 타입(initramfs, ext4, jffs2 등), tftpboot 디렉토리 경로, 부트 이미지에 포함할 파일과 위치를 설정할 수 있다. 부트 방식(SD 부트, QSPI 부트)에 따라 중요한 설정이다.
- Firmware Version Configuration
- 생성되는 부트로더, FSBL, 커널 등의 버전을 관리하고 메타데이터로 포함시킨다. 추적 및 디버깅을 위해 빌드 버전 정보를 삽입하는 용도로 사용한다.
- Yocto Settings
- Yocto 빌드 시스템의 상세 동작을 제어한다. 추가 레이어 설정, 패키지 관리 정책, 빌드 타겟 변경, sstate 캐시 경로 지정 등의 고급 빌드 설정을 포함한다. PetaLinux는 Yocto를 기반으로 빌드되기 때문에 이 메뉴를 통해 Yocto 설정을 직접 조정할 수 있다.
이제 이 설정들을 하나하나 건드려보면서, 자신이 원하는 리눅스 환경을 구성해보자.
1. Linux Components Selection
사실 u-boot-xlnx, linux-xlnx 라는 Xilinx 공식적으로 제공하고 PetaLinux 빌드에 최적화된 소스를 사용하면 되기에, 아래와 같은 커스터마이징이나 특수 요구사항 (예: custom U-Boot patch, 최신 mainline 커널 사용, 특정 디바이스 트리 변화) 이 없다면 이 메뉴는 그대로 두고 넘어가는 것이 일반적이다.
- U-Boot의 소스를 바꿔야 할 때 (예: custom board, 최신 mainline U-Boot 필요)
- 최신 Linux 커널 기능을 쓰고 싶어서 Xilinx kernel 대신 mainline kernel을 쓸 때
- 보안 부팅, custom peripheral 대응 같은 특수한 초기화 코드가 필요할 때
2. Auto Config Settings
이부분은 주로 Vivado에서 export한 하드웨어 디자인(XSA 또는 HDF)을 기반으로 커널, U-Boot, 디바이스 트리의 설정을 자동으로 생성하거나 관리할지 여부를 결정하는 메뉴이다. 이 메뉴는 개발자가 하드웨어 변경에 따라 소프트웨어 구성을 얼마나 자동화할지 선택할 수 있도록 도와준다.
- Device tree autoconfig
- Vivado 디자인을 기반으로 디바이스 트리 파일을 PetaLinux가 자동으로 생성하고 갱신하도록 하는 옵션이다. 이는 표준적인 PetaLinux 프로젝트에서는 반드시 활성화해두는 것이 좋다. Vivado 하드웨어에 맞춰 디바이스 트리가 자동으로 생성되기 때문에 하드웨어 변경에 따른 소프트웨어 유지보수가 매우 간편해진다.
- Specify a manual device tree include directory
- 사용자가 직접 작성한 디바이스 트리 소스를 지정한 디렉토리에서 읽어들이도록 하는 옵션이다. 이 기능은 커스텀 보드나 특수한 하드웨어 환경처럼 디바이스 트리를 완전히 수작업으로 관리해야 하는 고급 개발에서나 필요한 옵션이며, 일반적인 PetaLinux 개발에서는 사용할 필요가 없다.
- kernel autoconfig
- Vivado 디자인을 기반으로 커널 설정을 자동으로 생성하고 갱신하겠다는 의미이다. 하지만 이 옵션은 켜두면 커널 설정을 직접 수정하거나 커스터마이징한 내용이 Vivado 디자인 변경 시 덮어써질 수 있어 유지보수가 어려워질 수 있다. 따라서 표준 환경에서는 이 옵션을 비활성화하고, 커널 설정이 필요할 때는 petalinux-config -c kernel 명령을 통해 직접 관리하는 것이 권장된다.
- u-boot autoconfig
- Vivado 디자인을 기반으로 U-Boot 설정을 자동으로 생성하는 기능이다. 이 또한 U-Boot의 커스터마이징을 방해할 수 있으므로 기본적으로는 비활성화하고, 필요할 때 U-Boot 설정을 별도로 수정하는 것이 좋다.
결론적으로, Auto Config Settings 메뉴는 표준 PetaLinux 프로젝트에서는 Device tree autoconfig만 활성화하고, 나머지 옵션은 꺼두는 것이 가장 안정적이고 유지보수가 쉬운 설정이다.
3. DTG Settings
PetaLinux의 DTG Settings는 Device Tree Generator가 Vivado 하드웨어 디자인을 기반으로 생성할 디바이스 트리의 옵션을 추가로 조정할 수 있는 메뉴이다. 주로 하드웨어 플랫폼에 맞는 디바이스 트리를 자동으로 생성하는 데 필요한 부가 설정을 제공한다.
- (template) MACHINE_NAME
- 이 항목은 디바이스 트리를 생성할 때 사용할 머신 이름(template)이다. 보통 Vivado에서 export한 하드웨어 플랫폼의 이름이 자동으로 지정되어 일반적인 경우에는 이 값을 수정할 필요가 없다.
- Kernel Bootargs
- 이 하위 메뉴에서는 커널 부트 인수(bootargs)를 직접 지정할 수 있다. 기본적으로는 U-Boot 스크립트나 환경변수에서 bootargs를 관리하지만, 디바이스 트리 내에 bootargs를 강제로 삽입하고 싶을 때 여기에 값을 지정한다. 대부분의 경우 U-Boot에서 관리되므로 이 설정을 건드릴 필요는 없다.
- Devicetree flags
- 디바이스 트리 생성 시 사용할 플래그를 지정할 수 있습니다. 예를 들어 특정 하드웨어 블록을 포함하거나 제외할지 등의 옵션을 부여할 수 있다.
- Devicetree overlay
- 이 옵션을 활성화하면 디바이스 트리 오버레이를 생성하도록 설정할 수 있다. 디바이스 트리 오버레이는 런타임에 기존 디바이스 트리에 추가적인 노드를 덧붙여 하드웨어 구성을 변경하는 방식으로, 주로 동적으로 PL (Programmable Logic) 구성을 바꿀 필요가 있는 경우에 사용하며, 일반적인 고정된 하드웨어 플랫폼에서는 필요하지 않다.
- Remove PL from devicetree
이 옵션은 PL (Programmable Logic) 영역에 해당하는 노드를 디바이스 트리에서 제거하도록 한다. PL 영역이 없는 순수 PS (Processing System) 기반 시스템이거나, PL을 완전히 사용자 수작업으로 관리하고자 할 때 사용된다. 대부분의 Zynq 프로젝트에서는 이 옵션을 체크하지 않는다.
4. FSBL Configuration
FSBL Configuration (First Stage Bootloader Configuration) 메뉴는 PetaLinux 프로젝트에서 FSBL(First Stage Bootloader)을 빌드할 때 사용하는 컴파일 옵션을 추가로 지정할 수 있는 설정 메뉴이다. FSBL은 Zynq/ZynqMP SoC에서 부팅 시 가장 먼저 실행되는 코드로, 하드웨어 초기화, DDR 메모리 설정, PL(Bitstream) 로딩 등을 수행한다.
- FSBL BSP extra compiler flags
- 이 항목은 FSBL BSP(Board Support Package) 컴파일 시 추가적인 컴파일러 플래그를 지정할 수 있도록 한다. 예를 들어 특정 최적화 옵션(-O2), 경고 레벨 조정(-Wall) 등의 옵션을 삽입할 수 있다. 일반적인 경우 기본값 (비워둠)으로 충분하며, 특별한 목적(디버그 빌드, 최적화 테스트, 특수 하드웨어 설정)이 있을 때에만 사용한다.
- FSBL compiler flags
- 이 항목은 FSBL 자체 코드에 대해 추가 컴파일러 플래그를 삽입할 수 있는 옵션이다. BSP가 아닌 FSBL 메인 코드에 직접 영향을 준다. 마찬가지로, 커스텀 빌드나 특수 기능 추가를 위한 경우에만 필요하며 기본값으로 두는 것이 일반적이다.
5. FPGA Manager
FPGA Manager는 PetaLinux에서 Linux 커널 부팅 후 PL(Programmable Logic, 즉 FPGA Bitstream)을 로드하고 관리하는 기능을 활성화할지를 결정하는 옵션이다. 이 기능은 Linux의 fpga_manager 프레임워크와 연동되며, 런타임에서 Bitstream을 로드하거나 동적으로 FPGA 구성을 바꾸고자 할 때 유용하다.
6. u-boot Configuration
이 메뉴는 PetaLinux 프로젝트에서 사용될 U-Boot 부트로더의 기본 설정을 지정하는 곳이다. U-Boot는 부팅 과정에서 하드웨어를 초기화하고 커널을 로드하는 역할을 하며, 이 메뉴를 통해 U-Boot의 빌드 시 기본 설정 파일(defconfig)을 선택하거나 수정할 수 있다.
- U-boot config (other)
- 이 항목을 통해 사용자는 Xilinx에서 제공하는 표준 defconfig 외에 자신만의 u-boot 설정 파일을 선택하거나, 기존 설정을 기반으로 커스터마이징할 수 있다. 일반적으로 xilinx_zynq_virt_defconfig와 같은 기본 설정이 선택되는데, 이는 Zynq 플랫폼에 맞게 최적화된 기본 부트로더 구성을 의미한다.
- (xilinx_zynq_virt_defconfig) u-boot config target
- 현재 선택된 U-Boot의 기본 설정(target)을 보여준다. 여기서는 xilinx_zynq_virt_defconfig가 지정되어 있으며, 이는 가상화 환경이나 표준 Zynq 시스템용으로 권장되는 기본값이다. 이 설정은 U-Boot의 컴파일 시 각종 디바이스 초기화, 환경변수 위치, 드라이버 활성화 여부 등의 초기 옵션을 결정한다.
대부분의 경우, PetaLinux가 제공하는 기본 defconfig (예: xilinx_zynq_virt_defconfig)만으로도 충분하다.
7. Image Packaging Configuration
이 메뉴는 Petalinux가 빌드한 커널, 루트 파일 시스템, 그리고 기타 부트 파일들을 어떤 형식으로 패키징하고, 어디에 배치할지 설정하는 곳이다. 즉, 최종적으로 생성되는 이미지 파일과 루트 파일 시스템의 형태, 그리고 그 위치를 정의하는 중요한 설정이다.
- Root filesystem type
- 여기서는 루트 파일 시스템이 어떤 형태로 제공될지를 선택한다. 현재는 EXT4 (SD/eMMC/SATA/USB) 로 설정되어 있으며, 이는 루트 파일 시스템이 SD카드, eMMC, SATA, USB 장치 등의 EXT4 포맷 파티션에 저장될 것을 의미한다.
- (/dev/mmcblk0p2) Device node of SD device
- 루트 파일 시스템이 마운트될 실제 디바이스 노드를 지정한다. /dev/mmcblk0p2 는 보통 SD 카드의 두 번째 파티션을 의미하며, 루트 파일 시스템이 여기에 위치한다는 뜻이다.
- {image.ub} name for bootable kernel image
- 생성될 부트 가능 커널 이미지의 파일명을 지정한다. image.ub는 U-Boot가 부팅 시 사용하는 FIT 포맷의 표준 이름이다.
(일반적으로 수정할 필요 없음)
- 생성될 부트 가능 커널 이미지의 파일명을 지정한다. image.ub는 U-Boot가 부팅 시 사용하는 FIT 포맷의 표준 이름이다.
- (cpio cpio.gz cpio.gz.u-boot tar.gz jffs2) Root filesystem formats
- 루트 파일 시스템의 출력 형식을 선택한다. cpio, cpio.gz, tar.gz, jffs2 등 다양한 옵션이 있으며, 이는 루트 파일 시스템이 압축 파일로 출력될지, 특정 플래시 용 포맷으로 출력될지를 결정한다.
- (0x1000) DTB padding size
- Device Tree Blob에 추가되는 패딩 크기이다. 보통 U-Boot가 Device Tree를 로드할 때 필요한 정렬과 안정성을 위해 설정된다.
- [*] Copy final images to tftpboot
- 최종 빌드한 이미지를 /tftpboot 디렉터리로 복사할지 여부를 결정한다. 이는 TFTP 네트워크 부팅용으로 이미지를 제공할 때 필요하다. (SD 카드 부팅 등 로컬 저장장치에서 부팅할 경우 이 옵션은 필수가 아니며, 켜져 있어도 무방하다)
- (/tftpboot) tftpboot directory
- TFTP 서버를 사용할 경우 이미지 파일이 복사될 경로를 지정한다. 위의 옵션이 활성화되었을 때만 의미가 있다. (TFTP 네트워크 부팅을 하지 않는다면 크게 신경 쓸 필요 없다)
일반적인 SD 카드 기반의 부트 환경에서는 EXT4, /dev/mmcblk0p2, image.ub, 0x1000 padding 정도만 확인하면 된다. 나머지 항목은 네트워크 부팅이나 특수한 루트 파일 시스템 포맷(JFFS2, tar.gz)을 사용할 때만 신경 쓰면 된다.
8. Firmware Version Configuration
Firmware Version Configuration 메뉴는 Petalinux 프로젝트에서 생성되는 펌웨어(부트로더 + 커널 + 루트 파일 시스템) 이미지에 대한 버전 정보와 시스템 식별 정보를 설정하는 곳이다. 이 값들은 주로 시스템의 식별, 로그, 정보 표시용으로 활용되며 실제 부팅 기능에는 큰 영향을 주지 않는다.
9. Yocto Settings
Yocto Settings 메뉴는 Petalinux 빌드 시스템의 기반이 되는 Yocto Project의 빌드 설정을 관리하는 부분이다. 주로 빌드 환경, 캐시(sstate), 병렬 빌드 옵션 등을 지정할 수 있으며, 프로젝트의 빌드 속도와 네트워크 연계에 영향을 준다.
정리하자면, Linux 부팅만이 목적이고 표준 SD 카드 부팅을 한다면
"7. Image Packaging Configuration"의
Root Filesystem Type과 디바이스 노드(/dev/mmcblk0p2)를
올바르게 지정해주는 것만으로 충분하다.
나머지 U-Boot, Kernel, RootFS, Device Tree config들은
특정 하드웨어 추가/변경, 네트워크 부트, 커스텀 기능 이 필요할 때 조정하는 영역이다.
'Linux > Petalinux' 카테고리의 다른 글
Petalinux 6-1. Configuring U-boot (0) | 2025.07.02 |
---|---|
Petalinux 5. rootfs 구축 (0) | 2025.06.29 |
Petalinux 4. Build my own Linux Image - Environment Setting (0) | 2025.06.25 |
Petalinux 3. Samlple Project from .bsp (0) | 2025.06.24 |
Petalinux 2. Installing Petalinux (0) | 2025.06.18 |