Mogę na to odpowiedzieć.
sudo chown root.gpio /dev/mem
Zmienia to odpowiednio właściciela i grupę /dev/memna rooti gpio.
sudo chmod g+rw /dev/mem
następnie daje grupie prawo odczytu do zapisu dla tego /dev/memobiektu.
/dev/memObiekt jest w zasadzie cała przestrzeń pamięci w systemie. Oznacza to, że teraz grupa gpioi wszyscy w niej mogą czytać i zapisywać w pamięci.
Teraz w przestrzeni pamięci jest wiele rzeczy, w tym rejestry procesora. Kiedy przełączasz piny GPIO, zmieniasz nieco w jednym z tych rejestrów. Kicker polega na tym, że musisz upewnić się, że robisz to poprawnie, inaczej złe rzeczy mogą przytrafić się Twojemu systemowi.
Aby pomóc chronić całą przestrzeń pamięci, moce, które są mapowane tylko na części pamięci, do których musimy pracować z bitami GPIO /dev/gpiomem. To w efekcie maskuje / chroni pozostałą część pamięci przed dostępem i pozwala tylko na dostęp do bitów GPIO. Umożliwia to dostęp do adresów pamięci GPIO i uniemożliwia wszelkie inne części pamięci, takie jak pamięć używana obecnie przez inne programy.
W efekcie powoduje to lukę zarówno w zabezpieczeniach, jak i zabezpieczeniach stabilności systemu, aby umożliwić dostęp do rzeczy GPIO, a także reszty pamięci, ale tylko dla użytkowników w grupie GPIO, której członkiem jest Pi.
W przyszłości sterowniki, takie jak bcm2835biblioteka, wiringPizostaną zaktualizowane w większym stopniu (niektóre aktualizacje już się odbywają), a aplikacje zbudowane na tych narzędziach będą dalej aktualizowane, a następnie w przyszłości, mam nadzieję, że wszystkie te problemy GPIO będą kłopotliwe z rootowaniem znikać.
Do tego czasu masz dwie możliwości: otwórz /dev/memgrupę gpiojako odczyt / zapis lub uruchom jako root, który ma pełny odczyt zapisu do wszystkich /dev/mem.
Mam nadzieję, że to ma sens.
Obecnie nadal istnieje wiele problemów, w których nadal musisz działać jako root. Na przykład za pomocą node-red-contrib-dht-sensormodułu, który zależy od node-dht-sensor, który zależy od BCM2835. To SEG-usterek przy użyciu /dev/gpiomemjak to ma pewne błędy ciągle albo w node-dht-sensorlub w /dev/gpiomemlub sposób ich współpracy. Nie wiem, co się dzieje, ale w końcu to się rozwiąże. Gdy BCM2835 działa jako „inny niż root” i /dev/gpiomemistnieje, próbuje użyć /dev/gpiomemzamiast /dev/mem, więc otwarcie /dev/memgrupy gpionie pomaga. Bummer.