前回の記事の内容だと、起動後に、insmodするLoadable Kernel moduleになった。今回は、Kernelに組み込み方法を調べてみた。
https://www.update-gadget.com/blog/2020/12/30/add-driver-on-petalinux/
よくわからなかったが、Kernelに組み込むためには、device-treeに組み込めば、KernelにDriverが組み込まれたKernelを作ることができた。
本記事では、前回作成したDriverをKernelに組み込むための方法を記載する。
petalinuxのsystem-user.dtsiに以下のように追加することで、Kernelに取り込まれる
ファイルは、project-spec/recipes-bsp/device-tree/files/system-user.dtsiにあって、追加するtestmymymodole用のdeviceファイルの記載を追加すればよい。
今回は、ドライバが組み込まれるかどうか確認するだけなので最低限の内容だけ記載している。
アドレスは、0x9000000になっているが、本来はドライバーが使用するベースアドレスを記載するべきだ。また、regで記載しているアドレスとアドレス範囲も今回は適当だ。
/include/ "system-conf.dtsi"
/ {
testmymymodule_instance: testmymymodule@0x90000000 {
compatible = "vendor,testmymymodule";
reg = <0x90000000 0x100>;
};
};
compatibleの記載は、追加するドライバーのstruct of_device_idの内容と合わせておく。
project-spec/recipes-modules/testmmymodule/file/testmymymodule.c
static struct of_device_id testmymymodule_of_match[] = {
{ .compatible = "vendor,testmymymodule", },
{ /* end of list */ },
};
この状態で、petalinux-buildすると、ドライバーが組み込まれた状態のKernelができる。