Ответ 1
Ракеш, я просто пытался понять точно то же самое, и я думаю, что решил.
Вам не нужно вообще разбираться в make файле. Важными линиями являются следующие, которые выполняются в 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 (поскольку вы запускаете make как root.) chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin
выполняет две важные вещи. Во-первых, он позволяет члену группы gpio запускать gpio-admin. Во-вторых, он устанавливает бит setuid в gpio-admin.
Когда вы добавляете себя в группу 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
вы можете экспортировать вывод без полномочий суперпользователя.
echo 22 > /sys/class/gpio/export
но файлы /sys/class/gpio/gpio 22/direction и т.д. будут по-прежнему создавать с правами root как владелец и группа, и вам нужно будет использовать sudo для их изменения. Кроме того, право собственности на файлы экспорта и экспорта не возвращается к root после каждой перезагрузки.