분류

2018년 2월 6일 화요일

Yocto 학습 : 작업 #3 - 빌드 결과

---------------------------------------------------------------------------------------------------
이 문서는 Yocto Training - HOME 문서를 한글 화 한 것입니다. 저자이신 Daiane Angolini 님의 수락 하에 한글 화 작업을 진행하고 있습니다. 일부 주석을 첨부 할 것이며, 필요하면 의역을 통해 일부 내용이 변경 되거나 누락 될 수 있습니다. 하지만 기본은 구글이 번역하겠습니다.

원본은 https://community.nxp.com/docs/DOC-94849 입니다.
---------------------------------------------------------------------------------------------------

이미 알고 있듯이 소스는 주기적으로 업데이트 하십시오.

$ repo sync

무엇이 변경되었습니까? 터미널에 출력 된 메시지를 읽고 변경 사항을 확인하세요.

디렉터리 구조 

이것이 제  fsl-community-bsp 디렉터리 내에 포함되어 있는 소스 목록입니다. 
$ tree -d -L 2 -A

├── build_mx53
│ ├── conf
│ ├── sstate-cache
│ └── tmp
├── build_mx6
│ ├── conf
│ ├── sstate-cache
│ └── tmp
├── downloads
│ └── git2
└── sources
├── base
├── meta-fsl-arm
├── meta-fsl-arm-extra
├── meta-fsl-demos
├── meta-openembedded
└── poky

tree 명령이 수행되지 않을 경우 아래 명령을 수행해서 tree를 설치해주세요 
$ sudo apt-get install tree
늘곰씨 디렉터리도 큰 구조 차이는 없습니다. 
.
├── build
│   ├── cache
│   ├── conf
│   ├── sstate-cache
│   └── tmp
├── downloads
│   ├── backport
│   ├── debian
│   ├── etc
│   ├── git2
│   ├── licenses
│   └── share
└── sources
    ├── base
    ├── meta-fsl-arm
    ├── meta-fsl-arm-extra
    ├── meta-fsl-demos
    ├── meta-openembedded
    └── poky

폴더는 작업 Yocto 학습 : 작업 #2 - 첫 번째 빌드의 새 빌드 디렉터리 생성 에서 입력한 명칭으로 빌드 디렉터리를 생성한 결과입니다. 학습 문서에 따라 $ source setup-environment build 라고 입력하였다면 디렉터리만 생성됩니다. 

sstate-cache는 이전에 빌드 된 패키지의 정보를 유지합니다. 패키지의 변경 사항이 없을 경우 다시 빌드를 수행 할 필요는 없습니다.
만약에 팀 간의 빌드 환경을 동일하게 공유하고 있을 경우. Sstate-cache 폴더 역시 공유할 수 있습니다. Yocto의 개인 환경 설정에 익숙하지 않을 경우 Yocto  프로젝트 참조 설명서를 읽어보세요.
※ 한글 화 된 문서가 있긴 합니다. 검색해보시면. 그런데 제 스타일 아니라서 나중에 번역해서 참조 링크를 추가 하겠습니다. 

downloads는 모든 빌드 폴더에서 공유된 것입니다. 이것은 모든 패키지 소스 코드를 포함하고 있습니다. 예를 들어 ssh소스코드 같은 것들이죠(그리고 이 소스 코드는 어떤 아키텍처의 빌드에도 사용될 수 있습니다.)

또한 당신의 팀과 다운로드 폴더를 공유할 필요성이 생길 수 있습니다. (팀 전체를 위한 하나의 다운로드 폴더를 사용)  이럴 경우  Yocto  프로젝트 참조 설명서의 DL_DIR 부분을 참조하세요.

build_mx6의 구조

.../build_mx6$ tree -d -L 2 -A
.
├── conf
├── sstate-cache
└── tmp
       ├── buildstats
       ├── cache
       ├── deploy
       ├── log
       ├── pkgdata
       ├── sstate-control
       ├── stamps
       ├── sysroots
       ├── work
       └── work-shared

