Mogę na to odpowiedzieć.
sudo chown root.gpio /dev/mem
Zmienia to odpowiednio właściciela i grupę /dev/mem
na root
i gpio
.
sudo chmod g+rw /dev/mem
następnie daje grupie prawo odczytu do zapisu dla tego /dev/mem
obiektu.
/dev/mem
Obiekt jest w zasadzie cała przestrzeń pamięci w systemie. Oznacza to, że teraz grupa gpio
i 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 bcm2835
biblioteka, wiringPi
zostaną 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/mem
grupę gpio
jako 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-sensor
modułu, który zależy od node-dht-sensor
, który zależy od BCM2835. To SEG-usterek przy użyciu /dev/gpiomem
jak to ma pewne błędy ciągle albo w node-dht-sensor
lub w /dev/gpiomem
lub 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/gpiomem
istnieje, próbuje użyć /dev/gpiomem
zamiast /dev/mem
, więc otwarcie /dev/mem
grupy gpio
nie pomaga. Bummer.