1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- =========================
- Using GPIO Lines in Linux
- =========================
- The Linux kernel exists to abstract and present hardware to users. GPIO lines
- as such are normally not user facing abstractions. The most obvious, natural
- and preferred way to use GPIO lines is to let kernel hardware drivers deal
- with them.
- For examples of already existing generic drivers that will also be good
- examples for any other kernel drivers you want to author, refer to
- Documentation/driver-api/gpio/drivers-on-gpio.rst
- For any kind of mass produced system you want to support, such as servers,
- laptops, phones, tablets, routers, and any consumer or office or business goods
- using appropriate kernel drivers is paramount. Submit your code for inclusion
- in the upstream Linux kernel when you feel it is mature enough and you will get
- help to refine it, see Documentation/process/submitting-patches.rst.
- In Linux GPIO lines also have a userspace ABI.
- The userspace ABI is intended for one-off deployments. Examples are prototypes,
- factory lines, maker community projects, workshop specimen, production tools,
- industrial automation, PLC-type use cases, door controllers, in short a piece
- of specialized equipment that is not produced by the numbers, requiring
- operators to have a deep knowledge of the equipment and knows about the
- software-hardware interface to be set up. They should not have a natural fit
- to any existing kernel subsystem and not be a good fit for an operating system,
- because of not being reusable or abstract enough, or involving a lot of non
- computer hardware related policy.
- Applications that have a good reason to use the industrial I/O (IIO) subsystem
- from userspace will likely be a good fit for using GPIO lines from userspace as
- well.
- Do not under any circumstances abuse the GPIO userspace ABI to cut corners in
- any product development projects. If you use it for prototyping, then do not
- productify the prototype: rewrite it using proper kernel drivers. Do not under
- any circumstances deploy any uniform products using GPIO from userspace.
- The userspace ABI is a character device for each GPIO hardware unit (GPIO chip).
- These devices will appear on the system as ``/dev/gpiochip0`` thru
- ``/dev/gpiochipN``. Examples of how to directly use the userspace ABI can be
- found in the kernel tree ``tools/gpio`` subdirectory.
- For structured and managed applications, we recommend that you make use of the
- libgpiod_ library. This provides helper abstractions, command line utilities
- and arbitration for multiple simultaneous consumers on the same GPIO chip.
- .. _libgpiod: https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/
|