Was ist der Unterschied zwischen register_chrdev_region und alloc_chrdev_region reservieren Gerät zahlen?
Ich will wissen, den Unterschied zwischen diesen beiden Funktionen:
int register_chrdev_region(dev_t first, unsigned int count, char *name);
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);
InformationsquelleAutor user1287763 | 2012-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen hier für details auf diese beiden Funktionen.
Registrierung ist nur dann wirklich nützlich, wenn Sie im Voraus wissen, welche major-Nummer, die Sie wollen, um mit zu beginnen. Mit der Registrierung erhalten Sie sagen das kernel-Gerät zahlen, was Sie wollen (die start-major/minor-Nummer und Anzahl) und entweder es gibt Sie oder nicht (je nach Verfügbarkeit).
Verrechnung, die Sie dem kernel sagen, wie viele Geräte zahlen, die Sie benötigen (der erste minor-Nummer und Anzahl) und es findet ein Start-major-Nummer für Sie, wenn eine verfügbar ist, natürlich.
Teilweise zu vermeiden, in Konflikt mit anderen Gerätetreibern, hielt es für besser, die Zuweisung der Funktion, die dynamisch reservieren Sie die Geräte-Nummern für Sie.
Aus dem link oben gegeben:
Gibt es ein ähnliches, aber technisch nicht zu duplizieren, Frage hier.
InformationsquelleAutor paxdiablo
Als pro die LDD3-Dokument,
Beim einrichten eines character device ist, um eine oder mehrere Gerät zahlen, mit zu arbeiten. Die notwendige Funktion für diese Aufgabe ist,
int register_chrdev_region(dev_t first, unsigned int count, char *name);
(oder)
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor,
unsigned int count, char *name);
Beachten Sie, dass, register_chrdev_region funktioniert gut, wenn Sie im Voraus wissen genau, welches Gerät zahlen, die Sie wollen. Oft werden Sie jedoch nicht wissen, welche major-Nummern Ihr Gerät benutzen wird; es ist eine ständige Anstrengung in die Entwicklung des Linux-Kernels Gemeinschaft zu bewegen, um die Verwendung von dynamicly zugewiesenen Gerät zahlen. Der kernel wird gerne weisen Sie eine größere Anzahl für Sie on-the-fly, aber Sie muss einen Antrag, diese Zuweisung durch die Verwendung eines alloc_chrdev_region. Im Grunde ist es eine dynamische Zuweisung von Major-Nummer.
So, neue Treiber, wir empfehlen dringend, dass Sie verwenden Sie die dynamische Zuordnung, um Ihre wichtigen Geräte-Nummer, eher als die Wahl einer Anzahl zufällig von denen, die sind momentan frei. In anderen Worten, Ihre Fahrer müssen fast sicher mit alloc_chrdev_region eher als register_chrdev_region.
InformationsquelleAutor nullbyte91