armv7 tun/tap 장치 드라이버 크로스 컴파일

armv7 tun/tap 장치 드라이버 크로스 컴파일

저는 중국산 Hi3516A SOC 기반 네트워크 카메라를 여러 대 가지고 있습니다. 잘 작동하고 VPN을 사용하여 액세스하고 싶습니다. tinc-vpn텔넷을 사용하여 카메라 하우징에 대한 전체 액세스 권한을 갖고 있었기 때문에 카메라에 설치하기로 결정했습니다 .

글쎄, buildroot를 사용하여 크로스 컴파일 툴체인을 만들고 Tinc를 빌드했습니다. 하지만 Tinc는 tun/tap 장치를 지원해야 하며 카메라는 기본적으로 이러한 장치를 지원하지 않습니다. 그래서 사용해본 dmesg결과 uname -a어떤 카메라가 Linux 3.4.35 커널을 사용하는지 알아냈습니다. 커널 소스를 다운로드하고 TUN/TAP에 대한 지원을 로드 가능한 커널 모듈로 추가하고 컴파일했습니다.

~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- defconfig
~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- menuconfig 
# add building of TUN/TAP driver
~$ make ARCH=arm CROSS_COMPILE=/opt/hisilicon/arm/usr/bin/arm-linux- -k

커널이 잘 컴파일되고 tun.ko를 카메라에 넣었습니다. 실행 후 insmod ./tun.ko나는 얻었다

insmod: can't insert 'tun.ko': invalid module format

~ # dmesg | tail -n 1
tun: version magic '3.4.35 mod_unload ARMv5 p2v8 ' should be '3.4.35 mod_unload ARMv7 p2v8 '

한동안 구글링해서 찾아낸이것해결책. 그 후 모듈이 성공적으로 로드되지만 /dev/net/tun실행을 읽거나 쓰려고 하면 분할 오류로 인해 충돌이 발생하고 tincd정의되지 않은 오류로 끝나기 시작합니다.

그렇다면 내 카메라용 TUN/TAP 드라이버를 구축하는 방법에 대한 아이디어가 있습니까?

폴리스티렌

~ # dmesg | head -n 10
Booting Linux on physical CPU 0
Linux version 3.4.35 (root@wang) (gcc version 4.8.3 20131202 (prerelease) (Hisilicon_v300) ) #3 Mon Aug 10 15:39:44 CST 2015
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: hi3516a
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 32768
free_area_init_node: node 0, pgdat c04c0878, node_mem_map c04e0000
  Normal zone: 256 pages used for memmap
  Normal zone: 0 pages reserved

동일한 버전의 컴파일러와 Linux 커널을 사용합니다.

~ # cat /proc/cpuinfo 
Processor       : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 1196.85
Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5

Hardware        : hi3516a
Revision        : 0000
Serial          : 0000000000000000

ARM Cortex-A7용 크로스 컴파일을 빌드하고 이를 사용하여 Linux 커널을 컴파일하기 위해 buildroot를 사용해 보았지만 결과가 없습니다.

미리 감사드립니다.

관련 정보