Tôi có thể trả lời điều này.
sudo chown root.gpio /dev/mem
Điều này thay đổi chủ sở hữu và nhóm /dev/memđến rootvà gpiotương ứng.
sudo chmod g+rw /dev/mem
sau đó cung cấp cho nhóm đọc quyền truy cập ghi vào /dev/memđối tượng này .
Đối /dev/memtượng về cơ bản là toàn bộ không gian bộ nhớ trên hệ thống. Điều này có nghĩa là bây giờ nhóm gpiovà mọi người trong đó có thể đọc và ghi vào không gian bộ nhớ.
Bây giờ, trong không gian bộ nhớ có nhiều thứ, bao gồm các thanh ghi CPU. Khi bạn chuyển đổi các chân GPIO, bạn sẽ thay đổi một chút trong một trong các thanh ghi này. Các kicker là, bạn cần chắc chắn rằng bạn làm điều đó một cách chính xác hoặc những điều xấu xấu có thể xảy ra với hệ thống của bạn.
Để giúp bảo vệ toàn bộ không gian bộ nhớ, các quyền hạn được ánh xạ chỉ là các phần bộ nhớ mà chúng ta cần để làm việc với các bit GPIO /dev/gpiomem. Điều này trong mặt nạ hiệu ứng / che chắn phần còn lại của không gian bộ nhớ khỏi bị truy cập và chỉ cho phép các bit GPIO được truy cập. Điều này cho phép truy cập vào các địa chỉ bộ nhớ GPIO và không cho phép bất kỳ phần nào khác của bộ nhớ, chẳng hạn như bộ nhớ hiện đang được sử dụng bởi bất kỳ chương trình nào khác.
Trên thực tế, điều này thổi một lỗ hổng trong cả bảo vệ ổn định hệ thống và bảo mật để cho phép truy cập vào nội dung GPIO, cũng như phần còn lại của bộ nhớ, nhưng chỉ với những người dùng trong nhóm GPIO mà Pi là thành viên.
Trong tương lai, các trình điều khiển như bcm2835thư viện và wiringPisẽ được cập nhật thêm (một số cập nhật đã xảy ra) và các ứng dụng được xây dựng trên các công cụ đó sẽ được cập nhật thêm và trong tương lai, hy vọng tất cả các rắc rối GPIO này sẽ được root biến mất
Cho đến lúc đó, bạn có hai lựa chọn, mở ra /dev/memnhóm gpiođể đọc / ghi hoặc chạy với quyền root, có ghi đọc đầy đủ cho tất cả /dev/mem.
Hy vọng rằng có ý nghĩa.
Hiện tại vẫn còn một số vấn đề mà bạn vẫn cần phải chạy root. Ví dụ: sử dụng node-red-contrib-dht-sensormô-đun, phụ thuộc vào node-dht-sensor, phụ thuộc vào BCM2835. Nó sử dụng các lỗi phân tách /dev/gpiomemvì nó có một số lỗi vẫn còn node-dht-sensorhoặc trong /dev/gpiomemhoặc cách chúng hoạt động cùng nhau. Tôi không biết đó là trường hợp nào, nhưng cuối cùng nó sẽ được giải quyết. Khi BCM2835 chạy dưới dạng 'không root' và /dev/gpiomemtồn tại, nó cố gắng sử dụng /dev/gpiomemthay vì /dev/mem, vì vậy việc mở /dev/memnhóm gpiokhông giúp ích gì. Bummer.