如果你喜欢Fedora、容器,并且有一个树莓派,那么将三者结合起来控制LED怎么样?这篇文章是关于FedoraIoT的,将展示如何在RaspberryPi上安装预览图像。您还将了解如何与GPIO交互以点亮LED。什么是Fedora物联网?FedoraIoT是当前Fedora项目的目标之一,并计划成为完整的Fedora版本。FedoraIoT将是一个运行在ARM(目前只有aarch64)设备上的系统,例如RaspberryPi和x86_64架构。FedoraIoT是在OSTree之上开发的,就像FedoraSilverblue和旧的AtomicHost一样。下载和安装FedoraIoT官方的FedoraIoT镜像将随Fedora29一起发布。但同时您可以下载一个基于Fedora28的镜像来进行这个实验。(LCTT译注:截至本译文发布,Fedora29已经发布,但是IoT版本还没有发布,也许会和Fedora30一起发布?)安装这个系统有两种方式:要么使用dd命令烧录SD卡,或者使用fedora-arm-installer工具。FedoraWiki提供了有关为物联网设置物理设备的更多信息。此外,您可能需要调整第三个分区的大小。将SD卡插入设备后,需要创建用户才能完成安装。此步骤需要串行连接或HDMI显示器和键盘才能与设备交互。系统安装完成后,下一步就是设置网络连接。使用刚刚创建的用户登录系统,您可以使用以下方法之一完成网络连接设置:如果您需要手动配置您的网络,您可能需要执行类似下面的命令确保设置了正确的网络地址:$nmcliconnectionaddconnamecableipv4.addresses\192.168.0.10/24ipv4.gateway192.168.0.1\connection.autoconnecttrueipv4.dns"8.8.8.8,1.1.1.1"\typeethernetifnameeth0ipv4.methodmanual如果你的网络运行的是DHCP服务,你可能需要这样的命令:$nmcliconaddtypeethernetcon-namecableifnameeth0GPIO系统接口。此接口已被弃用,出于安全和其他方面的考虑,上游Linux内核社区打算将其完全删除。Fedora不再将这个传统接口编译进内核,所以系统上没有/sys/class/gpio文件。本教程使用上游内核提供的新字符设备/dev/gpiochipN。这是当前与GPIO交互的方式。为了与这个新设备进行交互,您需要使用一个库和一系列命令行界面工具。echo和cat等常用命令行工具无法在此设备上正常工作。您可以通过安装libgpiod-utils包来安装CLI工具。python3-libgpiod包提供了相应的Python库。使用Podman创建容器Podman是一个容器运行时环境,具有类似于Docker的命令行界面。Podman的一大优势是它不在后台运行任何守护进程。这对于资源有限的设备特别有用。Podman还允许您使用systemd单元文件启动容器化服务。此外,它还有许多其他功能。我们使用以下两个步骤来创建容器:创建包含所需包的分层图像。使用分层图像创建一个新容器。首先创建一个包含以下内容的Dockerfile。这些告诉Podman基于可用的***Fedora镜像构建我们的分层镜像。然后更新系统,安装一些软件包:FROMfedora:latestRUNdnf-yupdateRUNdnf-yinstalllibgpiod-utilspython3-libgpiod这样就完成了镜像生成前的配置工作。这个镜像基于最新的Fedora,它还包括用于与GPIO交互的包。现在您可以运行以下命令来构建您的基础镜像:$sudopodmanbuild--tagfedora:gpiobase-f./Dockerfile您已经成功创建了您的自定义镜像。这样以后就不用每次都重新构建环境了,而是根据自己创建的镜像来完成工作。使用Podman完成作业要确认当前映像已准备就绪,请运行以下命令:$sudopodmanimagesREPOSITORYTAGIMAGEIDCREATEDSIZElocalhost/fedoragpiobase67a2b2b93b4b10minutesago488MBdocker.io/library/fedoralatestc18042d7fac62daysago现在启动3个容器,并做一些实际的实验。容器通常是隔离的,无法访问主机系统,包括GPIO接口。因此需要在容器启动时挂载到容器中。可以在如下命令中使用-device选项解决:$sudopodmanrun-it--namegpioexperiment--device=/dev/gpiochip0localhost/fedora:gpiobase/bin/bash运行后进入运行容器.在继续之前,这里有一些容器命令。键入exit或按Ctrl+D退出容器。要显示所有现有容器,请运行以下命令,包括当前未运行的容器,例如您刚刚创建的容器:$sudopodmancontainerls-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES64e661d5d4e8localhost/fedora:gpiobase/bin/bash37secondsagoExited(0)Lessthanasecondagogpioexperiment使用以下命令创建一个新容器:$sudopodmanrun-it--namenewexperiment--device=/dev/gpiochip0localhost/fedora:gpiobase/bin/bashIf你想删除容器可以使用以下命令:$sudopodmanrmnewexperiment打开LED创建的容器现在可以使用了。如果您已经退出容器,请使用以下命令重新启动它:$sudopodmanstart-iagpioexperiment如前所述,您可以使用Fedora中的libgpiod-utils包提供的命令行工具。要列出可用的GPIO芯片,请使用以下命令:$gpiodetectgpiochip0[pinctrl-bcm2835](54行)要获取特定芯片的连接列表,请运行:$gpioinfogpiochip0打印的行数之间没有相关性。重要的是BCM编号,如pinout.xyz中所示。建议不要使用没有相应BCM编号的电线。现在,将LED连接到物理引脚40,即BCM21。请记住:LED的短腿(负极,称为阴极)必须通过330欧姆电阻连接到RaspberryPi的GND引脚,并且长腿(阳极)连接到物理引脚40。运行以下命令打开LED,按Ctrl+C将其关闭:$gpioset--mode=waitgpiochip021=1要打开一段时间,添加-b(在后台运行)和-sNUM(多少秒)参数,如下。例如,要打开LED5秒,运行以下命令:$gpioset-b-s5--mode=timegpiochip021=1另一个有用的命令是gpioget。它可以获得引脚的状态(高电平或低电平),可用于检测按钮和开关。总之,您还可以使用Python操作LED——这里有一些示例。也可以在容器内使用i2c设备。此外,Podman与此Fedora版本并不严格相关。您可以将它安装在任何现有的Fedora版本上,或者在Fedora中的两个基于OSTree的新系统上试用它:FedoraSilverblue和FedoraCoreOS。
