ユーザ用ツール

サイト用ツール


kitsuneko-edit-kernel-config

ここん・きつねこにおける kernel の config 編集方法

ここでは、defconfig からの差分で kernel の config を生成する方法について記述している

  • Q: なぜフルの config をリポジトリに入れるのではなく、defconfig からの差分を取るのか?
    • A: 差分で取っていたほうが、将来のバージョンアップ時にわかりやすく、変更が把握・追従しやすいためである。
  • 一応Yoctoはレイヤごとにkernelのconfigを分けることができるなど、より細かな組み方ができるのだが、以下の手順はあくまでここん流のやり方なので、参考程度に。
  • 以下の例のうち、 tmp-glibc/work/… と記載しているディレクトリは、ビルド環境やパラメータによって大きく異なるので、適時読み替える必要がある

編集する部分

meta-coconport/coconx64/recipes-kernel/linux/ 内、例えばファイル構造はこんな感じ

$ ls -R
.:
files  linux-longterm_%.bbappend

./files:
coconx64

./files/coconx64:
coconx64-standard.scc  coconx64.cfg

この例では coconx64.cfg が、今回の説明で作る差分 kernel config である。

linux-longterm_%.bbappend の以下の行の値に、Linux kernelであらかじめ入っている、各プラットフォームごとに定められた defconfig をあらかじめ入れておくようにする。

KBUILD_DEFCONFIG_coconx64 = "x86_64_defconfig"

1からターゲットを起こす場合の準備

新規にターゲットのkernelを起こすときは、最初は coconx64.cfg は空ファイルでよい。 ここでは上記ツリーの recipe をすでに作ってあると仮定して、最初の時点でのオリジナル .config を以下の通り生成しておく。

  • bitbake の準備をしたあと、以下のように .config を生成する
$ source ./opencocon-init-build-env
$ bitbake linux-longterm -c kernel_configme -f
  • オリジナルの .config ができるので。これを一旦buildディレクトリの外にコピーしておく。
$ cp tmp/work-glibc/coconx64-poky-linux/linux-longterm/5.10.36-r0/linux-coconx64-standard-build/.config config-5.10.orig

他から移植したり、kernel のバージョンを上げるときの準備

あるいは、前バージョンや他ディストリからconfigを持ってくる場合は、下記をまず実行しておきたい。

  • まずは defconfig 状態にするため、coconx64-standard.scc ファイル内の kconf からはじまる行をすべてコメントアウト(行頭に # でよい)する
  • 次に bitbake の準備をしたあと、以下のように .config を生成する
$ source ./opencocon-init-build-env
$ bitbake linux-longterm -c clean
$ bitbake linux-longterm -c kernel_configme -f
  • オリジナルの .config ができるので。これを一旦buildディレクトリの外にコピーしておく。
$ cp tmp/work-glibc/coconx64-poky-linux/linux-longterm/5.10.36-r0/linux-coconx64-standard-build/.config config-5.10.orig
  • 次に、coconx64-standard.scc において、前のバージョンの差分config、または defconfig の記述のある kconf 行を有効化(アンコメント)し、以下のコマンドで再度 .config を生成する
$ bitbake linux-longterm -c clean
$ bitbake linux-longterm -c kernel_configme -f
  • ここまでの差分を取る。 ここでできた差分 config ファイルが編集のたたき台となる。なお、コメントを削りたくないときは、最後2つのsedコマンドを適時編集する。
$ diff -Nurp config-5.10.orig tmp-glibc/work/coconx64-poky-linux/linux-longterm/5.10.36-r0/linux-coconx64-standard-build/.config | sed -n "s/^\+//p" | sed "1d" | grep "CONFIG" > config-5.10-diff
  • あとはリポジトリに反映する
$  cp config-5.10-diff ../meta-coconport/coconx64/recipes-kernel/linux/files/coconx64/coconx64.cfg

kernel の config チューニングをするとき

下記の手順の代わりに、coconx64.cfg を直接編集して書き加えてもよいとは思うが、整合性をあわせるため、できるだけ menuconfig か oldconfig を通しておいたほうがよいように思う。

  • 前述の準備ができたら、menuconfigを動かして、チューニングを行う。
$ bitbake linux-longterm -c clean
$ bitbake linux-longterm -c kernel_configme -f
$ bitbake linux-longterm -c menuconfig

編集がおわったら、普通に保存・終了してよい。 なお byobu が半分に割れてしまったときは、 Ctrl-a z で全画面になる。

  • オリジナルの .config と、今回 menuconfig で編集した内容の差分を取る
$ diff -Nurp config-5.10.orig tmp/work-glibc/coconx64-poky-linux/linux-longterm/5.10.36-r0/linux-coconx64-standard-build/.config | sed -n "s/^\+//p" | sed "1d" | grep "CONFIG" > config-5.10-diff2
  • 変更をリポジトリに反映する
$  cp config-5.10-diff2 ../meta-coconport/coconx64/recipes-kernel/linux/files/coconx64/coconx64.cfg
  • あとはkernelをビルドしてテストする。
$ bitbake linux-longterm -c clean
$ bitbake linux-longterm
kitsuneko-edit-kernel-config.txt · 最終更新: 2022/02/28 21:56 by shimada