This service is available only in Japanese-language.
NXPのi.MX8m Mini EVKボードで開発準備を進めています。
bitbake core-image-minimal -c populate_sdk
で、アプリケーション用のSDKを作り、"hello world" を コンソール表示する
アプリケーションは作れることを確認しました。
次にカーネルモジュールを作成する環境を作りたいのですが
同様な方法では作成できないのでしょうか?
bitbake meta-toolchain
で、SDKを作り、"hello world"とprintkするkoファイルを作りたかったのですが
linux/init.hが見つからないといわれてしまいました。
SDK先のincludeディレクトリを-Iで指定しても同じ結果でした。
何が間違っているのでしょうか?
(そもそも、開発手法として間違っていて、
カーネルモジュールはレシピを書いて開発するものですか?)
yakuhito
2020/4/21 (火) 14:42
linux/init.h はカーネルのソースツリーに含まれます
レシピを使用したカーネルソースツリー外でカーネルモジュールを作成するレシピは、
sources/poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
に在ります。
こちらを参考にレシピ化を行っても良いのですが、SDKのコンパイラを使用して構築を行う場合は
bitbake -b ../sources/poky/meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb
を実行した際のbuildのログ tmp/work/imx8mqevk-poky-linux/hello-mod/0.1-r0/temp/log.do_compile
の中を確認することで、どのようにモジュールのコンパイルを行っているか解析できると思います。
ysato
2020/4/21 (火) 22:41
カーネルソースツリー外でのカーネルモジュールの作成
ご返信ありがとうございます。
教えていただいた通り、sources/poky/meta-skeleton/をコピーしてカーネルモジュールを作成し
動作確認できました。
これが標準的な開発手法なのであれば、この方法で開発するようにいたします。
ありがとうございました。
-- やったこと --
1) sources/poky/meta-skeletonを、sources/poky/meta-targetboardにコピー。
2) sources/poky/meta-targetboard/conf/layer.confの'skeleton'を'targetboard’に置換
3) recipes-core, recipes-multilib, recipes-skeletonを削除
4) build/conf/bblayers.confの最下行に
BBLAYERS += " ${BSPDIR}/sources/poky/meta-targetboard "を追加
5) bitbake hello-mod
上記で、build/tmp/work/imx8mmevk-poky-linux/hello-mod/0.1-r0/にhello.koが生成されました。
暫定的にターゲットボードにSCPでコピーして正常動作確認できました。