Warum sind i2c_smbus Funktion nicht verfügbar? (I2C – Embedded Linux)

Gibt es viele Verweise auf die Verwendung i2c_smbus_ Funktionen bei der Entwicklung von embedded-Linux-software für die Kommunikation auf dem I2C-bus. Wenn i2c_smbus Funktionen wie i2c_smbus_read_word_data verwiesen wird im software-Projekt für ARM8-Prozessor-Fehler wie "i2c_smbus_read_word_data' wurde nicht deklariert, in diesem Umfang erzeugt beim kompilieren.

Untersuchung der folgenden header-Dateien anzugeben, die Abwesenheit der meisten i2c_smbus definition einer Funktion.

  • /usr/arm-linux-gnueabi/include/linux/i2c.h
  • /usr/arm-linux-gnueabi/include/linux/i2c-dev.h

Sich auch in folgenden Verweis i2c.h - Datei hat alle i2c_smbus definiert.

Wie kann dieses problem gelöst werden?

Referenzen

  1. Über die I2C-Schnittstelle aus dem userspace unter Linux
  2. Die I2C-Kommunikation von Linux-Userspace – Teil II
  3. I2C-dev interface
  • Die Schnellste google jemals zeigt, dass Sie benötigen, um include <linux/i2c-smbus.h>.
  • Ich sehe nicht ein i2c-smbus.h enthalten, in einen der oben genannten arm-linux-gnueabi-Pfade.
  • Die Datei wurde Hinzugefügt, um den kernel im Jahr 2010 als include/linux/i2c-smbus.h aber nachdem es in den kernel-Quellen nicht notwendigerweise, dass es in Ihrem userspace-include-Verzeichnisse auf einem bestimmten system Für die Referenz -, fern-commit ist hier git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/...
  • Aber ich sehe nicht, Funktionen wie i2c_smbus_read_byte_data definiert i2c-smbus.h. Aber sehen diese Funktionen definiert i2c.h pro anfügen-link. cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/.... Ich Frage mich, wie das aktualisieren der Bibliothek Dateien /usr/arm-linux-gnueabi/include/linux/i2c.h enthalten i2c_smbus Funktionen. Ich bin nicht sicher, wenn es möglich ist. Ich habe eine Frage auf ask.ubuntu-c, wenn ein Prozess zum aktualisieren der arm-linux-gnueabi-Bibliotheken. askubuntu.com/questions/507628/...
  • Sie implementieren die Treiber in den user-space oder im kernel-space?
  • Userspace.
  • Meistens sind die I2C-Funktionen von user-space gesteuert werden und der Zugriff über ioctl(), read() und write(). Ich empfehle, dass Sie gehen durch die Linux-Dokumentation selbst, wie Sie den Zugriff auf die i2c-Geräte aus dem userspace : lxr.free-electrons.com/source/Documentation/i2c/dev-interface
  • Ich verwendet read() und write() auf, um das Programm zu arbeiten. Ich habe veröffentlicht die base-code bei github.com/mahengunawardena/BeagleboneBlack_I2C_ADXL345. Können Sie bitte zeigen Sie mir zu verstehen, wie zu verwenden i2c_smbus_read_word_data. Sieht aus wie der smbus Bibliothek ist weit mehr fähig. Ich möchte wissen, wie man smbus Bibliothek installiert. Bin ich richtig, anzunehmen, dass smbus verwendet wird, der im kernel-space.
  • Ja, diese Funktionen sind in der Regel für kernel-space. Aber, die gleiche Umsetzung wurde durchgeführt auf den user-space als auch. Beachten Sie die syntax der user-space - i2c_smbus_*() Funktionen, Sie akzeptieren ein 'file descriptor' als erstes argument, im Gegensatz zu den kernel-space-Funktionen annehmen, die i2c_client als argument. Zum Beispiel i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)(kernel-space), i2c_smbus_read_byte_data(int file, __u8 command)(user-space).
  • Sie können machen verwenden der Funktionen, die durch die Installation i2c_tools und libi2c-dev Pakete.
  • danke. Ich installieren libi2c-dev und sehen, ob Sie Zugriff auf den smbus-Funktionen. Ich habe bereits die i2c-tools installiert.

Schreibe einen Kommentar