ฉันสามารถตอบคำถามนี้
sudo chown root.gpio /dev/mem
สิ่งนี้จะเปลี่ยนเจ้าของและกลุ่มของ/dev/mem
เป็นroot
และgpio
ตามลำดับ
sudo chmod g+rw /dev/mem
จากนั้นให้กลุ่มอ่านการเขียนการเข้าถึง/dev/mem
วัตถุนี้
/dev/mem
วัตถุนั้นเป็นพื้นที่หน่วยความจำทั้งหมดในระบบ ซึ่งหมายความว่าขณะนี้กลุ่มgpio
และทุกคนในนั้นสามารถอ่านและเขียนลงในพื้นที่หน่วยความจำได้
ตอนนี้ในพื้นที่หน่วยความจำมีหลายสิ่งรวมถึง CPU register เมื่อคุณสลับพิน GPIO คุณกำลังเปลี่ยนบิตหนึ่งในรีจิสเตอร์เหล่านี้ นักเตะคือคุณต้องแน่ใจว่าคุณทำอย่างถูกต้องหรือสิ่งเลวร้ายเกิดขึ้นกับระบบของคุณ
เพื่อช่วยปกป้องพื้นที่หน่วยความจำทั้งอำนาจที่ถูกแมปเพียงบางส่วนหน่วยความจำที่เราต้องทำงานร่วมกับบิต GPIO /dev/gpiomem
ไป ซึ่งมีผลบังคับใช้มาสก์ / ป้องกันส่วนที่เหลือของพื้นที่หน่วยความจำไม่ให้เข้าถึงและอนุญาตให้เข้าถึงบิต GPIO เท่านั้น วิธีนี้ช่วยให้สามารถเข้าถึงที่อยู่หน่วยความจำ GPIO และไม่อนุญาตให้ส่วนอื่น ๆ ของหน่วยความจำเช่นหน่วยความจำที่กำลังใช้งานโดยโปรแกรมอื่น ๆ
ผลกระทบนี้จะทำให้เกิดช่องโหว่ทั้งการรักษาความปลอดภัยและการป้องกันความเสถียรของระบบเพื่อให้สามารถเข้าถึงเนื้อหาของ GPIO รวมถึงหน่วยความจำที่เหลือ แต่เฉพาะกับผู้ใช้ในกลุ่ม GPIO ซึ่ง Pi เป็นสมาชิกของ
ในอนาคตไดรเวอร์เช่นbcm2835
ไลบรารีและwiringPi
จะได้รับการอัปเดตมากขึ้น (มีการอัปเดตบางอย่างเกิดขึ้นแล้ว) และแอปที่สร้างขึ้นบนเครื่องมือเหล่านั้นจะได้รับการอัปเดตเพิ่มเติมและในอนาคตหวังว่า GPIO ทั้งหมดนี้ หายไป
จนแล้วคุณมีสองทางเลือกเปิด/dev/mem
ไปยังกลุ่มgpio
เป็นอ่าน / /dev/mem
เขียนหรือเรียกใช้เป็นรากซึ่งมีการเขียนอ่านเต็มรูปแบบทั้งหมดของ
หวังว่ามันสมเหตุสมผล
root
ยังคงมีขณะนี้มีปัญหาหลายอย่างบางอย่างที่คุณยังคงต้องทำงานเป็น ตัวอย่างเช่นการใช้node-red-contrib-dht-sensor
โมดูลซึ่งขึ้นอยู่กับnode-dht-sensor
ซึ่งขึ้นอยู่กับ BCM2835 มันใช้ความผิดพลาดแบบ Seg /dev/gpiomem
เนื่องจากมีข้อบกพร่องบางอย่างที่ยังคงอยู่ในnode-dht-sensor
หรือใน/dev/gpiomem
หรือวิธีที่พวกเขาทำงานร่วมกัน ฉันไม่รู้ว่าเป็นกรณีอะไร แต่ในที่สุดก็จะได้ผล เมื่อ BCM2835 ทำงานเป็น 'แบบไม่รูท' และ/dev/gpiomem
มีอยู่มันจะพยายามใช้/dev/gpiomem
แทน/dev/mem
ดังนั้นการเปิด/dev/mem
ไปที่กลุ่มgpio
จึงไม่ได้ช่วย คนเกียจคร้าน