Die leichte Version von udev - Der 1. Versuch

Ich hatte mich über udev aufgeregt und angekündigt, ich wolle einen eigenen Weg gehen. Und das hat nun schon geklappt. MesaLib compiliert und linkt gegen meine Library.

libudev-light

Der Quellcode ist unter git://git.donnerhacke.de/libudev.git abrufbar. Er benötigt den üblichen Rattenschwanz der aktuellen GNU Tool. (automake, autoconf, libtool, ...)

Unter ftp://ftp.iks-jena.de/pub/mitarb/lutz/libudev-light/ finden sich fertige Pakete, die direkt auf dem üblichen Weg (compile, make, make check, make install) eingebunden werden können.

Historie der bisherigen Arbeit:

  • 2014-03-20 FreeBSD, Debian
    • Modified tests to match the different requirements of different systems
  • 2014-03-17 MesaLib 10.0.3
    • MesaLib compiles successfully.
    • Compatibility issues to systems without SYSFS fixed.
    • Version 0.0 completed.
  • 2014-03-12 MesaLib 10.0.3
    • src/gbm/backends/dri/driver_name.c requires:
    • struct udev_device *udev_device_get_parent(struct udev_device *);
    • const char *udev_device_get_property_value(struct udev_device *, const char *);
  • 2014-03-06 MesaLib 10.0.3
    • src/gbm/main/common.c requries:
    • struct udev;
    • struct udev_device;
    • struct udev * udev_new(void);
    • struct udev_device * udev_device_new_from_devnum(struct udev *, char, dev_t);
    • const char * udev_device_get_devnode(struct udev_device *);
    • void udev_device_unref(struct udev *);
    • struct udev * udev_unref(struct udev *);

Interna

Libudev-light setzt auf das Linux spezifische sysfs und falls dieses nicht vorhanden ist oder die betreffenden Angaben nicht enthält auf ein Durchsuchen des/dev Verzeichnisses.

Die Bibliothek beherrscht bereits die Verlagerung der Mountpoints, es gibt aber noch keine configure Optionen dafür.

Die Tests prüfen verschiedenste Aufrufvarianten, versuchen aber auch Fehler zu provozieren. So wird beispielsweise geprüft, ob eine unbeabsichtigte doppelte Ressourcenfreigabe auch erkannt wird.

Naturgemäß sind die Tests alle noch etwas wackelig und bedürfen einer breiten Ausweitung auf interessante Plattformen.

Hier meine aktuelle Testliste:

  • Linux 3.13.6 in einem Eigenbau Userland: Tut.
  • Aktuelles Debian: Tut.
  • FreeBSD 8.3: Tut, kann aber nicht auf sysfs zugreifen.
  • FreeBSD 10.0: Scheitert mit clang am double free Test.
  • Digital UNIX V4.0F: Wenn man manuell die sys/queue.h aus einem BSD hinzugibt, scheitert der Build an der fehlenden snprintf Implementation. Gnulib ist mir dafür aber zu fett.

Wie schaut es bei Euch aus?

Avatar
Lutz Donnerhacke 21/03/2014 3:54 pm
Fixed im GIT. Laut Linux Kerneldoku ist das normal.
Avatar
Lutz Donnerhacke 21/03/2014 1:13 pm
Was für ein interessanter Bugreport. Wenn ein Device mehrere Nodenamen im /dev Baum hat, entdeckt das der Test, weil er nur einen Namen als kanonisch zurück liefert.

Ich hatte erwartet, daß kein Device doppelt angelegt wird, sondern verlinkt. Denn Links ignoriere ich bei der Suche.

Total 2 comments

Post a comment

Related content