2017/1/25

bitbake commands

這篇有列出一些 bitbake 提供的 command:
https://community.nxp.com/docs/DOC-94953
幾個可能會用到的:

列出所有的 recipes:
bitbake-layers show-recipes "*-image-*"
沒給 image name 的化,就會 show 所有的 recipes

列出 所有的 package name
這個好像沒有單一指令,所以要先產生一個中介檔 pn-depends.dot,然後用 command 抽取出package name..br>
bitbake -g "image" && cat pn-depends.dot | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq
意思大概是不含 -native, -image 的 list, 同時刪除 digraph 的 header..

開啟某package 的 dev shell
bitbake "package" -c devshell

列出 package 的所有 task
bitbake "package" -c listtasks

執行某 package 的某 task
bitbake "package" -c "task"
例如:
bitbake u-boot-imx -f -c compile
-f 是 force 的意思。

build image 時,印出所有訊息
bitbake -v "image" 2>&1
其實所有 command 都可以加 -v

2017/1/16

yocto dev manual

http://www.yoctoproject.org/docs/1.6.1/dev-manual/dev-manual.html

1. 說明:

yocto 自己的 東西都放在 source 目錄。
yocto mantain 的 linux kernel 也有獨立目錄。
meta-yocto-kernel-extras 說是一堆bitbake file (*.bbappend) 用來 build local kernel 用。
一般clone 下來修改,指向local 的 kernel.
這個 通常 clone 在 source 目錄下。

bsp -- 名稱就是 meta-<bsp>

2. build image

首先要有 source 目錄,和裡面的東西。
接著用 source 目錄裡的 oe-init-build-env 初始化yocto 自己需要的環境變數。
他會產生 build 目錄,然後去卻認,修改 build 目錄下 local.conf
local.conf 包含幾個重要的環境變數:
MACHINE: processor
DL_DIR: download source code/packages 的目錄

build 命令就是 bitbake

3. Open Source Environment

共同開發,可以利用 share state cache (sstate), 大家用 nfs share 共同的 sstate folder, 來避免重複編譯。

3.4 Yocto Project Term

Append Files (*.bbappend) : 用來 append 在某個 .bb file , 對該bb file 做修正 (overwrite), bbapend 和他要修正的 bb file 的filename 要一樣,只有副檔名不同。而且要在同一目錄。
BitBake : 負責執行task 的工具。
Build Directory : ..
Classes (*.bbclass) : 一些共用的檔案可以被很多人用的,可以被定義為 class,
Configuration File (*.conf) : 該 project, 目錄相關的變數定義
Layer : 一堆 recipes 組成 Layer。
Metadata : Bitbake 吃的檔案,用來決定動作,有: recipes, classes, configuration files
OE-core : 從 openembedded 繼承來的 metadata
Package : BitBake 針對某個recipes build 出來的東西。就是該 recipes 的 package
Recipes : (*.bb) : 告訴bitbake 怎模 build package 的檔案,包含 fetch , dep, config, make.. install
Task : BitBake 動作的單位..do_fetch, do_compile, do_patch ...


Yocto 的使用方式
可以分為五種:
  • System Developement : 就是做 BSP 的人,...還包瓜改kernel
  • User Application Developement : 開發 Ap
  • Temporary Source Code Modification : 有時後會了加速開發過程,值接修改 local 的 source code..
  • Image Development Using Hob : ? 用 Hob 來 build image.-- Hob 是 openembedded 的 toool
  • Using Development Shell : 大概是包含所有環境變數的 shell 吧,..

System Development Workflow - BSP



Modifying Temporary Source Code

就是直接修改在 Build Directory 里的 package source code
然後 recompile 那個 project
測試完成後再用 quilt 或 git 來做出 OOXX

4.3.1 Finding the Temporary Source Code

build recipes的時候解開的 source 會在 Build Directory 中用環境變數 S 定義的 folder 中。
就是在:
S = "${WORKDIR}/${BP}"
其中..
The BP represents the base recipe name, which consists of the name and version:
     BP = "${BPN}-${PV}"
然後 WORKDIR 更複雜:
${TMPDIR}/work/${MULTIMACH_TARGET_SYS}/${PN}/${EXTENDPE}${PV}-${PR}

TMPDIR: The top-level build output directory
MULTIMACH_TARGET_SYS: The target system identifier
PN: The recipe name
EXTENDPE: The epoch - (if PE is not specified, which is usually the case for most recipes, then EXTENDPE is blank)
PV: The recipe version
PR: The recipe revision
舉例來說, MACHINE=qemux86-poky-linux , recipes name 是 foo_1.3.0-rb.bb 的 packages sources 會解開在..
poky/build/tmp/work/qemux86-poky-linux/foo/1.3.0-r0

Workflow

一樣,都是直接修改 source code 後,用
$ bitbake -c compile -f 
build 完,測試完後,開始對 source code 做 patch
建議使用 quilt 或 git
產生完 patch 後,全部放到 packager recipes 的 *.bb 或 *.bbappend 所在目錄,
create 一個 folder files/ 下,
然後修改 *.bb, 把 SRC_URI 加上這些 patch file:
SRC_URI += "file://my_changes.patch"



4.5 Using a Developement Shell

當要 debug 某個 package 的 build 動作時,可以進入這個 shell 模式,
這個 模式會幫你把所有 environment variable 都是依照 package 的 config 設好,source code 解開。
然後開啟 shell prompt 讓你操作所有的 build command (例如自己 patch, 自己 make)

進入的、方法,例如,要對 alsa-lib 做 build debug, 可以用:
$bitbake alsa-lib -c devshell
之後就會進入 alsa-lib 的 working source folder:
~/fsl-release-bsp/build-fb/tmp/work/cortexa9hf-neon-mx6qdl-poky-linux-gnueabi/alsa-lib/1.1.0-r0/alsa-lib-1.1.0$ 
然後你用 echo $PATH 可以看到 cross-tool 位置在裡面,所以可以直接make

2017/1/3

找一下 aosp_arm 的 makefile...

在 build/envsetup.sh 就有 add_lunch_combo aosp_arm-eng
然後.
build/target/product/下,有 aosp_arm.mk
裡面就是call full.mk> 然後把 PRODUCT_NAME 改 aosp_arm

然後 full.mk 包進更多...
  • aosp_base_telephoney.mk
  • board/generic/device.mk
  • emulator.mk