tmp폴더 안에서 이미지의 빌드 결과를 찾을 수 있습니다. 생성된 이미지들은 deploy안에 있습니다.

buildstats 폴더에는 각 패키지가 들어있으며 build_stats 파일에 태스크의 초기 및 최종 시간과 같은 빌드 수행 관련 통계 정보가 있습니다.

log 폴더에는 수행한 모든 'bitbake' 명령에 대한 전체 로그가 기록됩니다. 예를 들어 log/cooker/imx6qsabresd/111111.log 같은 파일을 살펴보십시오. 11111은 pid 번호이므로 bitbake를 실행할 때마다 다른 번호가 표시됩니다.

작업에 사용된 각 패키지에 대한 소스 코드, 패치, bitbake에 대한 로그가 작동 중입니다. 커널의 경우 tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r37.14/ 아래에 있는 파일을 보십시오.


.../build_mx6$ tree -d -L 1 -A tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r37.14/tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r37.14/

├── deploy-linux-imx
├── deploy-rpms
├── git
├── image
├── license-destdir
├── package
├── packages-split
├── pkgdata
├── pseudo
├── sysroot-destdir
└── temp

tmp 폴더 아래의 많은 로그들과 실행 파일들을 확인하세요.
r37.14/temp/

log.do_bundle_initramfs                   log.do_uboot_mkimage                
run.do_package_write_rpm.28992       run.perform_packagecopy.16364
log.do_bundle_initramfs.28986          log.do_uboot_mkimage.2325           
run.do_patch                                 run.populate_packages.16364
log.do_compile                              log.do_unpack                       
run.do_patch.2556                          run.read_shlibdeps.16364
log.do_compile.3483                       log.do_unpack.1155                  
run.do_populate_lic                        run.read_subpackage_metadata.28992
log.do_compile_kernelmodules          log.task_order                      
run.do_populate_lic.10988                run.split_and_strip_files.16364
log.do_compile_kernelmodules.29051  run.base_do_fetch.28859             
run.do_populate_sysroot                   run.split_kernel_module_packages.16364
log.do_configure                            run.base_do_unpack.1155             
run.do_populate_sysroot.17692          run.split_kernel_packages.16364
log.do_configure.3048                      run.BUILDSPEC.28992                 
run.do_qa_configure.3048                 run.sstate_create_package.10988
log.do_deploy                                run.debian_package_name_hook.16364  
run.do_qa_staging.17692                  run.sstate_create_package.16364
log.do_deploy.617                          run.do_bundle_initramfs             
run.do_sizecheck                            run.sstate_create_package.17692
log.do_fetch                                  run.do_bundle_initramfs.28986       
run.do_sizecheck.2323                     run.sstate_create_package.2724
log.do_fetch.28859                         run.do_compile                      
run.do_strip                                  run.sstate_create_package.28992
log.do_install                                run.do_compile.3483                 
run.do_strip.2321                           run.sstate_create_package.617
log.do_install.2327                         run.do_compile_kernelmodules        
run.do_uboot_mkimage                   run.sstate_task_postfunc.10988
log.do_package                             run.do_compile_kernelmodules.29051  
run.do_uboot_mkimage.2325           run.sstate_task_postfunc.16364
log.do_package.16364                    run.do_configure                    
run.do_unpack                             run.sstate_task_postfunc.17692
log.do_packagedata                      run.do_configure.3048               
run.do_unpack.1155                      run.sstate_task_postfunc.2724
log.do_packagedata.2724               run.do_deploy                       
run.emit_pkgdata.16364                run.sstate_task_postfunc.28992
log.do_package_write_rpm             run.do_deploy.617                   
run.fixup_perms.16364                  run.sstate_task_postfunc.617
log.do_package_write_rpm.28992     run.do_fetch                        
run.package_depchains.16364         run.sstate_task_prefunc.10988
log.do_patch                               run.do_fetch.28859                  
run.package_do_filedeps.16364       run.sstate_task_prefunc.16364
log.do_patch.2556                        run.do_install                      
run.package_do_pkgconfig.16364      run.sstate_task_prefunc.17692
log.do_populate_lic                       run.do_install.2327                 
run.package_do_shlibs.16364           run.sstate_task_prefunc.2724
log.do_populate_lic.10988              run.do_package                      
run.package_do_split_locales.16364  run.sstate_task_prefunc.28992
log.do_populate_sysroot                run.do_package.16364                
run.package_fixsymlinks.16364         run.sstate_task_prefunc.617
log.do_populate_sysroot.17692        run.do_packagedata                  
run.package_get_auto_pr.16364       run.sysroot_cleansstate.3048
log.do_sizecheck                            run.do_packagedata.2724             
run.package_get_auto_pr.2327        run.sysroot_stage_all.17692
log.do_sizecheck.2323                    run.do_package_qa.16364             
run.package_get_auto_pr.617            run.write_specfile.28992
log.do_strip                                  run.do_package_rpm.28992            
run.package_name_hook.16364
log.do_strip.2321                            run.do_package_write_rpm            

