Rakesh,我一直在试图弄清楚完全相同的事情,我想我已经解决了。
您根本不需要了解很多makefile。重要的几行如下,运行时在bash中执行sudo make install
install: install-files
groupadd -f --system gpio
chgrp gpio $(DESTDIR)/bin/gpio-admin
chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin
groupadd -f --system gpio
创建一个名为 gpio 的系统组。chgrp gpio $(DESTDIR)/bin/gpio-admin
将二进制文件组(C 文件 gpio-admin.c 编译成的)更改为 gpio。二进制文件的所有者仍然是 root(因为您以 root 身份运行 make。)chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin
做了两件重要的事情。首先,它让 gpio 组的成员运行 gpio-admin。其次,它在 gpio-admin 上设置 setuid 位。
当您将自己添加到 gpio 组时,您可以运行 gpio-admin,而无需使用 sudo,但 gpio admin 会像在 sudo 下运行一样。这允许它写入 /sys/class/gpio/export 文件。它还允许它更改创建的文件 /sys/class/gpio/gpio[pin number]/direction 等的所有者。
即使您将/sys/class/gpio/export 的组更改为gpio,并设置权限以允许您对其进行写入
sudo chgrp gpio /sys/class/gpio/export /sys/class/gpio/unexport
sudo chmod g+rwx /sys/class/gpio/export /sys/class/gpio/unexport
您可以在没有超级用户权限的情况下导出 pin
echo 22 > /sys/class/gpio/export
但是文件 /sys/class/gpio/gpio22/direction 等仍然会以 root 作为所有者和组创建,您需要使用 sudo 来更改它们。此外,每次重新启动后,导出和取消导出文件的所有权将恢复为 root。