Posso rispondere a questo.
sudo chown root.gpio /dev/mem
Questo cambia il proprietario e il gruppo di /dev/mem
al root
e gpio
, rispettivamente.
sudo chmod g+rw /dev/mem
quindi fornisce al gruppo l'accesso in lettura e scrittura a questo /dev/mem
oggetto.
L' /dev/mem
oggetto è sostanzialmente l'intero spazio di memoria sul sistema. Ciò significa che ora il gruppo gpio
, e tutti gli utenti, possono leggere e scrivere nello spazio di memoria.
Ora, nello spazio di memoria ci sono molte cose, inclusi i registri della CPU. Quando si attivano i pin GPIO, si cambia un po 'in uno di questi registri. Il kicker è che devi essere sicuro di farlo correttamente o che nel tuo sistema possono accadere cose brutte.
Per proteggere l'intero spazio di memoria, i poteri che devono essere mappati solo sulle parti di memoria a cui dobbiamo lavorare con i bit GPIO /dev/gpiomem
. Ciò in effetti maschera / protegge il resto dello spazio di memoria dall'accesso e consente l'accesso solo ai bit GPIO. Ciò consente l'accesso agli indirizzi di memoria GPIO e non consente altre parti della memoria, come la memoria attualmente utilizzata da altri programmi.
In effetti, ciò crea un buco nelle protezioni di sicurezza e stabilità del sistema per consentire l'accesso alle cose GPIO, così come il resto della memoria, ma solo agli utenti del gruppo GPIO, di cui Pi è membro.
In futuro, driver come la bcm2835
libreria e wiringPi
verranno aggiornati di più (alcuni aggiornamenti sono già in corso) e le app che si basano su tali strumenti verranno ulteriormente aggiornate e, in futuro, si spera che tutta questa seccatura di GPIO come root sarà scompaiono.
Fino ad allora hai due scelte, apri il /dev/mem
gruppo to gpio
come lettura / scrittura o esegui come root, che ha la lettura completa in scrittura su tutti /dev/mem
.
Spero che abbia un senso.
Al momento ci sono ancora molti problemi in cui è ancora necessario eseguire il comando root
. Ad esempio, utilizzando il node-red-contrib-dht-sensor
modulo, che dipende da node-dht-sensor
, che dipende da BCM2835. Segrega i guasti usando /dev/gpiomem
come ha ancora alcuni bug nel node-dht-sensor
o nel /dev/gpiomem
modo in cui lavorano insieme. Non so quale sia il caso, ma alla fine verrà risolto. Quando BCM2835 viene eseguito come "non root" ed /dev/gpiomem
esiste, tenta di utilizzare /dev/gpiomem
invece di /dev/mem
, quindi aprire il /dev/mem
gruppo to gpio
non aiuta. Bummer.