ドライバーによって行われたいくつかの関数呼び出しの時間を計ろうとしています。だから私は時間do_gettimeofday
を取得するために電話をしstruct timeval
ました。コンパイルされますが、リンカーは次のように文句を言います。
drivers/built-in.o: In function `SPC_TIMING_add':
hid-quirks.c:(.text+0x31354): undefined reference to `__aeabi_i2d'
hid-quirks.c:(.text+0x31384): undefined reference to `__aeabi_i2d'
hid-quirks.c:(.text+0x31398): undefined reference to `__aeabi_dadd'
make: *** [.tmp_vmlinux1] Error 1
の値をxtime
直接読み取ってみたところ、同じ結果になりました。
明らかに、リンクの順序に何らかの間違いがありますが、どこ__aeabi_i2d
から__aeabi_dadd
来たのかわからないため、編集するmakefileがわかりません。
更新:「aeabi」は、ARMアーキテクチャの「組み込みアプリケーションバイナリインターフェイス」(EABI)を意味することがわかりました。命令はdadd
倍精度加算であり、i2d
整数から倍精度への変換です(これによる)。これは、私の問題が単にリンクしているのではなく、コンパイラに正しい命令または代理命令(で行われているように見える)を使用するように説得することを意味していると思いますarch/arm/lib/lib1funcs.S
。
更新:グーグル検索によると、__aeabi_dadd
多くの場合、にエイリアスされ__adddf3
、に__aeabi_i2d
エイリアスされ__floatsidf
ます。
更新:実際のコンパイラの出力を詳しく調べたところ、エラーはとは関係がないことがわかりましたdo_gettimeofday
。呼び出しをコメントアウトしてdo_gettimeofday
、コンパイラのオプティマイザが倍精度浮動小数点演算を実行していた関数への参照を削除できるようにしただけです。その関数が呼び出されなくなると、エラーは表示されません。そしてそれが私がそれが原因であると思った理由do_gettimeofday
です。