This service is available only in Japanese-language.
Yoctoのデバイスドライバ勉強で、I2Cのカーネルモジュールを書いています。
(初心者の為、認識に間違い等御座いましたらご指摘頂ければと思います。)
環境は下記で構築しています。
ホストマシン:Ubuntu18.04.4 LTS
ボード :i.MX 6Quad SABRE
Yocto :Warrior
モジュール内でdoubleやfloatを使用してコンパイルすると、次の警告が表示されます。
> WARNING: "__aeabi_f2d" [/home/xxxxx/yocto/Kerne_driver/bme280_driver/bme280_driver.ko] undefined!
> WARNING: "__aeabi_fdiv" [/home/xxxxx/yocto/Kerne_driver/bme280_driver/bme280_driver.ko] undefined!
> WARNING: "__aeabi_i2f" [/home/xxxxx/yocto/Kerne_driver/bme280_driver/bme280_driver.ko] undefined!
上記のワーニングが出ていても、.ko自体は生成されるので、
評価ボード上で実行してみると次のエラーが発生しロードできません。
root@imx6qsabresd:/# insmod bme280_driver.ko i2c_channel=3 sampling_time=1
bme280_driver: Unknown symbol __aeabi_i2f (err -2)
bme280_driver: Unknown symbol __aeabi_fdiv (err -2)
bme280_driver: Unknown symbol __aeabi_f2d (err -2)
ToolChainは「bitbake imx-image-multimedia –c populate_sdk」で作成したものを使用しています。
(ボード上で実行しているイメージもbitbake imx-image-multimediaで作成したものをddして使用してます)
モジュール内でdoubleやfloatを使用しなければワーニングも起きなく、ボードでモジュールを実行できました。
浮動小数点が関係していて、-mfloat-abi = hard を soft か softfpに変える必要があることまではわかりました。
試しに、environment-setup-cortexa9hf-neon-poky-linux-gnueabiファイルの内容にある-mfloat-abiをhardからsoftfpに書き換えsourceして、
echo $CC で-mfloat-abi=softfpになっていることを確認しmakeしているのですが。
コンパイル時上記同様のワーニングが発生します。
-mfloat-abi=softfpの変更方法が悪いのか、
makeファイルの書き方が悪いのか、
モジュールのソースを書く際に特殊な記載方法が必要なのか、
原因がわからず困っております。
i.mx6のカーネルドライバで浮動小数点を使用する方法について、
何か情報を頂けると幸いです。
長文で申し訳ありません、宜しくお願い致します。
yakuhito
2020/9/7 (月) 09:59
YoctoProjectから提供されるサンプルを参照すると参考になるかと
meta-skeleton/recipes-kernel/hello-mod/hello-mod_0.1.bb では、
inherit module
というクラスが呼び出されており、
その中では
unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
が行われています。
通常のアプリケーション構築向けのオプションが使われていないか、ご確認ください。