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 >> Internet of Things-technologie

De Pin Control Subsystem Beheersen voor Linux Device Drivers

De Pin Control Subsystem Beheersen voor Linux Device Drivers Editor's Note: Embedded Linux wordt de ruggengraat van het Internet of Things, en device drivers zijn de brug tussen applicaties en hardware. In "Linux Device Drivers Development" biedt auteur John Madieu een gedetailleerde, code-rijke gids voor het bouwen van deze drivers.

Dit fragment – Hoofdstuk 14 van het boek – duikt in pin control en GPIOs, een kritiek gebied voor ontwikkelaars die custom hardware met de kernel moeten interfaccen. De eerste installatie introduceert de pin control subsystem.

Aangepast vanuit Linux Device Drivers Development, door John Madieu.


Hoofdstuk 14. Pin Control en GPIO Subsystem
Door John Madieu

In embedded Linux interacteren drivers bijna altijd met GPIOs of configureren pin multiplexing. Een "pin" is de fysieke output-lijn van een component, en veel SoCs hergebruiken dezelfde pin voor verschillende functies. Bijvoorbeeld, de i.MX6QDL pin MX6QDL_PAD_SD3_DAT1 kan dienen als een SD-datalijn, een UART RTS/CTS lijn, een FlexCAN Rx lijn, of een generieke GPIO.

Het proces van het selecteren van een pin-functie heet pin muxing, en de kernel-component die dit orkestreert is de pin controller. In het tweede deel van dit hoofdstuk zullen we de General Purpose Input/Output (GPIO) subsystem verkennen, een veelvoorkomende pin-functie.

In dit hoofdstuk zult u:

  • Door de pin control subsystem lopen en leren hoe pin-control nodes in de Device Tree te declareren.
  • De legacy integer-gebaseerde GPIO API vergelijken met de nieuwere descriptor-gebaseerde interface.
  • GPIOs afhandelen die ook als interrupts gebruikt worden.
  • Sysfs-interfaces verkennen gewijd aan GPIO-beheer.

Pin control subsystem

De pinctrl subsystem beheert pin multiplexing en configuratie. Apparaten die een specifieke pin-rangschikking vereisen, moeten die rangschikking in de Device Tree beschrijven. De pin-controller driver parsed deze beschrijvingen en programmeert de SoC's I/O controller dienovereenkomstig.

De subsystem biedt:

  • Pin multiplexing – hergebruik van een enkele pin voor meerdere rollen (UART TX, GPIO, HSI, etc.) op per-groep of per-pin basis.
  • Pin configuratie – instellen van elektrische eigenschappen zoals pull-up/pull-down, drive strength, debounce, en meer.

Let op dat dit boek zich richt op het gebruik van de pin-controller API; het dekt niet het schrijven van een pin-controller driver zelf.

Pinctrl en de Device Tree

In de Device Tree beschrijft een pin-controller-node alle beschikbare pin-groepen en functies. Elke groep krijgt een integer ID, optioneel vergezeld door een pinctrl-name die menselijk-leesbare namen aan IDs koppelt.

Een device-binding specificeert de pin-staten die het vereist. Twee properties linken een device aan pin-staten:

  • pinctrl-<ID> – een lijst van phandles wijzend naar pin-configuratie-nodes. Meerdere entries laten een device toe door meerdere pin-controllers geconfigureerd te worden of om meerdere nodes voor een enkele controller te combineren.
  • pinctrl-name – een parallelle lijst die namen toewijst aan elke staat-ID. Staat 0 wordt meestal default genoemd en volgt de standaardlijst gedefinieerd in include/linux/pinctrl/pinctrl-state.h.

Hieronder is een typisch Device Tree-fragment dat pin-configuratie voor twee apparaten toont:

De Pin Control Subsystem Beheersen voor Linux Device Drivers

Elke regel volgt het formaat <PIN_FUNCTION> <PIN_SETTING>:

MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09 0x80000000 MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1 

De eerste token (MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09) identificeert de pin-functie; de tweede token (0x80000000) codeert configuratie-bits (pull-up/down, drive strength, etc.). Deze macro's zijn gedefinieerd in architectuur-specifieke header-bestanden zoals arch/arm/boot/dts/imx6q-pinfunc.h.

Om een pin-staat in driver-code te programmeren, volg deze stappen tijdens initialisatie (typisch in probe()):

struct pinctrl *pinctrl; pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) dev_warn(&pdev->dev, "pins are not configured from the driver"); 

De helper pinctrl_get_select_default() haalt automatisch de default staat op en past deze toe. Als een device een init staat biedt, zal de core die staat vóór probe() toepassen en daarna terugkeren naar default tenzij de driver het verandert.

Wanneer klaar, geef de controller vrij met pinctrl_put(pinctrl) of gebruik de resource-managed variant devm_pinctrl_put(pinctrl).

Hier is een concreet voorbeeld uit het am335x-evm.dts bestand:

dcan1: d_can@481d0000 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&d_can1_pins>; };

In de bijpassende driver:

pinctrl = devm_pinctrl_get_select_default(&pdev->dev); if (IS_ERR(pinctrl)) dev_warn(&pdev->dev, "pins are not configured from the driver");

Op het moment dat de driver's probe() draait, is de default pin-configuratie al in plaats.

De volgende installatie zal de GPIO subsystem in detail dekken.

Her gedrukt met toestemming van Packt Publishing. Copyright © 2017 Packt Publishing


John Madieu is een embedded Linux en kernel engineer gebaseerd in Parijs. Hij ontwikkelt drivers en BSPs voor klanten in automatisering, transport, gezondheidszorg, energie en defensie. John werkt bij EXPEMB, een pionier in computer-on-module ontwerp, en is een actieve open-source advocate die gelooft dat kennisdeling innovatie versnelt.


Internet of Things-technologie

  1. Waarom Industriële IoT-Systemen Primaire Doelen Zijn voor Cyberaanvallen – en Hoe Ze Te Beveiligen
  2. Toekomstperspectief: Industrial IoT voortgang voor productie-excellentie
  3. Wie stuurt de connected car? Inzichten vanuit het perspectief van de bestuurder
  4. Zes bewezen stappen om embedded IoT-systemen te beveiligen
  5. SaaS-adoptie stijgt in productontwikkeling: Kernhinder & Kans – Deel 2
  6. SaaS-adoptie bereikt keerpunt in productontwikkeling – Inzichten van PTC
  7. Hoe de ideale IoT-ontwikkelpartner te kiezen: Belangrijkste uitdagingen & oplossingen
  8. Industriële PCs: De hoeksteen van complexe controle in de IIoT-revolutie
  9. Sleutelfactoren voor Succesvolle Enterprise IoT-ontwikkeling: Inzichten van Nokia Experts
  10. Hoe IoT Web App-ontwerp en -ontwikkeling Revolusionert
  11. Van Ivoor tot Bakeliet: De Evolutie van Moderne Kunststoffen Traceren