SSTATE 변수 | Description |
---|---|
SSTATE_DIR | rw 권한이 있어야함 |
SSTATE_MIRRORS |
local.conf
, distro.conf etc
에서 살핌.bb
, .bbappend
, functions etc
에서 살핌src_uri
do_patch
, do_unpack
do_package
, do_populate_sysroot
, do_deploy
빌드 시스템은 위의 태스크와 다른 이전 태스크 사이 관계의 정보를 가지고 있다.
do_populate_sysroot_setscene
for something, do_package
가 실행되어야 할 때, bitbake는 다른 태스크를 실행하길 원한다.
Bitbake는 두 가지 문맥으로 실행한다.
1) setscene stage
2) actual build
1) bitbake는 처음에 태스크의 리스트와 빌드와 일치하는 해쉬를 가지는BB_HASHCHECK_FUNCTION
변수에 의해 정의된 함수 호출한다.
$ bitbake -e | grep BB_HASHCHECK
2) 이 함수는 빠르도록 설계되었으며 아티팩트를 얻을 수 있다고 믿는 작업의 목록을 반환합니다.
3) possibilities를 리턴받는 태스크의 각각은 bitbake가 artifact covers 가능한 태스크의 setscene version을 실행한다.
4) 태스크의 setscene 버은 실행 및 제공한다. 필요한 artifact를/ success or failure를 리턴하는/
5) 이후 모든 setscene tasks는 실행한다. bitbake는 artifacts가 없는 남아있는 태스크를 호출한다.
$ bitbake -c listtasks core-image-minimal
do_build Default task for a recipe - depends on all other normal tasks required to 'build' a recipe
do_checkuri Validates the SRC_URI value
do_clean Removes all output files for a target
do_cleanall Removes all output files, shared state cache, and downloaded source files for a target
do_cleansstate Removes all output files and shared state cache for a target
do_compile Compiles the source in the compilation directory
do_configure Configures the source by enabling and disabling any build-time and configuration options for the software being built
do_deploy_source_date_epoch
do_deploy_source_date_epoch_setscene <---- (setscene version)
do_devpyshell Starts an interactive Python shell for development/debugging
do_devshell Starts a shell with the environment set up for development/debugging
do_fetch Fetches the source code
do_flush_pseudodb
do_image
do_image_complete
do_image_complete_setscene <--- (setscene version)
do_image_ext4
do_image_qa
do_image_qa_setscene <---- (setscene version)
do_image_tar
do_install Copies files from the compilation directory to a holding area
do_listtasks Lists all defined tasks for a target
do_package Analyzes the content of the holding area and splits it into subsets based on available packages and files
do_package_qa_setscene <--- Runs QA checks on packaged files (setscene version)
do_package_setscene <--- Analyzes the content of the holding area and splits it into subsets based on available packages and files (setscene version)
do_package_write_rpm_setscene <--- Creates the actual RPM packages and places them in the Package Feed area (setscene version)
do_packagedata Creates package metadata used by the build system to generate the final packages
do_packagedata_setscene <--- Creates package metadata used by the build system to generate the final packages (setscene version)
do_patch Locates patch files and applies them to the source code
do_populate_lic_deploy
do_populate_lic_setscene <--- Writes license information for the recipe that is collected later when the image is constructed (setscene version)
do_populate_sdk Creates the file and directory structure for an installable SDK
do_populate_sdk_ext
do_populate_sysroot_setscene <--- Copies a subset of files installed by do_install into the sysroot in order to make them available to other recipes (setscene version)
do_prepare_recipe_sysroot
do_rootfs Creates the root filesystem (file and directory structure) for an image
do_rootfs_wicenv
do_sdk_depends
do_unpack Unpacks the source code into a working directory
do_write_qemuboot_conf
bitbake는 checksums(or signature)를 setscene과 함께 태스크 실행이 필요한지 결정하는데 사용한다.
이 signature는 STAMP_DIR
디렉터리에 존재한다.
이 디렉토리는 Bitbake가 track하기 위한 목표를 간주하기용으로 사용하는 정보들을 가지고 있다.
STAMPS_DIR
$ bitbake -e | grep ^STAMPS_DIR=
stamps dir
$ bitbake-dumpsig
체크섬은 bitbake-diffsig 커맨드를 이용해 시험된다.
$ bitbake-dumpsig -t <COMPONENT> <TASK>
$ bitbake-dumpsig -t myhello compile
$ bitbkae-dumpsig -t myhello compile
은 myhello 컴포넌트의 do.compile() 태스크에 대한 자세한 내용 및 signature data를 생성한다.$ bitbake-dumpsig -t core-image-minimal compile
$ bitbake -S none core-image-minimal
의 locked-sigs.inc와 비교해보자.
진짜 정확하네!!?!
poky/build/tmp/stamps/qemux86_64-poky-linux/core-image-minimal/
에서 찍힌 timestamp와 비교
요것도 정확하다!!
-> stamp는 rerun한 태스크 일것임
$ bitbake-diffsigs
Signature data는 $ bitbake -S none <recipename>
에 의해 생성된다.
우리는 ls
on stamps directory로 rerun한 태스크를 알 수 있다.
two set의 sigdata(signature data)를 볼 수 있다.
주어진 태스크의 2개의 버전을 비교해보고 싶을때 bitbake-diffsig
를 사용하여 비교할 수 있다.
bitbake-diffsigs -t core-image-minimal compile
diff 내역
간단한 task는 짧게 diff해시가 나온다.
do_configure
몇 줄 추가되었다고 나온다.
poky/build/sstate-cache
poky/build/conf/local.conf
기본적으로 주석처리되어 있음 (디폴트로 "${TOPDIR}/sstate-cache"를 참조함)
$ bitbake -S none [IMAGE]
: Signatures 생성$ bitbake -S SIGNATURE_HANDLER <IMAGE[ IMAGE2 ...]>
$ bitbake --dump-signatures=SIGNATURE_HANDLER <IMAGE[ IMAGE2 ...]>
SIGNATURE_HANDLER
none 시그니처를 dump함
printdiff 덤프된 시그니처를 캐시된 것과 비교한다.
e.g.
$ bitbake -S none core-image-minimal
$ bitbake -S printdiff core-image-minimal
$ bitbake --dump-signatures=none core-image-minimal
$ bitbake --dump-signatures=printdiff core-image-minimal
$ bitbake -S none core-image-minimal core-image-sato
$ bitbake -S none core-image-minimal
맨 아래 줄인
SIGGEN_LOCKED_SIGS_TYPES_qemux86-64를 보면 이 signature file은 qemux86-64 MACHINE용 임을 알 수 있다.
$ gen-lockedsig-cache
$ bitbake -e | grep "^NATIVELSBSTRING="
NATIVELSBSTRING="universal"
gen-lockedsig-cache
명령$ gen-lockedsig-cache
syntax: gen-lockedsig-cache <locked-sig.inc> <input-cachedir> <output-cachedir> <nativelsbstring> [filterfile]
e.g.
gen-lockedsig-cache ./locked-sigs.inc /current/sstate-cache/ ~/new/sstate-cache universal
NATIVELSBSTRING=universal
이란 것을 보았고, gen-lockedsig-cache
명령 때 사용했다.lsb_release
tool이나 /etc/lsb-release
를 read함으로 써.Ubuntu-12.10
이다. 이 값을 결정 할 수 없다면, "Unknown"을 써라meta/conf/distro/include/yocto-uninative.inc
를 통해 디폴트로 enable"require conf/distro/include/yocto-uninative.inc"
를 통해 사용할 수 있다.uninative-tarball
를 너 스스로 빌드 할 수 있다. 결과 tarball을 Publish(e.g. via HTPP)하고 set UNINATIVE_URL
, UNINATIVE_CHECKSUM
적절히meta/conf/distro/include/yocto-uninative.inc
를 보라SIGGEN_LOCKEDSIGS_TASKSIG_CHECK
변수를 설정해 에러를 무시하기위한 WARN을 셋 할 수 있다. Settings inlcude "error", "warn", SIGGEN_LOCKEDSIGS = "\
gcc-cross:do_populate_sysroot:a8d91b35b98e1494957a2ddaf4598956 \
eglibc:do_populate_sysroot:13e8c68553dc61f9d67564f13b9b2d67 \
eglibc:do_packagedata:bfca0db1782c719d373f8636282596ee \
gcc-cross:do_packagedata:4b601ff4f67601395ee49c46701122f6 \
"
task signature가 어떠한 이유에 의해 바뀌더라도, Bitbake는 우리가 제공한 signature에 맞춘 sstate cache를 사용할 것이다.
이것은 우리의 configuration에서의 변경된 것을 무시하고, 태스크를 강제로 캐시할 수 있다.
locked-sigs.inc
는 core-image-minimal
이미지에 대한 locked-sigs file이다.locked-sigs.inc
는 ${TOPDIR} = ${BUILDDIR}
에 위치한다.$BUILDDIR
에서 local.conf
를 수정한다.poky/${BUILDDIR}/conf/local.conf
${TOPDIR}/sstate-cache
를 삭제한다.core-image-minimal
을 bitbake build해도 100% 해시 complete확인local.conf
의 MACHINE
을 수정해본다. qemux86-64
-> qemuarm
poky/scripts/sstate-diff-machines.sh
$ diff \
sstate-diff/1349348392/fake-cortexa8/list.M \
sstate-diff/1349348392/fake-cortexa9/list.M \
| wc -l
538
$ ls sstate-diff/1349348392/*/armv7a-vfp-neon*/linux-libc-headers/*do_configure*sigdata*
sstate-diff/1349348392/fake-cortexa8/armv7a-vfp-neon-oe-linux-gnueabi/linux-libc-headers/3.4.3-r0.do_configure.sigdata.cb73b3630a7b8191e72fc469c5137025
sstate-diff/1349348392/fake-cortexa9/armv7a-vfp-neon-oe-linux-gnueabi/linux-libc-headers/3.4.3-r0.do_configure.sigdata.f37ada177bf99ce8af85914df22b5a0b
$ bitbake-diffsigs stamps.1349348392/*/armv7a-vfp-neon*/linux-libc-headers/*do_configure*sigdata*
basehash changed from 8d0bd67bb1da6f68717760fc3ef43171 to e869fa61426e88e9c30726ba88a1216a
Variable TUNE_CCARGS value changed from -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a8 to -march=armv7-a -mthumb-interwork -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a9
tmpdir=
machines=
targets=
default_machines="qemuarm qemux86 qemux86-64"
default_target="core-image-base"
analyze="N"
--tmpdir=<tmpdir>
--machines=<machine>
"qemuarm qemux86 qemux86-64"
이다.--targets=<targets>
"core-image-base"
이다.--analyze
MACHINE=qemux86-64
core-image-minimal
빌드MACHINE=qemuarm
core-image-minimal
빌드➜ build git:(dunfell) ✗ ../scripts/sstate-diff-machines.sh --tmpdir=/home/dhyang/poky/build/tmp --machines=qemuarm --targets=core-image-minimal --analyze
--machines
에서 준 아규먼트와는 상관없이, conf/local.conf
의 MACHINE에 영향받음--machines=qemuarm
에 의해 qemuarm의 정보 생성➜ build git:(dunfell) ✗ ../scripts/sstate-diff-machines.sh --tmpdir=/home/dhyang/poky/build/tmp --machines=qemux86-64 --targets=core-image-minimal --analyze
sstate-cache-management.sh
poky/scripts/sstate-cache-management
Options:
-h, --help
Display this help and exit.
--cache-dir=<sstate cache dir>
Specify sstate cache directory, will use the environment
variable SSTATE_CACHE_DIR if it is not specified.
--extra-archs=<arch1>,<arch2>...<archn>
Specify list of architectures which should be tested, this list
will be extended with native arch, allarch and empty arch. The
script won't be trying to generate list of available archs from
AVAILTUNES in tune files.
--extra-layer=<layer1>,<layer2>...<layern>
Specify the layer which will be used for searching the archs,
it will search the meta and meta-* layers in the top dir by
default, and will search meta, meta-*, <layer1>, <layer2>,
...<layern> when specified. Use "," as the separator.
This is useless for --stamps-dir or when --extra-archs is used.
-d, --remove-duplicated
Remove the duplicated sstate cache files of one package, only
the newest one will be kept. The duplicated sstate cache files
of one package must have the same arch, which means sstate cache
files with multiple archs are not considered duplicate.
Conflicts with --stamps-dir.
--stamps-dir=<dir1>,<dir2>...<dirn>
Specify the build directory's stamps directories, the sstate
cache file which IS USED by these build diretories will be KEPT,
other sstate cache files in cache-dir will be removed. Use ","
as the separator. For example:
--stamps-dir=build1/tmp/stamps,build2/tmp/stamps
Conflicts with --remove-duplicated.
-L, --follow-symlink
Remove both the symbol link and the destination file, default: no.
-y, --yes
Automatic yes to prompts; assume "yes" as answer to all prompts
and run non-interactively.
-v, --verbose
Explain what is being done.
-D, --debug
Show debug info, repeat for more debug info.
conf/local.conf
에 가면 SSTATE_MIRRORS로 sstate의 mirror로 사용할 수 있다.SSTATE_MIRRORS = "\
file://.* http://mirrorserver/repo/master/sstate-cache/PATH \n \
file://.* file:///path/repo/master/sstate-cache/PATH \n \
file://.* http://mirrorserver/repo/main/sstate-cache/PATH"