在 Linux 中使用 GPIO 線

Linux 核心的存在是為了抽象化硬體並將其呈現給使用者。 GPIO 線通常不是面向使用者的抽象。使用 GPIO 線最明顯、最自然和首選的方式是讓核心硬體驅動程式處理它們。

有關已經存在的通用驅動程式的示例,這些示例對於您想要編寫的任何其他核心驅動程式也都是很好的示例,請參閱使用 GPIO 的子系統驅動程式

對於您想要支援的任何批次生產的系統,例如伺服器、筆記型電腦、手機、平板電腦、路由器以及使用適當核心驅動程式的任何消費品、辦公用品或商業產品,這一點至關重要。 當您認為您的程式碼足夠成熟時,請提交您的程式碼以包含在 upstream 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 晶片上的多個併發使用者提供幫助程式抽象、命令列實用程式和仲裁。