do_populate_sdk()
do_populate_sdk()
, do_populate_sdk_ext()
를 통해 SDK를 쉽게 구성할 수 있다./build/tmp/deploy/sdk/*.sh
로 만들어 지고, 해당 파일만 있다면 개발자는 Cross-compile 환경을 쉽게가져갈 수 있다.$ bitbake core-image-full-cmdline -c populate_sdk
${TMPDIR}/deploy/sdk/poky-glibc-x86_64-core-image-full-cmdline-aarch64-qemuarm64-toolchain-3.1.13.sh
sdk/*.sh
${TMPDIR}/deploy/sdk/poky-glibc-x86_64-core-image-full-cmdline-aarch64-qemuarm64-toolchain-3.1.13.sh
를 실행한다./opt/poky/3.1.13
이다. 하지만 원하는 디렉토리를 설정 할 수도 있다./opt/poky/3.1.13
)에 아래의 파일 및 디렉토리가 생성된다.install file | description |
---|---|
1. environment-setup-aarch64-poky-linux | 툴체인을 사용하기 위해 필요한 모든 환경 변수의 설정을 위해 사용 |
2. site-config-aarch64-poky-linux | 툴체인 생성에 사용되는 변수들을 담고 있는 파일 |
3. sysroots | SDK 생성을 위해 사용된 이미지 rootfs 디렉토리의 복사본 다음과 같은 하위 디렉토리는 바이너리, 헤더, 라이브러리 파일들을 포함한다.
|
4. version-armv5te-poky-linux-gnueabi | 버전과 타임스탬프 정보 |
source
명령어로 현재 쉘에 적용 시켜 보자.$ source ./environment-setup-aarch64-poky-linux
$ echo ${CC}
aarch64-poky-linux-gcc -march=armv8-a+crc -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/opt/poky/3.1.13/sysroots/aarch64-poky-linux
$ echo ${LD}
aarch64-poky-linux-ld --sysroot=/opt/poky/3.1.13/sysroots/aarch64-poky-linux
$ echo ${LDFLAGS}
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fstack-protector-strong -Wl,-z,relro,-z,now
hello_world.c
를 예로 들어, ARM 아키텍처를 타깃으로 빌드한다.$ source /opt/poky/2.4/environment-setup-armv5e-poky-linux-gnueabi
$ ${CC} hello_world.c -o hello_world
생성된 바이너리가 원하는 타깃 이키텍처에 맞게 생성됐는지 확인 하려면 다음과 같이 입력한다.
$ file hello-world
hello-world: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0,
BuildID[sha1]=ce9b7..., not stripped
일반적으로 이용하는 또다른 프로젝트는 리눅스 커널이다. 리눅스 커널은 LD 유틸리티를 이용해 링킹을 하기 때문에 GCC를 사용해 정의한 기본 값으로 unset을 사용해 LDFLAGS 변수를 재설정해야한다. 리눅스 커널 소스코드를 빌드하려면 다음 명령을 이용하면된다.
$ source /opt/poky/2.4/environment-setup-armv5e-poky-linux-gnueabi
$ unset LDFLAGS
$ make defconfig
$ make zImage
$ find /opt/poky/2.4/ -iname "*cmake*" 2> /dev/null
/opt/poky/2.4/sysroot/<arch>/usr/share/cmake/OEToolchainConfig.cmake
$ tree ./cmake-hello-world
CMakeLists.txt
main.cpp
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(cmake-hello-world-cpp)
add_executable(${PROJECT_NAME} "main.cpp")
main.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=/opt/poky/2.4/sysroot/<arch>/\
usr/share/cmake/OEToolchainConfig.cmake ..
build!
$ make
meta-toolchain
meta-toolchain
$ bitbake meta-toolchain
qemuarm
머신을 위한 결과:${PN}-dev
패키지를 이미지에 설치한다.IMAGE_FEATRUES += "dev-pkgs"
1.4. local.conf 에서 기능을 넣고 싶은 경우 아래와 같이 한다.EXTRA_IMAGE_FEATRUES += "dev-pkgs"
native build 는 포키 환경설정을 통해 SDK이미지를 만들 수 있다.
개발 도구를 이미지에 포함시키기 위해서는 tools-sdk 기능을 IMAGE_FEATURES에 포함(물론 local.conf에서 포함할 경우 EXTRA_IMAGE_FEATRUES 사용)
nativesdk-packagegroup-sdk-host.bb
openembedded-core 레이어에서 meta/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bb
가 가장 뼈대가 되는 native-sdk 인데,
사용할 이미지에서 이거 .bbappend
쳐서 RDEPENDS
로 패키지 넣고 뺄 것
openembedded-core 레이어에서 meta/recipes-core/meta/meta-environment.bb
에 populate_sdk로 설치되는 쉘 설정 등을 할 수 있다.
openembedded-core/meta/classes/toolchain-scripts.bbclass