在Linux中使用GPIO线
Linux内核的存在是为了将硬件抽象化并呈现给用户。GPIO线通常不是面向用户的抽象。使用GPIO线的最明显、自然和首选方式是让内核硬件驱动程序处理它们。
对于任何您想要编写的其他内核驱动程序的示例,可以参考已经存在的通用驱动程序,这些驱动程序也将是很好的示例,参见使用GPIO的子系统驱动程序。
对于任何您想要支持的大规模生产系统,例如服务器、笔记本电脑、手机、平板电脑、路由器以及任何使用适当内核驱动程序的消费品、办公用品或商业产品都是至关重要的。当您觉得代码足够成熟时,可以将其提交给上游Linux内核以获取帮助进行改进,参见提交补丁:将您的代码纳入内核的基本指南。
在Linux中,GPIO线还具有用户空间ABI。
用户空间ABI适用于一次性部署。例如原型、工厂生产线、创客社区项目、车间样本、生产工具、工业自动化、PLC类型用例、门控制器,简而言之,一种需要操作员对设备有深入了解并了解软件硬件接口设置的专用设备。它们不应该自然适用于任何现有的内核子系统,也不适合操作系统,因为它们不够可重用或抽象,或涉及大量与计算机硬件无关的策略。
有充分理由从用户空间使用工业I/O(IIO)子系统的应用程序很可能也适合从用户空间使用GPIO线。
绝对不要滥用GPIO用户空间ABI来在任何产品开发项目中采取捷径。如果您用于原型设计,那么不要将原型产品化:请使用适当的内核驱动程序进行重写。绝对不要在任何情况下使用GPIO从用户空间部署任何统一产品。
用户空间ABI是每个GPIO硬件单元(GPIO芯片)的字符设备。这些设备将出现在系统上,如/dev/gpiochip0到/dev/gpiochipN。如何直接使用用户空间ABI的示例可以在内核树的tools/gpio子目录中找到。
对于结构化和受控的应用程序,我们建议您使用libgpiod库。该库提供了辅助抽象、命令行实用程序和对同一GPIO芯片上的多个同时使用者的仲裁。