Linuxカーネルモジュールのexport_symbolにもかかわらず、「エラー: 'recondeは除外されていません。 -- c フィールド と linux-kernel フィールド と linux-device-driver フィールド と i2c フィールド 関連 問題

How to prevent “error: 'symbol' undeclared here” despite EXPORT_SYMBOL in a Linux kernel module?












6
vote

問題

日本語

このエラーを取得したときに、ドライバーをLinuxカーネルに埋め込みます(私はボードファイルにデバイスを追加して登録しています):

<事前> <コード> error: 'kxtf9_get_slave_descr' undeclared here (not in a function)

ドライバファイルの上の関数を見つけました

<事前> <コード> struct ext_slave_descr *kxtf9_get_slave_descr(void) { return &kxtf9_descr; } EXPORT_SYMBOL(kxtf9_get_slave_descr);

export_symbolで「見える」としてはいけませんか? 上記のコードを含むCファイルにはヘッダーファイルがありません(私はそれを書きません、私はそれを見つけました、私はちょうどそれを見つけましたhttp://nv-tegra.nvidia.com/gitweb/?p=linux-2.6.git ; a = blob; f = drivers / misc / mpu3050 / Accel / kxtf9.c。H = ECF9E7DFD3D7830BB6A5C0B56831D27674CC7AD9; HB = A6B3E15A680BEA1021BCD668DF2805CD652E85B "REL =" NOREFERRER ">こちら、実装しています。ヘッダーが必要ないと仮定しますか?

コードの残りの部分は完全にコンパイルされている(したがって、フォルダ内のコードを見る)、上記のコードを含むファイルもコンパイルされます。

英語

I'm embedding some driver into a Linux kernel when I get this error (I'm adding the device in the board file and registering it):

error: 'kxtf9_get_slave_descr' undeclared here (not in a function) 

I located the function above in a driver file

struct ext_slave_descr *kxtf9_get_slave_descr(void) {     return &kxtf9_descr; } EXPORT_SYMBOL(kxtf9_get_slave_descr); 

Shouldn't it made "visible" by EXPORT_SYMBOL? The C file containing the code above has no header file (I didn't write it, I just found it here and I'm implementing. They say it's tested so I assume an header is not needed?

The rest of the code compiles perfectly (so it "sees" the code in the folder), and the file containing the code above compiles as well!

</div
           
 
 

回答リスト

10
 
vote
vote
ベストアンサー
 

<コード> EXPORT_SYMBOL 動的リンクのシンボルをエクスポートします。あなたが持っているものはリンクエラーではなく、機能宣言が欠けているためコンパイルエラーです。 Cファイルのヘッダーファイルを作成し、そのヘッダーファイルを含めるか、そのヘッダーファイルを含めるか、コンパイルしているCファイルを宣言します。

オプション1:

kxtf9.h:

<事前> <コード> #ifndef KXTF9_H #define KXTF9_H struct ext_slave_descr *kxtf9_get_slave_descr(void); #endif

your_file.c:

<事前> <コード> #include "kxtf9.h" /* your code where you use the function ... */

オプション2:

your_file.c:

<事前> <コード> struct ext_slave_descr *kxtf9_get_slave_descr(void); /* your code where you use the function ... */

ファイルkxtf9.cファイルの EXPORT_SYMBOL には、その周囲の #ifdef __KERNEL__ import を持っているので、ビルド環境(Makefile)を正しく設定する必要があります - そうしない'llリンクエラーを取得します。

 

EXPORT_SYMBOL exports the symbol for dynamic linking. What you have is not a linking error but a compilation error due to a missing function declaration. You have to either write a header file for the C file and include that header file, or you declare the function the C file you're compiling.

Option 1:

kxtf9.h:

#ifndef KXTF9_H #define KXTF9_H  struct ext_slave_descr *kxtf9_get_slave_descr(void);  #endif 

your_file.c:

#include "kxtf9.h" /* your code where you use the function ... */ 

Option 2:

your_file.c:

struct ext_slave_descr *kxtf9_get_slave_descr(void); /* your code where you use the function ... */ 

