<div dir="ltr">Hi all,<div>sorry for the very long post. As I said in a previous email I'm trying to play with LXD on top of a Raspberry Pi 3. My goal is to mount the GPIO pseudo filesystem on a container so that I can access the GPIO pins from within the container. <div><div><br></div><div>I came up with the following conclusions: </div><div><br></div><div> - if I create a privileged container (I would prefer not to do that anyway) I can see the /sys/class/gpio filesystem as root but I cannot write it. For example, trying a classical "echo 1 > /sys/class/gpio/export, I get "bash: export: Read-only file system"</div><div> - if I create a non-privileged container I cannot even enter folder /sys/class/gpio as root. I can enter /sys/class but there I see that gpio folder has owner nobody.nogroup and 770 permissions. </div><div><br></div><div>I solved the issue with a FUSE filesystem running on the Raspberry that mirrors the /sys/class/gpio and mounting such a filesystem under a different path, i.e., /gpio_mnt/sys/class/gpio. </div><div><br></div><div>This is the script I created: </div><div><br></div><div><div><i>lxc launch ubuntu:16.04 test1</i></div><div><i><br></i></div><div><i>MYUID=`sudo ls -l /var/lib/lxd/containers/test1/rootfs/ | grep root | awk '{}{print $3}{}'`</i></div><div><i><br></i></div><div><i>lxc exec test1 -- addgroup gpio</i></div><div><i>lxc exec test1 -- usermod -a -G gpio ubuntu</i></div><div><i>MYGID=$(($MYUID + `lxc exec test1 -- sed -nr "s/^gpio:x:([0-9]+):.*/\1/p" /etc/group`))</i></div><div><i><br></i></div><div><i>sudo mkdir -p /gpio_mnt/test1</i></div><div><i>sudo chmod 777 -R /gpio_mnt/</i></div><div><i><br></i></div><div><i>sudo mkdir -p /gpio_mnt/test1/sys/devices/platform/soc/3f200000.gpio</i></div><div><i>sudo mkdir -p /gpio_mnt/test1/sys/class/gpio</i></div><div><i>sudo chown "$MYUID"."$MYGID" -R /gpio_mnt/test1/sys/</i></div><div><i><br></i></div><div><i>lxc exec test1 -- mkdir -p /gpio_mnt/sys/class/gpio</i></div><div><i>lxc exec test1 -- mkdir -p /gpio_mnt/sys/devices/platform/soc/3f200000.gpio</i></div><div><i><br></i></div><div><i>lxc config device add test1 gpio disk source=/gpio_mnt/test1/sys/class/gpio path=/gpio_mnt/sys/class/gpio</i></div><div><i>lxc config device add test1 devices disk source=/gpio_mnt/test1/sys/devices/platform/soc/3f200000.gpio path=/gpio_mnt/sys/devices/platform/soc/3f200000.gpio</i></div><div><i><br></i></div><div><i>#This is the mirroring through FUSE filesystem</i></div><div><i>cd /home/ubuntu/test_gpio_mirroring/</i></div><div><i>sudo node node-folder-mirroring.js /sys/devices/platform/soc/3f200000.gpio /gpio_mnt/test1/sys/devices/platform/soc/3f200000.gpio -o uid=$MYUID -o gid=$MYGID -o allow_other &> log_devices_test1 &</i></div><div><i>sudo node node-folder-mirroring.js /sys/class/gpio /gpio_mnt/test1/sys/class/gpio -o uid=$MYUID -o gid=$MYGID -o allow_other &> log_gpio_test1 &</i></div></div><div><br></div><div>I would like not to mount under /gpio_mnt/sys/class/gpio but under /sys/class/gpio so that standard Raspberry libraries will work inside the container without any modification but I will still be able to capture the syscalls with the FUSE filesystem mediating the access to GPIO pins. </div><div><br></div><div>How can I do that? Am I missing something here? </div><div><br></div><div>Thanks,</div><div>Francesco</div><div><br></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>------------------------------------------------------------------------------</div><div>Dr. Francesco Longo, PhD</div><div>Assistant Professor</div><div>Dipartimento  di Ingegneria</div><div>Università degli Studi di Messina</div><div>address: Contrada di Dio (S. Agata), 98166, Messina, Italy</div><div>email: <a href="mailto:flongo@unime.it" target="_blank">flongo@unime.it</a></div><div>phone: +39 090 3977335 --- fax: +39 090 3977471</div><div><span style="font-size:13.3333px">------------------------------------------------------------------------------</span><br></div></div></div></div></div></div></div></div></div>
</div></div></div>