Help us understand the problem. What is going on with this article?

YoctoでLinuxカーネル触るときのTips

More than 1 year has passed since last update.

ことあるごとに「Yoctoで取ってきたコードで開発しちゃダメ」とはいわれるものの、ビルド環境がある以上はソースを触りたいのが人情。
というわけでYoctoでLinuxカーネル触るときのTipsを記載してみる

以下ターゲットがi.MX6の環境について記載されているので、それ以外のターゲットでは適宜読み替えること。

最重要事項: gitリポジトリは作り直される

基本的にdo_unpackタスクが走ると、gitリポジトリごと一から作り直される。
そのためコード修正してgit commitして一安心、と思っていると泣きを見ることになる。

do_unpackはdo_cleansstateしたりレシピファイルを修正したりすると簡単に走ってしまうため要注意。

カーネルソースはどこにあるか

以下で確認可能

$ bitbake -e linux-imx | grep '^S='
S="/home/user/imx-3.14.52-1.1.0_ga/build/tmp/work/imx6qpsabreauto-poky-linux-gnueabi/linux-imx/3.14.52-r0/git"

おまけ
ソースディレクトリに飛ぶワンライナー

$ cd $(bitbake -e linux-imx | grep '^S=' | sed -e s/^S=//g | xargs echo)

git amでパッチを当てる

gitリポジトリは作り直されてしまうため自前でリモートリポジトリを用意してレシピファイルはそのリポジトリを指すようにしてやるのが良い。

そういった方法が取れない場合はパッチを作成し、do_unpackの後で適用されるようにレシピを書くと良い。
レシピファイル内にSRC_URI += "hoge.patch"のように書いておくとdo_unpackの後で自動的にパッチを当ててくれる。しかし、この方法ではコミットまではしてくれない。コミットまで実行して欲しいときは自前でdo_patchを書く必要がある。

sources/meta-local/recipes-kernel/linux/linux-imx_3.14.52.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"

do_patch() {
        cd ${S}
        git am ${WORKDIR}/*.patch
}

パッチは以下のコマンドで作成する

$ git format-patch -o <yocto dir>/sources/meta-local/recipes-kernel/linux/linux-imx <start rev>..<end rev>

カーネル用bbappendの作り方

上の例で説明もなくmeta-localが出てきたがこれは自前で作ったYoctoレイヤーである。
yocto-layerコマンドで作成できる

$ cd ../sources
$ yocto-layer create local
Please enter the layer priority you'd like to use for the layer: [default: 6]
Would you like to have an example recipe created? (y/n) [default: n]
Would you like to have an example bbappend file created? (y/n) [default: n]

これでmeta-localが作成されるのでbuild/conf/bblayers.confのBBLAYERSに追加すれば認識される

build/conf/bblayers.conf(抜粋)
BBLAYERS += " ${BSPDIR}/sources/meta-local "

meta-local以下にbbappendファイルを作るわけだが、bbファイルとディレクトリ階層を合わせる必要がある。
どういうことかというとbbファイルのパスが以下のようになっているとき

$ bitbake -e linux-imx | grep '^FILE='
FILE="/home/user/imx-3.14.52-1.1.0_ga/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-kernel/linux/linux-imx_3.14.52.bb"

bbappendファイルはmeta-local/recipes-lernel/linux/以下に置く必要がある。
またファイル名はlinux-imx_3.14.52.bbappendもしくはlinux-imx_%.bbappendである必要がある。
(後者はバージョンによらず適用されるbbappendとなる)

カーネルコンフィグを変更する

$ bitbake linux-imx -c menuconfigでカーネルコンフィグを変更できるが、当然do_unpackが走れば初期化されてしまう。
diffconfigというタスクを使えばカーネルコンフィグの変更点をfragment.cfgというファイルに抽出してくれるためこれを利用する。

menuconfig実行後$ bitbake linux-imx -c diffconfigし、fragment.cfgをmeta-local/recipes-lernel/linux/linux-imx以下に格納する。

bbappendにSRC_URI += "fragment.cfg"を書けば自動で反映してくれるというような記述も見かけるが、i.MXの場合はdo_copy_defconfigで.configが上書きされてしまうためbbappendに以下のように記載した。

sources/meta-local/recipes-kernel/linux/linux-imx_3.14.52.bbappend(抜粋)
do_copy_defconfig_append() {
        cat ${WORKDIR}/*.cfg >> ${B}/.config
        cat ${WORKDIR}/*.cfg >> ${B}/../defconfig
}
itage
ITAGEは「IT」のAGENCYになることを夢、目標として進化、変化していきます。「It’s It Agency」
http://www.itage.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした