Ondervindt U Problemen Bij Het Maken Van Apparaatknooppunten Met De Linux-kernel?

In deze handleiding zal ik enkele van de plausibele oorzaken beschrijven die ertoe kunnen leiden dat de Linux-kernel een mobiele telefoonknooppunt maakt, en vervolgens mogelijke oplossingen voorstellen die u kunt gebruiken om het probleem op te lossen.

  #include #include #include  / 1 . register_chrdev, * /#include unregister_chrdev #include  / 5 . seq_read, seq_lseek, single_release * /#define NAAM "lkmc_character_device_create"grootste statische int = -1;statisch raamwerk cdev mycdev;statische structuurklasse (ruimte) maclass = NULL;static int show (struct seq_file - m, void * v)    seq_printf (m, "abcd");    Retourneert 0;static int open public (struct inode * inode, struct apply * bestand)    verstrek single_open (file, show, const NULL);statisch organiseren file_operations fops =    .llseek = seq_lseek,   .aan de hand = open,    .professional = CE_MODULE,    .kijk eens naar Seq_read, impliceert .release = single_release,;Statische drukreiniging (int device_created)    terwijl je denkt (device_created)        device_destroy (mijn klas, hoofdvak);        cdev_del (& mycdev);        als (mijn klas)        class_destroy (maclass);    in het geval (Majeur! betekent -1)        unregister_chrdev_region (hoofd, 1);statische int myinit (leeg)    int device_created is 0;    / * Personen voor elke procedure / apparaten * /    in case (alloc_chrdev_region (& major, 0, 1, NAME "_proc") <0)        overgangsfout;    per * ls / sys voor elke klasse * /    wanneer ((mijnklasse komt overeen met class_create (THIS_MODULE, NAME "_sys")) == NULL)        ga direct naar fout;    / 2 . merk vii / dev / 7 . /    getoond (device_create (myclass, NULL, major, NULL, NAME "_dev") == NULL)        overgangsfout;    device_created = 1;    cdev_init (& mycdev, & fops);    als het blijkt (cdev_add (& mycdev, major, 1) == -1)        overgangsfout;    Retourneert 0;Fout:    Wissen (apparaat_gemaakt);    geld uitgeven aan -1;statische lege myexit (void)    Schoon (1);module_init (moninit)module_exit (meinxit)MODULE_LICENSE ("GPL"); 

per dev / zero is een enorm bijzonder voorbeeld van een "speciaal bestand", waarbij een bepaald "apparaatknooppunt" wordt gebruikt. Meestal worden deze typen gemaakt tijdens het distribueren, maar u kunt ze indien nodig zeker zelf samenstellen.

  nummer ls -l / dev - nulcrw-rw-rw-1 Root-sleutel 1, 5 nov 09:34 / dev / zero 

De letter "c" in de vroege stadia geeft aan dat dit een gunstig "verfapparaat" is; een ander type is in feite "block device" ( ls worden afgedrukt van in plaats van "b"). Bijvoorbeeld, de meeste hard-harde harde toegangen zijn meestal blokapparaten, in tegenstelling tot opeenvolgende dingen zoals stick-drives of misschien klinkt je uitnodiging om apparaten te tekenen.

"1, deel 5" kan het belangrijkste "primaire apparaatnummer" zijn en met betrekking tot "secundair apparaatnummer".

Met deze feiten en strategieën kunnen de meesten van jullie een bepaald mknod commando gebruiken als iemand je eigen bekwame node wil maken:

  # mknod foobar d 1 5 

Dit heeft de neiging om een ​​nieuw bestand met de naam foobar te maken in de gehele huidige directory, die hetzelfde doet als / dev / zero . (Je kunt natuurlijk andere autorisaties instellen als je wilt.) Dit "bestand" bevat in werkelijkheid drie van de hierboven genoemde - apparaatvorm, hoofdnummer, kleine grote verscheidenheid. U kunt nu mark vii gebruiken om deze deals voor andere apparaten te zoeken, en ook om ze te genereren. Als je onwel wordt, gebruik dan gewoon rm als je regelmatig de apparaatknooppunten wilt verwijderen die de meeste mensen zojuist hebben gemaakt.

linux kernel setup device node

In wezen vertelt de hoofdscore de Linux-kernel met welk fietserapparaat moet worden gecommuniceerd, terwijl een soort klein getal het individuele apparaat gewoonlijk vertelt over welk apparaat je presenteert. (Je hebt bijvoorbeeld waarschijnlijk een SATA-controller, maar misschien heb je een groot aantal complexe schijven aangesloten.)

Als je er zeker van wilt zijn dat je hebt bewezen nieuwe apparaten uit te vinden die over het algemeen iets nieuws kunnen zijn ... nou, dan wil je misschien de Linux-kernelbron en je eigen maandelijkse kernel opnieuw opbouwen. Dus laten we geen grappen maken met elkaar! :-)Maar je kunt alle berichtbestanden kopiëren van het apparaat en ook door degene die je toen waarschijnlijk hebt ontvangen te kopiëren. Een natuurlijk systeem vergelijkbaar met udev ziet in principe alleen automatisch mknod / rm voor apparaatgebeurtenissen en telefoonnummers. Er is niets magischer dan specifiek.

  • Linux beschouwt directory a real als een belangrijke bestandsvorm. (U hoeft uw Windows meestal niet rechtstreeks in een directory te houden, maar als het publiek dacht dat u dat wel zou kunnen, zou u ervoor kiezen het een normaal bandbreedtebestand te zijn in een speciaal formaat dat deze speciale kernel deelt waar alle persoonlijke bestanden zich bevinden. Die directory. )

  • linux-kernel probeert apparaatknooppunt te maken

    De symlink biedt u aan om een ​​speciaal bestand te worden. (Maar onze is geen echte link.) Je kunt symbolische links maken met het belangrijkste -s ln commando. (Zie de volledige exacte man-pagina.)

  • Er is een extra kenmerk genaamd "Named pipe" en / misschien ook "FIFO" (first in, in the begin out) - first out. Je kunt het goed maken met mkfifo . FIFO is een magisch bestand dat kan worden geopend door de twee programma's tegelijkertijd te openen - eenmaal lezen, eenmaal schrijven. Wat zeker belangrijk is als het gaat Het zal hard werken, een gewone komfluit is eigenlijk voldoende. Maar u kunt elke benadering afzonderlijk uitvoeren ...

Inhoud die niet anders "speciaal" wordt genoemd, is een "normaal bestand". Dit wordt altijd wel eens genoemd in het Unix-bewijs. Dit is wat het betekent; het juiste bestand dat eigenlijk niet dit apparaatknooppunt, een bijbehorende symbolische associatie of iets anders is. Het verplaatsen van een afbeelding zonder prachtige eigenschappen is prima.

Linux Kernel Create Device Node
Jadro Linux Tworzy Wezel Urzadzenia
Linux Kernel Gerateknoten Erstellen
Yadro Linux Sozdat Uzel Ustrojstva
Kernel Do Linux Criar No Do Dispositivo
리눅스 커널 디바이스 노드 생성
Kernel Linux Crea Nodo Dispositivo
Linux Karna Skapa Enhetsnod
Noyau Linux Creer Un Nœud De Peripherique
Kernel De Linux Crear Nodo De Dispositivo