Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Geïntegreerde Linux-apparaatstuurprogramma's:hun rol begrijpen

Noot van de redactie:Embedded Linux behoort consequent tot de top besturingssystemen die worden gebruikt bij het ontwerpen van embedded systemen. Met de snelle groei van de interesse in het Internet of Things (IoT), zal het vermogen van embedded Linux om meerdere rollen te vervullen van vitaal belang zijn bij het ondersteunen van diverse behoeften die worden aangetroffen in elke laag van de IoT-applicatiehiërarchie. Op zijn beurt zal het vermogen van ingenieurs om embedded Linux-systemen onder de knie te krijgen van cruciaal belang worden voor het bereiken van een snelle, betrouwbare ontwikkeling van meer geavanceerde systemen. In Mastering Embedded Linux Programming – Second Edition neemt auteur Chris Simmonds de lezer mee op een gedetailleerde rondleiding door de breedte en diepte van dit belangrijke besturingssysteem, waarbij hij gedetailleerde voorbeelden gebruikt om elk belangrijk punt te illustreren.

In dit fragment, Hoofdstuk 9, uit het boek, beschrijft de auteur hoe kernel-apparaatstuurprogramma's interageren met systeemhardware en hoe ontwikkelaars apparaatstuurprogramma's kunnen schrijven en deze in hun toepassingen kunnen gebruiken. De volgende afleveringen presenteren dit fragment over Embedded Linux-apparaatstuurprogramma's:

• Hun rol begrijpen

• Driverstatus tijdens runtime lezen

• Apparaatstuurprogramma's in gebruikersruimte

• Een kernelapparaatstuurprogramma schrijven

• De hardwareconfiguratie ontdekken

Aangepast van Mastering Embedded Linux Programming – Tweede editie, door Chris Simmonds.

Hoofdstuk 9. Interface met apparaatstuurprogramma's

Kernel-apparaatstuurprogramma's zijn het mechanisme waarmee de onderliggende hardware wordt blootgesteld aan de rest van het systeem. Als ontwikkelaar van embedded systemen moet u weten hoe deze apparaatstuurprogramma's in de algehele architectuur passen en hoe u ze kunt openen vanuit gebruikersruimteprogramma's. Uw systeem zal waarschijnlijk een aantal nieuwe stukken hardware bevatten en u zult een manier moeten bedenken om er toegang toe te krijgen. In veel gevallen zul je merken dat er apparaatstuurprogramma's voor je zijn, en je kunt alles bereiken wat je wilt zonder enige kernelcode te schrijven. U kunt bijvoorbeeld GPIO-pinnen en LED's manipuleren met behulp van bestanden in sysfs , en er zijn bibliotheken om toegang te krijgen tot seriële bussen, waaronder SPI (Serial Peripheral Interface) en ik 2 C (inter-geïntegreerd circuit).

Er zijn veel plaatsen om uit te vinden hoe u een apparaatstuurprogramma schrijft, maar er zijn er maar weinig die u kunnen vertellen waarom u dat zou willen en welke keuzes u daarbij hebt. Dit is wat ik hier wil behandelen. Onthoud echter dat dit geen boek is dat gewijd is aan het schrijven van stuurprogramma's voor kernelapparaten en dat de informatie die hier wordt gegeven bedoeld is om u te helpen door het gebied te navigeren, maar niet noodzakelijk om u daar thuis te vestigen. Er zijn veel goede boeken en artikelen die u kunnen helpen bij het schrijven van apparaatstuurprogramma's, waarvan sommige aan het einde van dit hoofdstuk worden vermeld.

In dit hoofdstuk behandelen we de volgende onderwerpen:

  • De rol van apparaatstuurprogramma's

  • Tekenapparaten

  • Apparaten blokkeren

  • Netwerkapparaten

  • In runtime meer te weten komen over stuurprogramma's

  • Het juiste apparaatstuurprogramma vinden

  • Apparaatstuurprogramma's in gebruikersruimte

  • Een kernelapparaatstuurprogramma schrijven

  • De hardwareconfiguratie ontdekken

