Yocto의 Quick Build 방법과 기존에 존재하는 Layer를 쉽게 추가하는 방법을 아래의 링크에서 쉽게 설명을 해주고 있으므로, 반드시 알아두자
- Yocto의 사용법 (Cookbook)
https://wiki.yoctoproject.org/wiki/Cookbook
- OS Image에 추가하는 방법 (Cookbook Topics)
https://wiki.yoctoproject.org/wiki/Cookbook:Example:Adding_packages_to_your_OS_image
- Application 개발관련내용(Cookbook Topics)
https://wiki.yoctoproject.org/wiki/Application_Development_with_Extensible_SDK
- Yocto 기본사용법확인
https://ahyuo79.blogspot.com/2015/10/yocto.html
https://yoctoproject.org/docs/2.7/mega-manual/mega-manual.html#what-is-the-yocto-project |
- Layer 의 우선순위 (Layer Priority)
$ bitbake-layers show-layers // Layer Priority 확인 및 구성확인 $ bitbake-layers layerindex-show-depends meta-raspberrypi // meta-raspberrypi의 의존성 확인, Layer를 추가할 때 의존성을 확인필요 $ bitbake-layers -h usage: bitbake-layers [-d] [-q] [-F] [--color COLOR] [-h]... BitBake layers utility optional arguments: -d, --debug Enable debug output -q, --quiet Print only errors -F, --force Force add without recipe parse verification --color COLOR Colorize output (where COLOR is auto, always, never) -h, --help show this help message and exit subcommands: add-layer Add one or more layers to bblayers.conf. remove-layer Remove one or more layers from bblayers.conf. flatten flatten layer configuration into a separate output directory. show-layers show current configured layers. show-overlayed list overlayed recipes (where the same recipe exists in another layer) show-recipes list available recipes, showing the layer they are provided by show-appends list bbappend files and recipe files they apply to show-cross-depends Show dependencies between recipes that cross layer boundaries. layerindex-fetch Fetches a layer from a layer index along with its dependent layers, and adds them to conf/bblayers.conf. layerindex-show-depends Find layer dependencies from layer index. create-layer Create a basic layer Use bitbake-layers --help to get help on a specific command
https://dornerworks.com/blog/building-linux-with-yocto |
- 궁금사항
- Layer의 우선순위는 어떻게 정해지는 것인가?
- Recipe의 우선순위는 어떻게 정해지는가?
1번째의 질문의 답은 처음 conf/bblayers.conf에서 정해지는 것으로 착각했으나, 각 개별 Layer의 conf에 BBFILE_PRIORITY_xxx , suffix는 layer 이름에 의해 정해진다.
- meta-oe Layer 의 예제 (oe는 open embedded 약어)
$ vi meta-openembedded/meta-oe/conf/layer.conf // 각 Layer의 conf에 의해 정의됨 BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_PRIORITY_openembedded-layer = "6" // openembedded layer 우선순위 LAYERDEPENDS_openembedded-layer = "core" //의존성 LAYERSERIES_COMPAT_openembedded-layer = "thud warrior zeus" // Yocto version 호환성
- meta-networking Layer 예제
$ vi meta-openembedded/meta-networking/conf/layer.conf BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ // 등록되는 순서에 의해 동작될것이라고 생각 ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_PRIORITY_networking-layer = "5" //networking layer의 우선순위 (같은 meta-openembdedded에 속해있지만 다름) LAYERDEPENDS_networking-layer = "core" // 의존성이 상당함 LAYERDEPENDS_networking-layer += "openembedded-layer" LAYERDEPENDS_networking-layer += "meta-python" LAYERSERIES_COMPAT_networking-layer = "thud warrior zeus"
2번째의 질문의 답은 처음 Layer의 conf에서 BBFILES의 등록되는 순서가 아닐까 역시 잠시 착각 했는데, BBFILES은 등록만 할뿐 모든 Recipe는 사용하지 않는다는 사실을 깜빡했다.
잘 생각을 해보면, 최종 target image.bb파일이 존재하여, IMAGE_INSTALL에 들어간 Package들만을 설치진행한다.
기본으로 설치되는 부분은 class라는 공유개념이 존재하며,모든 recipe들은 사용하지 않는다.
즉 image -> core-image -> include ***.bb 확장되어가는 구조
2. Raspberry Pi 개발환경 구성
- OS: Ubuntu 16.04_LTS 64bit
- Window 기반의 Virtual Box 사용
- 기본설치
$ sudo apt install chrpath diffstat gawk libncurses5-dev texinfo
makeinfo -> texinfo 변경
2.1 Raspberry PI 관련사항
- Raspberry PI 설정 및 전체문서
- Raspberry PI Kernel
https://wikidocs.net/3244
- Raspberry Android Build
2.2 Raspberry Pi Yocto 전체구성
상위 Raspberry PI Yocto 구성 를 보면 사용할 GIT는 아래와 같이 세개로 구성이 된다.
- 기본 Yocto 시스템 및 추가 metalayer들
- git://git.yoctoproject.org/poky // 기본 Yocto System 인 Poky
- git://git.openembedded.org/meta-openembedded // Yocto의 meta-layer (meta-oe) 추가
- https://github.com/agherzan/meta-raspberrypi // Yocto의 meta-layer (meta-raspberrypi) 추가
- Raspberry Pi Yocto 기본사용법 참고 사이트
http://www.yocto.co.kr/2016/01/yocto-project-2.html
http://kernelhacks.com/raspberry-pi-3-with-yocto/
2.3 Yocto 구성 및 meta layer 추가
Yocto의 Reference Manual에 Reference Distribution Layer인 Poky를 구성한 후 각 필요한 meta layer들을 각각 추가하여 구성한다.
- 필요한 Raspberry Pi를 위한 BSP Layer 추가
- Emdedded 관련된 기본인 Base Layer 추가
- Yocto의 기본인 Poky (Reference Distribution Layer) 구성
Yocto의 기본시스템이 Pocky를 git로 download하여 아래와 같이 구성을 확인하자
$ mkdir raspberrypi $ cd raspberrypi $ git clone -b master git://git.yoctoproject.org/poky $ tree poky -L 1 poky ├── bitbake // bin에 bitbake , bitbake-layers 가 존재하므로 중요 ├── contrib ├── documentation ├── LICENSE ├── LICENSE.GPL-2.0-only ├── LICENSE.MIT ├── meta ├── meta-poky ├── meta-selftest ├── meta-skeleton ├── meta-yocto-bsp ├── oe-init-build-env ├── README.hardware -> meta-yocto-bsp/README.hardware ├── README.OE-Core ├── README.poky -> meta-poky/README.poky ├── README.qemu └── scripts // devtool늘 비롯하여 각종 oe-xxxxx tools 제공 $ cd poky $ ls LICENSE README.hardware README.qemu documentation meta-poky meta-skeleton oe-init-build-env README.LSB README.poky bitbake meta meta-selftest meta-yocto-bsp scripts
http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/
- poky 에 meta-raspberrypi (BSP Layer) 추가
$ pwd /home/jhlee/raspberrypi/poky $ git clone -b master https://github.com/agherzan/meta-raspberrypi $ tree -L 1 meta-raspberrypi meta-raspberrypi ├── classes ├── conf ├── COPYING.MIT ├── docs ├── dynamic-layers ├── files ├── README.md ├── recipes-bsp ├── recipes-connectivity ├── recipes-core ├── recipes-devtools ├── recipes-graphics ├── recipes-kernel ├── recipes-multimedia └── wic $ ls LICENSE README.hardware README.qemu documentation meta-openembedded meta-raspberrypi meta-skeleton oe-init-build-env README.LSB README.poky bitbake meta meta-poky meta-selftest meta-yocto-bsp scripts
https://layers.openembedded.org/layerindex/branch/master/layer/meta-raspberrypi/
https://github.com/agherzan/meta-raspberrypi
http://meta-raspberrypi.readthedocs.io/en/latest/readme.html
http://git.yoctoproject.org/cgit.cgi/meta-raspberrypi/
- poky 에 meta-oe (Base Layer) 추가
$ pwd
/home/jhlee/raspberrypi/poky
$ git clone -b master git://git.openembedded.org/meta-openembedded
$ tree -L 1 meta-openembedded/
meta-openembedded/
├── contrib
├── COPYING.MIT
├── meta-filesystems
├── meta-gnome
├── meta-initramfs
├── meta-multimedia // 이 아래의 4개의 layer만 rpi-build/conf/bblayers.conf 에 추가
├── meta-networking
├── meta-oe
├── meta-perl
├── meta-python
├── meta-webserver
├── meta-xfce
└── README
https://layers.openembedded.org/layerindex/branch/master/layer/meta-oe/
http://cgit.openembedded.org/meta-openembedded/tree/
- Yocto poky 에서 구조확인가능
2.4 이외의 meta-layer 추가방법
Cookbook을 보면 자세히 나오며 각각 Layer들을 추가하여 확장하기가 쉽다. 다만, Type은 반드시 확인을 해야한다.
- OpenEmbeded Layer Index 의 meta-oe Layer 검색
- meta-oe (meta-openembedded) Layer Type Base를 찾음
- meta-raspberrypi 검색 과 Layer Type BSP 확인
Reference Manual에는 Layer Type은 3가지밖에 없지만, 이곳에는 다음과 같이 더 분류를 하고 의미가 조금 다른 것 같다.
- Layer Type
- Base: Emdedded에서 기본 Layer로 개발 Tools 및 Kernel 관련부부구성
- Machine (BSP) : 각 개별 Board에 맞게 BSP 가 구성되어있어 선택
- Distribution : Poky를 기반으로 확장된 배포판으로 구성되어짐
- Miscellaneous : 개발환경 혹은 특정 ARCH에 의존적으로 구성이됨
- Software : 쉽게 추가가능한 Opensource (이 Layer를 추가)
Base는 현재 meta-oe 와 openembedded-core 두 종류로 제공하고 있지만, meta-oe만 주로 사용한다
- meta-oe : Embedded에서 필요한 개발 Tool 및 Kernel
- openembedded-core: 많은 부분이 poky와 중복되는 것 같음
OpenEmbedded Layer Index
https://layers.openembedded.org/layerindex/branch/master/layers/
Yocto Site
http://git.yoctoproject.org/cgit.cgi/
3. Yocto의 설정확인 및 변경
bitbake를 사용하기 위해서 아래와 같이 기본빌드환경을 설정해줘야 한다
pocky 안에 oe-init-build-env를 실행하면, bitbake 사용 및 rpi-build directory가 생성이 된다.
물론 그냥 poky안에서 oe-init-build는 상관은 없지만, 모든 빌드내용이 rpi-build에 저장되기때문에 이를 외부를 분리하는 것이다.
$ source poky/oe-init-build-env rpi-build
build directory(rpi-build) 의 이름을 변경을 해도 상관없음
- Raspberry PI Yocto 전체구성
$ tree -d -L 2 ├── poky │ ├── bitbake │ ├── documentation │ ├── meta │ ├── meta-openembedded // 추가될 layers로 하위 디렉토리에 layer가 존재 │ ├── meta-poky │ ├── meta-raspberrypi // 추가될 layer │ ├── meta-selftest │ ├── meta-skeleton │ ├── meta-yocto-bsp │ └── scripts └── rpi-build // 이곳에서 빌드를 진행하므로, 추후 제거 할때도 이부분만 제거 (2.1 이후 생성) ├── cache ├── conf // 빌드할 Layers 및 MACHINE 설정 ├── downloads // GIT Download ├── sstate-cache └── tmp // tmp/deploy/image/machine/xxxxx 배포
- rpi-build 의 user configuration 설정
- ./conf/bblayers.conf // build할 Layer 추가
- ./conf/local.conf // build될 machine 설정
3.1 rpi-build/conf/bblayers.conf
본인이 bitbake를 이용하여 빌드하고자하는 각 Layer들을 적용을 하자
- rpi-build/conf/bblayers.conf 에 Layer 추가
$ cd rpi-build $ vi ./conf/bblayers.conf ....... BBLAYERS ?= " \ /home/jhlee/raspberrypi/poky/meta \ /home/jhlee/raspberrypi/poky/meta-poky \ /home/jhlee/raspberrypi/poky/meta-yocto-bsp \ /home/jhlee/raspberrypi/poky/meta-openembedded/meta-oe \ /home/jhlee/raspberrypi/poky/meta-openembedded/meta-multimedia \ /home/jhlee/raspberrypi/poky/meta-openembedded/meta-networking \ /home/jhlee/raspberrypi/poky/meta-openembedded/meta-python \ /home/jhlee/raspberrypi/poky/meta-raspberrypi \ "
3.2 rpi-build/conf/local.conf
MACHINE의 설정 및 전체 변수관련부분 설정 MACHINE이 아니더라도 본인이 원하는 부분을 설정을 하면 전체 적용되므로 중요
- rpi-build/conf/local.conf 에 Machine 설정
$ cd rpi-build $ vi ./conf/local.conf # # Machine Selection # # You need to select a specific machine to target the build with. There are a selection # of emulated machines available which can boot and run in the QEMU emulator: # #MACHINE ?= "qemuarm" #MACHINE ?= "qemuarm64" #MACHINE ?= "qemumips" #MACHINE ?= "qemumips64" #MACHINE ?= "qemuppc" #MACHINE ?= "qemux86" #MACHINE ?= "qemux86-64" # # There are also the following hardware board target machines included for # demonstration purposes: # #MACHINE ?= "beaglebone-yocto" #MACHINE ?= "genericx86" #MACHINE ?= "genericx86-64" #MACHINE ?= "mpc8315e-rdb" #MACHINE ?= "edgerouter" # MACHINE ?= "raspberrypi3-64" # This sets the default machine to be qemux86 if no other machine is selected: #MACHINE ??= "qemux86"
3.3 MACHINE의 Config 확인
conf/local.conf 에서 설정한 MACHINE 은 항상 동일한 이름으로 conf가 존재하며 이를 찾아 관련설정을 확실히 확인하자
- MACHINE의 raspberrypi3-64.conf 확인
$ cd pocky $ find . -name machine | xargs ls // MACHINE의 이름을 모를 경우 모든 BSP Layer 검색 ./meta/conf/machine: include qemuarm.conf qemuarm64.conf qemumips.conf qemumips64.conf qemuppc.conf qemux86-64.conf qemux86.conf ./meta-raspberrypi/conf/machine: include/ raspberrypi-cm3.conf raspberrypi0-wifi.conf raspberrypi2.conf raspberrypi3.conf raspberrypi-cm.conf raspberrypi.conf raspberrypi0.conf raspberrypi3-64.conf ./meta-selftest/conf/machine: qemux86copy.conf ./meta-yocto-bsp/conf/machine: beaglebone-yocto.conf edgerouter.conf genericx86-64.conf genericx86.conf include mpc8315e-rdb.conf or $ find . -name raspberrypi3-64.conf // MACHINE 이름을 정확히 아는 경우
주로 확인해야 할 것이 UBOOT 설정 과 KERNEL 및 Device Tree 가 될 것 같다
- 지원 MACHINE 이름
4. Bitbake로 기본 빌드
bitbake는 상위 pocky->bitbake안에 존재하므로 이것이 PATH에 적용이 되지 않을 경우는 아래와 같이 동작하지 않는다.
다시 설정하고 싶다면 2.를 다시 설정하면 되며, 상위 저장된 설정도 기억하고 있다.
- Bitbake로 빌드진행
$ bitbake core-image-base
빌드를 할 경우, 상당한 시간과 용량을 필요로 하며, 용량은 VDI의 경우 최소 50G로 잡자.
처음 30G (Ubuntu까지 설치된 상태)로 빌드를 진행을 했는데, 용량부족으로 실패했다.
4.1 core-image-minimal 와 core-image-base 차이
yocto에서 image를 생성하기 위해서 상위 target 설정이외 sato or x11 등 다양하게 확장제공하고 있지만, 일단 2개의 정확한 차이를 알아두고 어떻게 확장하는지 알아보자.
- bitbake에서 image를 만들때 가장 많이 사용하는 Target or Recipe
- core-image-minimal: 기본으로 boot하고 기본동작되는 확인
- core-image-base: core-image-minimal 에 MACHINE의 HW의 모든기능을 제공 및 테스트 가능
- core-image-base 와 core-image-minimal 각 위치확인
$ pwd /home/jhlee/raspberrypi/poky $ find . -name core-image-minimal* ./meta/recipes-core/images/core-image-minimal-mtdutils.bb ./meta/recipes-core/images/core-image-minimal-initramfs.bb ./meta/recipes-core/images/core-image-minimal.bb ./meta/recipes-core/images/core-image-minimal-dev.bb $ find . -name core-image-base* ./meta/recipes-core/images/core-image-base.bb
- core-image-minimal 의 구성확인
- IMAGE_INSTALL : packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL} 직접정의
- inherit core-image : core-image*.bbclass를 사용
$ cat ./meta/recipes-core/images/core-image-minimal.bb // 아래의 core-image.bbclass 부분과 비교
SUMMARY = "A small image just capable of allowing a device to boot."
IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL}"
IMAGE_LINGUAS = " "
LICENSE = "MIT"
inherit core-image
IMAGE_ROOTFS_SIZE ?= "8192"
IMAGE_ROOTFS_EXTRA_SPACE_append = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", " + 4096", "" ,d)}"
- core-image-base 의 구성 (core-image.bbclass의 IMAGE_INSTALL 사용)
- IMAGE_INSTALL: 설정정의가 없으므로, core-image*.bbclass에 정의된 것으로 동작
- inherit core-image : core-image*.bbclass를 사용
$ cat ./meta/recipes-core/images/core-image-base.bb SUMMARY = "A console-only image that fully supports the target device \ hardware." IMAGE_FEATURES += "splash" LICENSE = "MIT" inherit core-image
- core-image.bbclass ( inherit core-image 검색)
core-image-base의 경우 packagegroup-base-extended 부분이 추가됨
$ find . -name core-image*bb*
..
./meta/classes/core-image.bbclass
..
$ cat ./meta/classes/core-image.bbclass // inherit core-image 관련부분 확인
CORE_IMAGE_BASE_INSTALL = '\
packagegroup-core-boot \
packagegroup-base-extended \
\
${CORE_IMAGE_EXTRA_INSTALL} \
'
IMAGE_INSTALL ?= "${CORE_IMAGE_BASE_INSTALL}"
inherit image
- image.bbclass (inherit image)
$ find . -name image*bb* // inherit image 관련부분 검색
..
./meta/classes/image.bbclass
$ cat ./meta/classes/image.bbclass
IMAGE_CLASSES ??= ""
# rootfs bootstrap install
# warning - image-container resets this
ROOTFS_BOOTSTRAP_INSTALL = "run-postinsts"
# Handle inherits of any of the image classes we need
IMGCLASSES = "rootfs_${IMAGE_PKGTYPE} image_types ${IMAGE_CLASSES}"
# Only Linux SDKs support populate_sdk_ext, fall back to populate_sdk_base
# in the non-Linux SDK_OS case, such as mingw32
IMGCLASSES += "${@['populate_sdk_base', 'populate_sdk_ext']['linux' in d.getVar("SDK_OS")]}"
IMGCLASSES += "${@bb.utils.contains_any('IMAGE_FSTYPES', 'live iso hddimg', 'image-live', '', d)}"
IMGCLASSES += "${@bb.utils.contains('IMAGE_FSTYPES', 'container', 'image-container', '', d)}"
IMGCLASSES += "image_types_wic"
IMGCLASSES += "rootfs-postcommands"
IMGCLASSES += "image-postinst-intercepts"
inherit ${IMGCLASSES}
..... 너무길어 중략 (do_rootfs 비롯하여 다른 중요부분도 한번봐야함)
공통적으로 inherit core-image로 공유해서 사용되어지고 있으며, 이 부분은 bbclass 로 되어있고, 이 공유하며,
중요한 부분은 IMAGE_INSTALL 의 정의차이를 보면 될 것 같다.
아래링크참조
https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-classes-core-image
https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#ref-classes-image
https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html
4.2 core-image-xxx 확장 및 본인의 Image target 확장
recipe 내에서 include recipe-core/images/core-image-base.bb 추가하여 확장하는 구조이다.
- raspberry pi target recipe 확장분석
rpi-basic-image는 앞으로 안 사용되어질 거라고 하는데, core-image-base 로 하면 될 것 같다.
$ vi meta-raspberrypi/recipes-core/images/rpi-basic-image.bb # Base this image on core-image-minimal include recipes-core/images/core-image-minimal.bb # Include modules in rootfs IMAGE_INSTALL += " \ kernel-modules \ " SPLASH = "psplash-raspberrypi" IMAGE_FEATURES += "ssh-server-dropbear splash" do_image_prepend() { bb.warn("The image 'rpi-basic-image' is deprecated, please use 'core-image-base' instead") }
- 나만의 target image recipe 로 확장
$ vi meta-raspberrypi/recipes-core/images/core-image-jhlee.bb SUMMARY = "JHLee Sample Test Image" # Base this image on core-image-minimal include recipes-core/images/core-image-base.bb # ssh server and systemd and tcpdump IMAGE_INSTALL += "openssh systemd-analyze tcpdump" export IMAGE_BASENAME = "core-image-jhlee"
recipe 검색
https://layers.openembedded.org/layerindex/branch/master/recipes/
4.3 SD Image 확인 및 Writing Image
- How to find SD image
$ cd rpi-build/tmp/deploy/images/raspberrypi3-64 $ ls *.rpi* core-image-base-raspberrypi3-64-20180526144104.rootfs.rpi-sdimg core-image-base-raspberrypi3-64.rpi-sdimg
- How To write SD Image
$ sudo dd if=core-image-base-raspberrypi3-64.rpi-sdimg of=/dev/sde bs=1M // 이부분 SD Disk와 연결되었을 경우
상위명령어 대신 이 Image 파일을 Window로 가져와서 Win32DiskImager를 이용하자
- Win32DiskImager
4.4 Bitbake Build 분석 및 에러사항
- Bitbake 빌드 분석
WARNING: Host distribution "ubuntu-14.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution. Build Configuration: BB_VERSION = "1.37.0" BUILD_SYS = "x86_64-linux" // HOST의 Build System NATIVELSBSTRING = "universal-4.8" // Ubuntu 일 경우 ubuntu로 표시 TARGET_SYS = "aarch64-poky-linux" // Target system 이름 ARM을 사용할 경우 ARM이 표시됨 MACHINE = "raspberrypi3-64" // Board의 Machine 이름 DISTRO = "poky" DISTRO_VERSION = "2.5" TUNE_FEATURES = "aarch64" // Compiler 관련 설정 TARGET_FPU = "" // Hardware FPU 설정 meta meta-poky meta-yocto-bsp = "master:13cc30cd7de4841990b600e83e1249c81a5171dd" meta-oe meta-multimedia meta-networking meta-python = "master:d59b9806f743cea0168cddf942a31dcf446839e6" meta-raspberrypi = "master:7f7bc9e778b6def018c451ecb23f5169cd18f5ed"
- 문제사항 1
$ bitbake core-image-base ERROR: Unable to start bitbake server ERROR: Last 10 lines of server log for this session (/home/jhlee/raspberrypi/rpi-build/bitbake-cookerdaemon.log): self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset) File "/home/jhlee/raspberrypi/poky/bitbake/lib/bb/cooker.py", line 197, in __init__ self.initConfigurationData() File "/home/jhlee/raspberrypi/poky/bitbake/lib/bb/cooker.py", line 356, in initConfigurationData self.databuilder.parseBaseConfiguration() File "/home/jhlee/raspberrypi/poky/bitbake/lib/bb/cookerdata.py", line 317, in parseBaseConfiguration raise bb.BBHandledException bb.BBHandledException ERROR: The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed: chrpath gawk makeinfo
아래 Package 설치 후 문제해결 (상위에 모두 표시)
$ sudo apt install gawk $ sudo apt-get install chrpath $ sudo apt-get install texinfo
- 문제사항 2
WARNING: Host distribution "ubuntu-14.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution. ....... ERROR: mpfr-native-3.1.5-r0 do_compile: oe_runmake failed ERROR: mpfr-native-3.1.5-r0 do_compile: Function failed: do_compile (log file is located at /home/jhlee/raspberrypi/rpi-build/tmp/work/x86_64-linux/mpfr-native/3.1.5-r0/temp/log.do_compile.13203) ERROR: Logfile of failure stored in: /home/jhlee/raspberrypi/rpi-build/tmp/work/x86_64-linux/mpfr-native/3.1.5-r0/temp/log.do_compile.13203 .... | x86_64-linux-libtool: error: 'set_si_2exp.lo' is not a valid libtool object | make[2]: *** [libmpfr.la] Error 1 | make[2]: Leaving directory `/home/jhlee/raspberrypi/rpi-build/tmp/work/x86_64-linux/mpfr-native/3.1.5-r0/build/src' | make[1]: *** [all] Error 2 | make[1]: Leaving directory `/home/jhlee/raspberrypi/rpi-build/tmp/work/x86_64-linux/mpfr-native/3.1.5-r0/build/src' | make: *** [all-recursive] Error 1 | ERROR: oe_runmake failed | WARNING: exit code 1 from a shell command. | ERROR: Function failed: do_compile (log file is located at /home/jhlee/raspberrypi/rpi-build/tmp/work/x86_64-linux/mpfr-native/3.1.5-r0/temp/log.do_compile.13203) ERROR: Task (virtual:native:/home/jhlee/raspberrypi/poky/meta/recipes-support/mpfr/mpfr_3.1.5.bb:do_compile) failed with exit code '1'
Ubuntu 16으로 변경 후 문제 해결 (처음 Ubuntu 14.04로 진행함)
https://stackoverflow.com/questions/36226828/yocto-bitbake-script-not-displaying-echo-statement