新しいHWを追加した場合など、Driverを自分で作らなければ行けない時があると思う。FPGAだしー。
最初に環境変数を設定する。
source /opt/pkg/petalinux/2020.2/settings.sh
ドライバー単独では追加できないのかも、事前にpetalinuxをビルドしてある環境で実行する。
petalinuxのビルドは、前回のブログを参照する
プロジェクトのディレクトリに移動する。buildとかcomponentsとかのディレクトリがある場所だ。
ドライバーを追加する。testmymymoduleはドライバーの名称だ。適当にドライバー名をつけよう。
petalinux-create -t modules --name testmymymodule --enable
これで、testmymymoduleのテンプレートコードができているみたい。ドライバーのコードを確認してみる。
cd project-spec/meta-user/recipes-modules/testmymymodule/files/
filesの下にあるtestmymymodule.cがドライバーのソースコードになる。
起動時に呼ばれる関数を確認しておく。
static int __init testmymymodule_init(void)
{
printk("<1>Hello module world.\n");
printk("<1>Module parameters were (0x%08x) and \"%s\"\n", myint,
mystr);
return platform_driver_register(&testmymymodule_driver);
}
追加したドライバーを含めて、ビルドする。プロジェクトディレクトリでコマンドを入力する
petalinux-build
BOOT.binを作成する。すでに、BOOT.BINがあるので、–forceをつけた。
petalinux-package --boot --u-boot --format BIN --force
次に、bitファイルを含めた。。。
petalinux-package --prebuilt --fpga ../../project/ultra96_2020/ultra96_2020.runs/impl_1/design_1_wrapper.bit --force
そして、pre-built/linux/images/にできたboot.scr、BOOT.BIN、image.ubをSDカードにコピーして、起動する。
起動後に、実機上で、追加したドライバーをインストールする。
insmod /lib/modules/5.4.0-xilinx-v2020.2/extra/testmymymodule.ko
そうすると、インストールされる。また追加したドライバーのprint文が表示されている。
本当は、Kernelに組み込まれるようにしたかったのですが、できなかっった。。。