De rol van apparaatstuurprogramma's

Zoals ik in hoofdstuk 4 al zei, De kernel configureren en bouwen , is een van de functies van de kernel om de vele hardware-interfaces van een computersysteem in te kapselen en deze op een consistente manier te presenteren aan gebruikersruimteprogramma's. De kernel heeft frameworks die ontworpen zijn om het schrijven van een device driver gemakkelijk te maken, dit is het stukje code dat bemiddelt tussen de kernel hierboven en de hardware eronder. Een apparaatstuurprogramma kan zijn geschreven om fysieke apparaten te besturen, zoals een UART- of een MMC-controller, of het kan een virtueel apparaat vertegenwoordigen, zoals het null-apparaat ( /dev/null ) of een ramdisk. Eén bestuurder kan meerdere apparaten van hetzelfde type besturen.

De code van het kernelapparaatstuurprogramma werkt op een hoog privilegeniveau, net als de rest van de kernel. Het heeft volledige toegang tot de processoradresruimte en hardwareregisters. Het kan interrupts en DMA-overdrachten aan. Het kan gebruik maken van de geavanceerde kernelinfrastructuur voor synchronisatie en geheugenbeheer. U moet zich er echter van bewust zijn dat dit een keerzijde heeft; als er iets misgaat in een buggy-stuurprogramma, kan het echt misgaan en het systeem platleggen. Daarom is er een principe dat apparaatstuurprogramma's zo eenvoudig mogelijk moeten zijn door alleen informatie te verstrekken aan toepassingen waar de echte beslissingen worden genomen. Je hoort vaak dat dit wordt uitgedrukt als geen beleid in de kernel . Het is de verantwoordelijkheid van de gebruikersruimte om het beleid in te stellen dat het algemene gedrag van het systeem regelt. Het laden van kernelmodules als reactie op externe gebeurtenissen, zoals het aansluiten van een nieuw USB-apparaat, is bijvoorbeeld de verantwoordelijkheid van het gebruikersruimteprogramma, udev , niet de kernel. De kernel levert alleen een manier om een ​​kernelmodule te laden.

In Linux zijn er drie hoofdtypen apparaatstuurprogramma's:

  • Karakter :Dit is voor een ongebufferde I/O met een rijk scala aan functies en een dunne laag tussen de applicatiecode en de driver. Het is de eerste keuze bij het implementeren van aangepaste apparaatstuurprogramma's.

  • Blokkeren :Dit heeft een interface die is afgestemd op blok-I/O van en naar apparaten voor massaopslag. Er is een dikke bufferlaag ontworpen om het lezen en schrijven van de schijf zo snel mogelijk te laten verlopen, waardoor het ongeschikt is voor iets anders.

  • Netwerk :Dit is vergelijkbaar met een blokapparaat, maar wordt gebruikt voor het verzenden en ontvangen van netwerkpakketten in plaats van schijfblokken.

Er is ook een vierde type dat zich presenteert als een groep bestanden in een van de pseudo-bestandssystemen. U kunt bijvoorbeeld toegang krijgen tot het GPIO-stuurprogramma via een groep bestanden in /sys/class/gpio , zoals ik later in dit hoofdstuk zal beschrijven. Laten we beginnen met meer in detail te kijken naar de drie basistypes van apparaten.

Karakterapparaten