run.patch_do_patch.2556
각 패키지에 대한 최종 작업과 종료된 최종 작업 로그 파일을 확인할 수 있습니다.
예 :
log.do_compile - 커널 생성에 사용된 최종 do_compile 의 로그 출력
log.do_compile.3483 - 3483 시간의 컴파일 로그 출력
※ 순번을 나타내는 time인지, 시간을 나타내는지 정확히 모르겠습니다. taskorder에 의한 순번인 것 같습니다.
run.do_compile   -  컴파일에 사용된 명령어

작업과 작업 시퀀스에 대한 정보는 log.task_order파일에 있습니다.

생성된 이미지에 대한 정보는 아래와 같이 확인할 수 있습니다.


.../build_mx6$ ls -la tmp/deploy/images/imx6qsabresd/
total 146260
drwxr-xr-x 2 user user 4096 Mar 6 21:21 .
drwxrwxr-x 3 user user 4096 Mar 6 21:12 ..
-rw-r--r-- 1 user user 67108864 Mar 6 21:21 core-image-base-imx6qsabresd-20140306173758.rootfs.ext3
-rw-r--r-- 1 user user 83886080 Mar 6 21:21 core-image-base-imx6qsabresd-20140306173758.rootfs.sdcard
-rw-r--r-- 1 user user 18782361 Mar 6 21:21 core-image-base-imx6qsabresd-20140306173758.rootfs.tar.bz2
lrwxrwxrwx 1 user user 55 Mar 6 21:21 core-image-base-imx6qsabresd.ext3 -> core-image-base-imx6qsabresd-20140306173758.rootfs.ext3
lrwxrwxrwx 1 user user 57 Mar 6 21:21 core-image-base-imx6qsabresd.sdcard -> core-image-base-imx6qsabresd-20140306173758.rootfs.sdcard
lrwxrwxrwx 1 user user 58 Mar 6 21:21 core-image-base-imx6qsabresd.tar.bz2 -> core-image-base-imx6qsabresd-20140306173758.rootfs.tar.bz2
-rw-rw-r-- 2 user user 439697 Mar 6 21:12 modules--3.0.35-r37.14-imx6qsabresd-20140306173758.tgz
lrwxrwxrwx 2 user user 54 Mar 6 21:12 modules-imx6qsabresd.tgz -> modules--3.0.35-r37.14-imx6qsabresd-20140306173758.tgz
-rw-rw-r-- 2 user user 294 Mar 6 21:20 README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
lrwxrwxrwx 2 user user 35 Mar 6 21:16 u-boot.imx -> u-boot-imx6qsabresd-v2013.10-r0.imx
lrwxrwxrwx 2 user user 35 Mar 6 21:16 u-boot-imx6qsabresd.imx -> u-boot-imx6qsabresd-v2013.10-r0.imx
-rwxr-xr-x 2 user user 297984 Mar 6 21:16 u-boot-imx6qsabresd-v2013.10-r0.imx
lrwxrwxrwx 2 user user 53 Mar 6 21:12 uImage -> uImage--3.0.35-r37.14-imx6qsabresd-20140306173758.bin
-rw-r--r-- 2 user user 4042496 Mar 6 21:12 uImage--3.0.35-r37.14-imx6qsabresd-20140306173758.bin
lrwxrwxrwx 2 user user 53 Mar 6 21:12 uImage-imx6qsabresd.bin -> uImage--3.0.35-r37.14-imx6qsabresd-20140306173758.bin


