Открытие устройства TUN из QEmu x86 для ARMv7 не выполняется

На банане PI-R1 (ARMv7), с qemu-i386-static, я пытаюсь выполнить клиент VPN Barracuda, статически связанный для x86. Следуя этой теме, выполните следующие действия : Запуск исполняемых файлов X86 на armv7

Но, когда VPN пытается открыть устройство TUN, появляется ошибка «Unsupported ioctl: cmd = 0x400454ca» «TUNSETIFF: Function not Implement».

Я могу воспроизвести ту же ошибку, что и образец C, она работает, когда скомпилирована на встроенной ARM, но сбой при компиляции для i386 (только при использовании qemu-i386-static):

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/ioctl.h> #include <net/if.h> #include <linux/if_tun.h> #include <fcntl.h> static int tun_alloc_old(char *dev) { char tunname[IFNAMSIZ]; sprintf(tunname, "/dev/%s", dev); return open(tunname, O_RDWR); } static int tun_alloc(char *dev) { struct ifreq ifr; int fd; int err; if ((fd = open("/dev/net/tun", O_RDWR)) < 0) return tun_alloc_old(dev); memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = IFF_TUN; if (*dev) strncpy(ifr.ifr_name, dev, IFNAMSIZ); if ((err = ioctl(fd, TUNSETIFF, (void*)&ifr)) < 0) { close(fd); perror("TUNSETIFF"); return err; } strcpy(dev, ifr.ifr_name); return fd; } int main(void) { char tun[20] = "tun0"; printf("fd=%d, if=%s\n", tun_alloc(tun), tun); return 0; } 

Обычный результат (собственный i386 или ARM):

 # ./main fd=3, if=tun0 

И с эмулятором:

 # qemu-i386-static ./main Unsupported ioctl: cmd=0x400454ca TUNSETIFF: Function not implemented fd=-1, if=tun0