Saya telah membuat skrip python menggunakan perpustakaan RPi.GPIO. Saya perlu menjalankannya tanpa root tetapi saya mendapatkan kesalahan ini ketika menjalankannya dengan "python ./script.py":
No access to /dev/mem. Try running as root!
Saya telah membaca di banyak tempat bahwa Anda tidak perlu lagi melakukan root dengan versi terbaru dari pustaka tetapi saya masih mendapatkan kesalahan setelah memperbarui. Versi yang saya miliki adalah RPi.GPIO 0.6.0a3
Ini kodenya:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18,GPIO.OUT)
print "LED on"
GPIO.output(18,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(18,GPIO.LOW)
Dan kesalahan penuh:
pi@raspberrypi ~/Desktop/python $ python ./sensors.py
Traceback (most recent call last):
File "./sensors.py", line 5, in <module>
GPIO.setup(18,GPIO.OUT)
RuntimeError: No access to /dev/mem. Try running as root!
Ketika saya menjalankannya sebagai root berfungsi.
Jawaban:
Anda mungkin perlu menjalankan Raspbian untuk menggunakan RPi.GPIO sebagai pengguna non-root, mungkin juga perlu jessie.
Apakah
/dev/gpiomem
ada Jika demikian, RPi.GPIO harus menggunakan perangkat ini untuk mengakses GPIO. Jika/dev/gpiomem
tidak ada coba:untuk memastikan Anda menggunakan kernel terbaru, dan
untuk memastikan Anda menggunakan RPi.GPIO terbaru.
Anda juga perlu memastikan bahwa Anda adalah anggota
gpio
grup:DIedit UNTUK MENAMBAH
Sistem Raspbian tampaknya dalam keadaan fluks. Saya tidak yakin apakah itu Raspbian atau (lebih mungkin) masalah raspberrypi.org.
Periksa / dev / gpiomem memiliki izin yang benar.
Jika tidak maka atur izin yang benar sebagai berikut
sumber
id
untuk mendaftar grup shell Anda saat ini, dan jikagpio
tidak terdaftar, login lagi, atau reboot.Saya memiliki masalah ini segera dan diselesaikan hanya dengan ini:
Dengan ini, pengguna "my_new_user" ditambahkan ke grup gpio, jadi, semua pengguna dalam grup gpio dapat mengakses pin GPIO.
sumber
Saya bisa menjawab ini.
Ini mengubah pemilik dan grup
/dev/mem
menjadiroot
dangpio
masing - masing.kemudian berikan grup akses tulis baca untuk ini
/dev/mem
objek .Itu
/dev/mem
objek pada dasarnya adalah seluruh ruang memori pada sistem. Ini berarti bahwa sekarang grupgpio
, dan semua orang di dalamnya, dapat membaca dan menulis ke ruang memori.Sekarang, di ruang memori ada banyak hal, termasuk register CPU. Saat Anda mengaktifkan pin GPIO, Anda mengubah sedikit di salah satu register ini. Kicker adalah, Anda harus yakin Anda melakukannya dengan benar atau hal-hal buruk dapat terjadi pada sistem Anda.
Untuk membantu melindungi seluruh ruang memori, kekuatan yang dipetakan hanya bagian memori yang kita perlukan untuk bekerja dengan bit GPIO untuk
/dev/gpiomem
. Ini pada dasarnya menutupi / melindungi sisa ruang memori dari akses dan hanya memungkinkan bit GPIO diakses. Ini memungkinkan akses ke alamat memori GPIO dan melarang semua bagian lain dari memori, seperti memori yang saat ini digunakan oleh program lain.Akibatnya, ini membuat lubang pada perlindungan keamanan dan stabilitas sistem untuk memungkinkan akses ke hal-hal GPIO, serta sisa memori, tetapi hanya untuk pengguna dalam grup GPIO, yang menjadi anggota Pi.
Di masa depan, driver seperti
bcm2835
perpustakaan danwiringPi
akan diperbarui lebih (beberapa pembaruan sudah terjadi) dan aplikasi yang dibangun di atas alat-alat tersebut akan diperbarui lebih lanjut dan kemudian di masa depan, semoga semua kerumitan GPIO ini sebagai root akan menghilang.Sampai saat itu Anda memiliki dua pilihan, buka
/dev/mem
grup untukgpio
membaca / menulis, atau jalankan sebagai root, yang memiliki baca tulis penuh untuk semua/dev/mem
.Harapan itu masuk akal.
Saat ini masih ada beberapa masalah di mana Anda masih perlu menjalankannya
root
. Misalnya, menggunakannode-red-contrib-dht-sensor
modul, yang tergantung padanode-dht-sensor
, yang tergantung pada BCM2835. Ini kesalahan menggunakan/dev/gpiomem
karena memiliki beberapa bug masih dalamnode-dht-sensor
atau di/dev/gpiomem
atau cara mereka bekerja bersama. Saya tidak tahu yang mana masalahnya, tetapi akhirnya akan berhasil. Ketika BCM2835 berjalan sebagai 'non-root' dan/dev/gpiomem
ada, ia mencoba untuk digunakan/dev/gpiomem
alih-alih/dev/mem
, jadi membuka/dev/mem
grup togpio
tidak membantu. Gelandangan.sumber
Cukup gunakan perintah berikut di terminal:
sumber
/dev/mem
dan/dev/gpiomem
?/dev/mem
untuk/dev/gpiomem
ini akan membuat Anda mendapatkan izin yang sama untuk penggunaan/dev/mem
yang Anda miliki dengan/dev/gpiomem
Tidak ada balasan di atas yang mencakup semua langkah. Saya perlu menyelesaikan langkah-langkah berikut untuk mendapatkan akses non-root ke pin GPIO. Saya harus membuat grup baru, tambahkan pengguna saya ke grup ini kemudian ubah izin (seperti pada posting sebelumnya).
sumber
Jika Anda sedang membangun di geany, ubah saja perintah build.
Perintah Java untuk dikompilasi seharusnya
dan perintah eksekusi seharusnya
sumber