交叉编译armv7的tun/tap设备驱动

交叉编译armv7的tun/tap设备驱动

我有多个来自中国的基于 Hi3516A SOC 的网络摄像机。它们运行良好,我想使用 VPN 访问它们。我决定在相机上安装,tinc-vpn因为我可以使用 telnet 完全访问相机的外壳。

好吧,使用 buildroot 我已经成功创建了交叉编译工具链并构建了tinc。但 tinc 需要支持 tun/tap 设备,而相机默认不支持这些设备。所以,使用dmesguname -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

我尝试使用 buildroot 为 ARM Cortex-A7 构建交叉编译并用它编译 linux 内核,但没有结果。

提前致谢。

相关内容