10.3 Build DPDK
이 섹션에는 아래를 자세히 설명하는 두 개의 서브 섹션이 포함되어 있다:
- Yocto 빌드 시스템을 사용하여 DPDK 바이너리(라이브러리와 샘플 애플리케이션) 빌드.
- DPDK 자체 빌드 시스템으로, 독립 실행형 패키지로 DPDK 바이너리 빌드.
10.3.1 Build DPDK Using Yocto
DPDK는 Yocto 빌드 시스템의 애플리케이션 패키지 중 하나이다. 이 섹션에서는 Yocto 환경 내에서 DPDK를 독립 실행형 패키지로 빌드하는 방법을 설명한다. 아래 커맨드를 실행하기 전에 Yocto 환경이 이미 구성되어 있다고 가정한다. Yocto 빌드 시스템 사용에 대한 자세한 내용은 Download Yocto 레이어를 참조한다.
Yocto 환경이 설정된 후, 아래 커맨드를 사용하여 DPDK 애플리케이션과 라이브러리를 빌드할 수 있다. 생성된 파일(라이브러리와 바이너리)은 <yocto_sdk>/ bld-<Name>/tmp/work/ <Machine>-poky-linux/ dpdk/ 폴더에서 사용할 수있다. rootfs(루트 파일시스템)가 생성된 후 바이너리가 여기에 병합된다.
bitbake dpdk : 이 커맨드를 실행하기 전에, setup-env가 실행되었다고 가정한다.
Yocto 빌드 시스템을 사용하여 이러한 바이너리를 대상 rootfs에 패킹하려면, Build Yocto 이미지를 참조한다. 기본적으로 Yocto 환경은 bitbake imx-image-multimedia가 실행될 때 DPDK를 컴파일하고 rootfs에 배치한다.
DPDK 바이너리의 레이아웃
DPDK 바이너리의 단일 이미지는 Layerscape와 ENETFEC 플랫폼을 지원한다. DPDK 패키지가 설치되면, rootfs의 /usr/share/dpdk와 /usr/bin/dpdk-testpmd 폴더에서 사용할 수있다.
/usr/share/dpdk/examples/에는 DPDK Application References에 나열된 샘플 애플리케이션이 포함되어 있다.
이 문서의 여러 위치에서, 위의 바이너리는 실행과 기타 정보를 나타내기 위해 참조된다. 위에서 설명된 대로 PATH 변수 설정을 사용하거나, 바이너리에 대한 절대 경로를 사용하여 실행이 수행되고 있다고 가정한다.
아래 테이블은 Yocto 생성 rootfs에서 사용할 수 있는 다양한 DPDK 예제 애플리케이션을 나열한다.
Table 94. DPDK Example Applications
File/Image name related to DPDK | Description |
---|---|
/usr/share/dpdk/examples/l2fwd | ENETFEC DPDK 예제 애플리케이션과 PMD 테스트 애플리케이션 |
/usr/share/dpdk/examples/l3fwd | |
/usr/bin/dpdk-testpmd |
10.3.2 Standalone Build of DPDK Libraries and Applications
이 섹션에서는 독립 실행형 환경에서 DPDK 바이너리(라이브러리와 예제 애플리케이션)를 빌드하는 데 필요한 단계를 설명한다. 이 환경은 Layerscape 보드용 크로스 빌드가 가능한 호스트가 있거나 Layerscape 대상 보드에 직접 있을 수 있다.
참고:
이 섹션은 대상으로 주로 Layerscape 보드용 크로스 컴파일을 사용하여, 호스트 머신에서 DPDK의 독립 실행형 빌드에 중점을 둔다. 그러나 대상 보드에서 직접 컴파일할 수 있도록 필요한 참고 사항이 추가되어 있다. Layerscape 보드에서 DPDK를 빌드하는 데 적합한 환경을 생성하려면, Download Yocto 레이어를 참조한다. Yocto 시스템을 사용하여 DPDK를 빌드하는 방법에 대한 지침은 Section 10.3.1을 참조한다.
Obtain the DPDK source code
DPDK 소스 코드에는 빌드 예제 애플리케이션과 테스트 애플리케이션에 필요한 모든 라이브러리가 포함되어 있다. 소스 코드에는 빌드와 실행을 지원하기 위한 다양한 구성과 스크립트도 포함되어 있다. 아래 링크를 사용하여 DPDK 소스코드를 얻는다:
git clone https://github.com/NXPmicro/dpdk.git -b 21.11-qoriq
위 리포지토리가 복제되면, DPDK 소스 코드를 컴파일할 수 있다. 이 소스는 Layerscape와 ENETFEC 플랫폼에서 일반적이다.
Prerequisites before compiling DPDK
DPDK를 독립 실행형 빌드로 컴파일하기 전에, 아래 종속성을 독립적으로 해결해야 한다:
- KNI 모듈을 빌드할 수 있도록, 플랫폼 호환과 컴파일된 Linux Kernel 소스 코드.
- 이는 선택 사항이며, KNI 모듈 지원이 필요하지 않은 경우, 무시할 수 있다.
- 플랫폼 호환 Linux 커널 컴파일에 대한 자세한 내용은 Download Yocto layers와 Build Yocto images를 참조한다.
- KNI 모듈을 비활성화하려면, 아래 참고 사항을 참조한다.
- 소프트웨어 암호화 드라이버(OpenSSL PMD)를 빌드하는 데 필요한 OpenSSL 라이브러리.
- DPDK 빌드를 완료하려면, OpenSSL 패키지는 별도로 컴파일하고 알려진 경로에 라이브러리를 설치해야 한다.
- 이는 선택 사항이며, 소프트웨어 암호화 드라이버 지원이 필요하지 않은 경우, 이 종속성을 무시할 수 있다. OpenSSL을 독립 실행형 패키지로 빌드하려면, 아래 단계를 따른다.
git clone https://github.com/nxp-qoriq/qoriq-components_openssl
-b integration
# Clone the OpenSSL source code
cd openssl
# Change into cloned directory
git checkout LSDK-21.08
# Checkout the specific Tag supported by DPDK
대상에 대해 OpenSSL을 빌드하기 위한 Cross Compilation 툴 체인을 내보낸다. 크로스 컴파일 툴 체인 내보내기를 위한 아래 단계는 호스트에서 컴파일할 때만 필요하다. 대상 보드에서는 기본 빌드 툴 체인이 사용된다고 가정한다.
export CROSS_COMPILE=<path to uncompressed toolchain archive>/bin/aarch64-linux-gnu-
아래 커맨드를 사용하여 OpenSSL 빌드 시스템을 구성한다. --prefix 인수는 빌드가 완료된 후, OpenSSL 라이브러리가 배포되는 경로를 지정한다. 이는 컴파일된 OpenSSL 라이브러리에 액세스하기 위해 DPDK 빌드 시스템에 제공되는 경로이기도 하다.
./Configure linux-aarch64 --prefix=<OpenSSL library path> shared
make depend
make
make install
export OPENSSL_PATH=<OpenSSL library path>
참고:
대상 보드에서 DPDK를 빌드할 때, DPDK에 필요한 OpenSSL 라이브러리가 이미 rootfs의 일부로 사용 가능할 수 있으며, 이 경우 OpenSSL 패키지의 외부 컴파일이 필요하지 않다.
OpenSSL PMD 지원을 비활성화하려면 아래 참고 사항을 참조한다.
Compiling DPDK using meson
위에 있는 전제 조건이 해결되면, 아래 단계에 따라 DPDK를 컴파일한다. 이러한 단계는 모든 플랫폼에 공통적이며, 모든 모드를 대상으로 호스트에서 크로스 컴파일할 때만 필요하다. 대상 보드에서 직접 컴파일하는 경우, 루트 파일 시스템을 사용하여 전제 조건을 충족한다고 가정한다.
- 컴파일 환경 설정:
- 이 단계는 기본 툴 체인이 대상 보드용이 아닌 호스트 환경에서만 필요하다. 대상 보드에서 컴파일할 때, 이 단계를 건너뛸 수 있다.
export CROSS_PATH=<path to cross-compile toolchain> export PATH=$PATH:$CROSS_PATH
- 소프트웨어 암호화 드라이버(OpenSSL PMD)에 대한 OpenSSL 경로를 설정한다. 이는 선택 사항이며, 소프트웨어 암호화 드라이버(OpenSSL PMD) 지원이 필요하지 않은 경우, 건너뛸 수 있다. 예를 들어 libpcap과 같은, 이러한 외부 변수 다른 필수 라이브러리를 전달한는 데 사용할 수도 있다.
- 이 단계는 기본 툴 체인이 대상 보드용이 아닌 호스트 환경에서만 필요하다. 대상 보드에서 컴파일할 때, 이 단계를 건너뛸 수 있다.
- DPDK 컴파일을 위한 DPDK 빌드 시스템 사용.
참고: 아래 단계를 사용하여 생성된 DPDK 바이너리는 Layerscape와 ENETFEC 플랫폼과 호환된다.이는 DPDK가 Yocto 빌드 시스템을 통해 빌드될 때도 유효하다.
- 아래 커맨드를 실행:
meson arm64-build --cross-file config/arm/ arm64_dpaa_linux_gcc -Dexamples = <list of example applications to be compiled separated by commas> - Dprefix=<location to install DPDK> ninja -C arm64-build
여기서 -Dprefix와 -Dexamples는 선택적인 파라미터이다. Dprefix 파리미터는 모든 DPDK 바이너리(라이브러리와 예제 애플리케이션)를 이 파라미터로 나타내는 디렉토리 내의 표준 Linux 패키지별 레이아웃으로 배포하는 데 사용된다. 또는 dpdk/arm64-build/ 디렉토리도 생성되며, 이 디렉토리에서 바이너리와 라이브러리도 사용할 수 있다. 설치가 필요하지 않은 경우, ninja 커맨드에서 install 파라미터도 필요하지 않다. Dexamples는 필수 예제를 컴파일하는 데 사용된다. 드라이버만 컴파일해야 하는 경우, 이 파라미터는 필요하지 않다. - 예제 애플리케이션이 컴파일되면, DPDK 빌드 디렉토리에서 접두사 "dpdk"-와 함께 바이너리를 사용할 수 있다:
dpdk/arm64-build/examples/*
위의 예제 애플리케이션 외에도, 사용 가능하고 호환되는 디바이스에 대한 DPDK 드라이버(PMD) 기능의 포괄적인 검증에 사용할 수 있는 testpmd 바이너리를 DPDK는 제공한다. 이 바이너리는 DPDK 소스 컴파일 중에 기본적으로 컴파일된다. dpdk/arm64-build/examples/ 디렉토리에서 사용할 수 있다.
- 아래 커맨드를 실행: