GPIO em contêiner LXC sem privilégios

GPIO em contêiner LXC sem privilégios

Atualmente, tento obter acesso GPIO em um contêiner de aplicativo LXC sem privilégios. No futuro, este contêiner executará uma aplicação. Mas por enquanto (durante o desenvolvimento) eu apenas inicio uma festança normal no contêiner:

sudo lxc-execute -n gpio-client -f /var/proj/gpio-client/lxc.conf -- bin/bash

Quando faço isso com um contêiner privilegiado (significa que meu lxc.conf não contém nenhum mapeamento UID ou GID), posso usar os GPIOs.
Os GPIOs podem ser acessados ​​por arquivos em /sys/class/gpio (a saída a seguir vem de um bash dentro de um contêiner privilegiado que foi iniciado com o comando acima):

bash-4.3# cd /sys/class/gpio/
bash-4.3# ls -l
total 0
-rwxrwx---    1 gpio-cli 1001          4096 Feb 20 12:41 export
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip890 -> ../../devices/gpiochip2/gpio/gpiochip890
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip898 -> ../../devices/gpiochip1/gpio/gpiochip898
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip906 -> ../../devices/soc0/amba/e000a000.gpio/gpio/gpiochip906
-rwxrwx---    1 gpio-cli 1001          4096 Feb 20 12:41 unexport

Por exemplo, consigo exportar um GPIO:

bash-4.3# echo 898 > export
bash-4.3# ls -l
total 0
-rwxrwx---    1 gpio-cli 1001          4096 Feb 20 14:06 export
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 14:06 gpio898 -> ../../devices/gpiochip1/gpio/gpio898
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip890 -> ../../devices/gpiochip2/gpio/gpiochip890
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip898 -> ../../devices/gpiochip1/gpio/gpiochip898
lrwxrwxrwx    1 gpio-cli 1001             0 Feb 20 12:41 gpiochip906 -> ../../devices/soc0/amba/e000a000.gpio/gpio/gpiochip906
-rwxrwx---    1 gpio-cli 1001          4096 Feb 20 12:41 unexport

Quando imprimo os processos em execução no host com "ps -a", posso ver o bash em execução como root:

      587 root       0:00 lxc-execute -n gpio-client -f /var/proj/gpio-client/lxc.conf -- bin/bash
      598 root       0:00 /init.lxc.static -- bin/bash
      615 root       0:00 bin/bash

Mas quando insiro um mapeamento UID e GID no lxc.conf (e também os subuids e subgids em /etc/subuid e /etc/subgid), sempre recebo uma "Permissão negada" quando tento acessar /sys/ classe/gpio:

bash-4.3# cd /sys/class/
bash-4.3# ls -l
total 0
drwxrwx---    2 65534    gpio             0 Feb 20 14:11 gpio
bash-4.3# cd gpio/
bash: cd: gpio/: Permission denied

Este é o meu lxc.conf:

# *************************************************************************
# * general configuration
# *************************************************************************

# container name
lxc.utsname = gpio-client

# *************************************************************************
# * configure networking
# *************************************************************************

lxc.network.type          =   veth
lxc.network.flags         =   up
lxc.network.link          =   local_br0
lxc.network.name          =   lxcnet0
lxc.network.hwaddr        =   4a:49:43:49:79:ac
lxc.network.ipv4          =   10.10.0.98
lxc.network.ipv4.gateway  =   10.10.0.1

# *************************************************************************
# * configure container filesystem
# *************************************************************************

# set rootfs
lxc.rootfs = /var/proj/gpio-client/rootfs

# mount needed directories from host
lxc.mount.entry=/lib                lib             none    ro,bind     0   0
lxc.mount.entry=/sys/class/gpio     sys/class/gpio  none    rw,bind     0   0
lxc.mount.entry=/sys/devices        sys/devices     none    rw,bind     0   0
lxc.mount.entry=/usr/lib            usr/lib         none    ro,bind     0   0
lxc.mount.entry=/usr/bin            usr/bin         none    ro,bind     0   0
lxc.mount.entry=/bin                bin             none    ro,bind     0   0

# *************************************************************************
# * configure privileges of container
# *************************************************************************

# map user and group ids
lxc.include = /usr/share/lxc/config/userns.conf
# comment the following out for a privileged container:
lxc.id_map = u 0 1000000 65536
lxc.id_map = g 0 1000000 65536

Este é o sistema Linux em execução:

zedboard-zynq7:/var/proj/gpio-client$ cat /proc/version 
Linux version 4.6.0-rt1-xilinx-v2016.3 (sebastian@ubuntu1604vm) (gcc version 6.2.0 (GCC) ) #5 SMP PREEMPT RT Fri Apr 7 13:43:09 CEST 2017

O sistema foi construído usando Yocto para um AVNET-Zedboard (que possui um Xilinx Zynq-SoC).

Alguém tem uma idéia ou aconselha como fazer isso funcionar ou onde encontrar a solução/informação para isso? Tentei fazê-lo funcionar por algumas horas, mas infelizmente não consegui ...

Atenciosamente
Sebastião

informação relacionada