권한이 없는 LXC 컨테이너의 GPIO

권한이 없는 LXC 컨테이너의 GPIO

현재 권한이 없는 LXC 애플리케이션 컨테이너에 대한 GPIO에 액세스하려고 합니다. 앞으로 이 컨테이너는 애플리케이션을 실행할 것입니다. 하지만 지금은 (개발 중에) 컨테이너에서 일반 bash를 시작합니다.

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

권한 있는 컨테이너(lxc.conf에 UID 또는 GID 매핑이 포함되어 있지 않음)를 사용하여 이 작업을 수행할 때 GPIO를 사용할 수 있습니다.
GPIO는 /sys/class/gpio에 있는 파일을 통해 액세스할 수 있습니다(다음 출력은 위 명령으로 시작된 권한 있는 컨테이너 내부의 bash에서 나온 것입니다).

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

예를 들어 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

"ps -a"를 사용하여 호스트에서 실행 중인 프로세스를 인쇄하면 bash가 루트로 실행되는 것을 볼 수 있습니다.

      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

그러나 UID 및 GID 매핑을 lxc.conf(및 /etc/subuid 및 /etc/subgid의 subuid 및 subgid)에 삽입하면 /sys/ "Message 클래스에 액세스하려고 할 때 항상 "권한이 거부되었습니다"라는 메시지가 나타납니다. /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

이것은 내 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

다음은 실행 중인 Linux 시스템입니다.

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

시스템은 AVNET-Zedboard(Xilinx Zynq-SoC 포함)용 Yocto를 사용하여 구축되었습니다.

이것을 실행하는 방법이나 솔루션/정보를 찾을 수 있는 위치에 대한 아이디어나 제안이 있는 사람이 있습니까? 몇 시간 동안 실행하려고 시도했지만 불행히도 성공하지 못했습니다 ...

안부 인사
세바스찬

관련 정보