Also note that the EXPORT_SYMBOL in the file kxtf9.c has #ifdef __KERNEL__ around it, so you have to have set up your build environment (Makefile) correctly - otherwise you'll get a link error.

</div
 
 

関連する質問

1  (ノン脱獄)iPhone emit i2cコマンドを作成することは可能ですか?  ( Is it possible to make a non jailbroken iphone emit i2c commands ) 
LEDの文字列直接私のiPhoneから直接。 LEDコントローラチップトーク i2c シリアルプロトコル 脱獄されていないiPhoneのApple-Support APIでこれを行うことができますか?どのフレームワークが使用する必要がありますか? ...

0  ループwhile whileループまたはatmega 32のステータスコードを確認するときのステートメントを使用するのは何ですか?  ( What is better using while loop or if statement when checking status codes of at ) 
私は、2つのマイクロコントローラの接続を説明するプロジェクトの一部の文書を読み、 TWI(I2C)を使用して、のステータスコードをチェックするためのより良い方法である。作業が終了した後のTWIは、スレーブからマスターへのデータを送信することです.CPUクロック...

3  Dockerコンテナ内のI2C  ( I2c inside a docker container ) 
Dockerコンテナ内のラズベリーPI上のI2Cピンを使用しようとしています。実行を使用してMyモジュールをすべてインストールしますが、CMDを使用してPythonプログラムを実行すると、というエラーが発生します。 <事前> <コード> Trackback ...

0  Windows IOTを使用したRPIとARDUINO UNO間のI2C接続の問題  ( I2c connection issue between rpi and arduino uno using windows iot ) 
最初のスタックオーバーフローの質問SOをうまくいけば、まともなものです。 私はRPIとArduinoボードを使用してセンサーネットワークを作る過程にいます。私はRaspbianを使って過去にこれをしましたが、今はWindows IoTを使用してそれをしなければ...

1  常に出力されるカーネルモジュールのGPIOを強制する  ( Forcing a kernel modules gpios to always be outputs ) 
PCA9570 I2C GPOエキスパンダの運転手を書いています。 (4つの出力ビットがあり、その値はそのI2Cアドレスへの単純な1バイトの書き込みによって設定されます。) 現在GPIOを次のように設定しています。 <事前> <コード> SFMT0 このモ...

0  テグラベースのロボット工場  ( Tegra based robotics platform ) 
私はAndroidを実行しているTegraベースのロボットプラットフォームを開発する可能性を検討しています。これを行うには、シリアル、I2C、およびおそらくPWM通信をプリフォームできるようにする必要があります.TEGRAプラットフォームはこれを許可しています...

3  LinuxでI2Cドライバモジュールを最もよく実装する場合  ( When to best implement a i2c driver module in linux ) 
現在、Linuxを実行している組み込みシステム内でI2Cバスに接続されている2つのデバイスを扱っています。私は最初の機器、カメラの絶好のドライバを使っています。第2の装置の場合、私は第2の装置と通信することができるユーザ空間プログラムを正常に実施した。これまで...

2  i2c readは誤った値を返します  ( I2c read returns incorrect value ) 
あなたがi2cgetとのようなi2cの値で読み込もうとしていますが、その場合の1つで間違った値を返しています。 i2cget -y 0 0x57 0x40 0x57 i2cget -y 0 0x3b 0x09 0x86 99887668...

0  ArduinoワイヤーリクエストFreezes  ( Arduino wire requestfrom freezes ) 
Arduino WireライブラリでMPU6050を制御するクラスをプログラムしようとしていますが、私のArduino Miniでコードを実行すると数秒後に凍結します。 ライブラリのコードとテストスケッチ: <事前> <コード> // Include Wir...

0  Raspberryを使ってI2Cの倍数住所を読み込もうとしています  ( Trying to read multiples address in i2c with raspberry ) 
IMは、TM1650からの情報を読み込もうとしています(7セグメントと3桁の表示を使って作業しています)ラズベリーに。 初めて私はArduinoと協力していましたが、Trementingが多すぎると、Yは同時にそこに異なるアドレス値を読み取ることができないこ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有