이제 생성된 모든 이미지에 엑세스 할 수 있습니다. 이미지 이름이 년월일PID로 작성되어 있는 것이 진짜 이미지 입니다. 매번 bitbake 수행이 완료될 때 마다 새로운 이미지가 생성됩니다.

심볼릭 링크는 최종 생성된 이미지의 정보를 나타냅니다.
※ 리눅스 초보라 심볼릭 링크가 뭔가 보니 그냥 '->' 마크 이후에 나오는 것이 심볼릭 링크 정보더군요. 제타위키의 심볼릭 링크 생성 실습

.ext3 파일은 rootfs의 EXT3 이미지입니다.
다음 명령을 사용하여 SD카드에 이용하여 직접 복사할 수 있습니다.
$sudo dd if=core-image-base.ext3 of=/dev/sdb2
.sdcard 파일은 SD카드에 복사할 전체 이미지 파일입니다. (u-boot + uImage+rootfs)
.tar.bz2 파일은 rootfs용 압축 파일이며 pc에서 압축을 풀 수 있습니다.
uImage는 최신 커널 이미지입니다.
u-boot는 최신 u-boot 이미지입니다.

생성된 파일로 놀아보세요. 저도 그중 많은 것들에 대해 알지 못합니다. 그리고 저는 그중 많은 것들을 사용하지 않습니다. 표준 이미지 생성의 경우 최종 이미지의 배치 위치만 알면 됩니다.

모든 질문, 의견, 문제는 알려주시기 바랍니다.

학습을 종료 하기 전에 bitbake에서 가장 큰 이미지를 생성하세요
$ bitbake fsl-image-gui
Note 2014.02.24 : 빌드에 필요한 디스크 용량은 44GB입니다.
수행시켜놓고 다른 일을 하는 것을 권장 합니다.
※ 늘곰씨는 디스크 용량이 최대 80gb 밖에 안되서 그간 bitbake했던 build 디렉터리를 모두 삭제하였습니다. 
※2017.02.07 bitbake fsl-image-gui 사용시 오류가 발생하는 중입니다. ('gitorious.org[0: 64.13.172.37]: errno=Connection refused') 해당 사항은 문의중이며 오류 메시지 전문은 아래 캡처와 같습니다. 현재 fsl-image-gui 버전 이외의 core-image-base 를 통해 배포 및 기타 테스트를 진행했습니다. 

빌드 결과 개인적으로 변경해야 할 녀석들이 생겼습니다. busybox에서 일부 명령이 안들어서 문제가 되었는데요 이 경우 환경설정을 menuconfig를 통해서 해주어야 합니다. 
$ bitbake -c menuconfig busybox 
$ bitbake busybox 
$ bitbake core-image-base

디스크의 파티션 사이즈가 너무 작아 파일을 넣거나 빼기 어렵습니다. 따라서 디스크 크기도 조정 해 줍니다.
build폴더내에서 아래 명령을 수행해주면 rootfs가 2gb로 변경됩니다. 이부분에 계산 방법이 있다고 합니다. https://community.nxp.com/docs/DOC-105521
$ cat >> ./conf/local.conf << 'EOF' IMAGE_ROOTFS_SIZE = "2097152" IMAGE_OVERHEAD_FACTOR = "1.5" EOF



Yocto 교육 문서 - 홈
Yocto 학습 : 작업 #2 - 첫 번째 빌드
Yocto 학습 : 작업 #4 - 배포 및 테스트

댓글 없음:

댓글 쓰기