Character devices worden in de gebruikersruimte geïdentificeerd door een speciaal bestand genaamd een device node . Deze bestandsnaam wordt toegewezen aan een apparaatstuurprogramma met behulp van de bijbehorende hoofd- en secundaire nummers. In grote lijnen is het grote getal wijst het apparaatknooppunt toe aan een bepaald apparaatstuurprogramma en het kleine nummer vertelt de bestuurder welke interface wordt gebruikt. Het apparaatknooppunt van de eerste seriële poort op de ARM Versatile PB heet bijvoorbeeld /dev/ttyAMA0 en heeft hoofdnummer 204 en secundaire nummer 64. Het apparaatknooppunt voor de tweede seriële poort heeft hetzelfde hoofdnummer, omdat het wordt afgehandeld door hetzelfde apparaatstuurprogramma, maar het secundaire nummer is 65. We kunnen de nummers voor alle vier de seriële poorten uit de directorylijst hier zien:

# ls -l /dev/ttyAMA*crw-rw---- 1 wortel 204, 64 jan 1 1970 /dev/ttyAMA0crw-rw---- 1 wortel 204, 65 1 jan 1970 /dev/ ttyAMA1crw-rw---- 1 wortel wortel 204, 66 1 jan 1970 /dev/ttyAMA2crw-rw---- 1 wortel wortel 204, 67 1 jan 1970 /dev/ttyAMA3

De lijst met standaard hoofd- en nevennummers is te vinden in de kerneldocumentatie in Documentation/devices.txt . De lijst wordt niet vaak bijgewerkt en bevat niet het ttyAMA-apparaat dat in de vorige paragraaf is beschreven. Desalniettemin, als je naar de broncode van de kernel kijkt in drivers/tty/serial/amba-pl011.c , zul je zien waar de grote en kleine getallen worden gedeclareerd:

 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64

Als er meer dan één instantie van een apparaat is, zoals bij het ttyAMA-stuurprogramma, is de conventie voor het vormen van de naam van het apparaatknooppunt om een ​​basisnaam, ttyAMA, te nemen en in dit voorbeeld het instantienummer van 0 tot 3 toe te voegen.

Zoals ik in hoofdstuk 5 al zei, Een rootbestandssysteem bouwen , kunnen de apparaatknooppunten op verschillende manieren worden gemaakt:

  • devtmpfs :Het apparaatknooppunt wordt gemaakt wanneer het apparaatstuurprogramma een nieuwe apparaatinterface registreert met behulp van een basisnaam die door het stuurprogramma is opgegeven (ttyAMA) en een instantienummer.

  • udev  of mdev (zonder devtmpfs ):In wezen hetzelfde als bij devtmpfs , behalve dat een daemon-programma voor gebruikersruimte de apparaatnaam moet extraheren van sysfs en maak het knooppunt. Ik zal het hebben over sysfs

  • mknod :als u statische apparaatknooppunten gebruikt, worden deze handmatig gemaakt met mknod .

Je hebt misschien de indruk van de getallen die ik hierboven heb gebruikt dat zowel grote als kleine getallen 8-bits getallen zijn in het bereik van 0 tot 255. In feite is vanaf Linux 2.6 het hoofdnummer 12 bits lang, wat geldige getallen geeft van 1 tot 4.095, en het secundaire getal is 20 bits, van 0 tot 1.048.575.


Ingebed

  1. Rol van geïntegreerde systemen in auto's
  2. De diverse rol van epoxy bij de fabricage van PCB's voor IoT-apparaten
  3. Belangrijke technologieën versterken de groeiende rol voor embedded vision
  4. OTA-updates voor Embedded Linux, deel 2 – Een vergelijking van kant-en-klare updatesystemen
  5. OTA-updates voor Embedded Linux, deel 1 – Grondbeginselen en implementatie
  6. Geïntegreerde Linux-apparaatstuurprogramma's:de hardwareconfiguratie ontdekken
  7. Open-source platform richt zich op IoT met embedded Linux
  8. Blog:inzicht in de rol van PDMS in de wereld van microfluïdica
  9. Van IoT tot cryptojacking:inzicht in nieuwe bedreigingen voor mobiele apparaten
  10. Een inleiding tot het hacken van embedded hardware op IoT-apparaten
  11. Onderdelen van CAM en hun rol bij CNC-bewerkingen