ฉันสามารถตอบคำถามนี้
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จึงไม่ได้ช่วย คนเกียจคร้าน