linux 编译iptables1.62 并移植arm
可以参考博客:【embedded】iptables移植到ARM Linux教程
下载源码 iptables-1.6.2.tar.bz2 :https://www.netfilter.org/pub/iptables/
1.解压文件:
tar jxvf iptables-1.6.2.tar.bz2
2.在总的编译文件/mtk7561/apps/private/make_apps框架下末尾加入
ifeq ($(strip $(TCSUPPORT_TOZED_OUT)), y)
iptables162:
echo -e "\033[1;34mBuild iptabels-1.6.2\033[0m"
cd $(APP_IPTABLES162_DIR) && ./configure --host=$(COMPILE_TOOLCHAIN) --prefix=$(APP_IPTABLES162_DIR)/my_install --enable-static \
--disable-shared --disable-nftables --with-kernel=$(IPTABLE_KERNEL_DIR)
make -C $(APP_IPTABLES162_DIR) CC=$(CROSS)gcc AR=$(CROSS)ar RANLIB=$(CROSS)ranlib LD=$(CROSS)ld clean
make -C $(APP_IPTABLES162_DIR) CC=$(CROSS)gcc AR=$(CROSS)ar RANLIB=$(CROSS)ranlib LD=$(CROSS)ld
make -C $(APP_IPTABLES162_DIR) CC=$(CROSS)gcc AR=$(CROSS)ar RANLIB=$(CROSS)ranlib LD=$(CROSS)ld install
if test -e $(APP_IPTABLES162_DIR)/my_install/sbin/xtables-multi; \
then echo "Compile iptables 1.6.2 success"; \
else echo "Compile iptables 1.6.2 error!"; exit 1; \
fi
$(STRIP) --strip-unneeded $(APP_IPTABLES162_DIR)/my_install/sbin/xtables-multi; \
cp -fd $(APP_IPTABLES162_DIR)/my_install/sbin/* $(FILESYSTEM_DIR)/usr/bin/
else
endif
在/mtk7561/Project/dir.mak加入:
APP_IPTABLES162_DIR=$(APP_PUBLIC_DIR)/iptables-1.6.2
export APP_IPTABLES162_DIR
3.编译执行报错,提示错误:‘union bpf_attr’没有名为‘pathname’的成员,错误:‘BPF_OBJ_GET’未声明(在此函数内第一次使用)。
./cool 1 iptables162
解决办法:
删掉libxt_bpf.c文件
4.报错 Fatal: can’t open lock file /run/xtables.lock: No such file or directory
解决办法:到源码里修改该路径,因为我板子里并没有/run目录
修改路径为/tmp/var/lock/
再次运行:成功了
题外话:如何找到交叉编译工具链
最简单的方法是随便编个程序打印出来
在总的编译文件/mtk7561/apps/private/make_apps框架下末尾加入:
xxno:
@echo -e "交叉编译工具链:\033[1;34m$(COMPILE_TOOLCHAIN)\033[0m"
makefile中,怎么忽略报错,命令执行前加 -,怎么不打印具体执行了命令前面加 @ 。
即可找到交叉编译工具链 mipsel-buildroot-linux-uclibc
/opt/mtk7561/mipsel-linux-uclibc-4.6.3-kernel3.18/usr/bin/mipsel-buildroot-linux-uclibc-gcc -mips32r2 -msoft-float
/opt/mtk7561/mipsel-linux-uclibc-4.6.3-kernel3.18/usr/bin/mipsel-buildroot-linux-uclibc-g++ -mips32r2 -msoft-float
同理打印下$(STRIP) ,该指令可以大大缩减文件大小,据说是减少调试信息。
xxno:
@echo -e "交叉编译工具链STRIP:\033[1;34m$(STRIP)\033[0m"
即可找到 : mipsel-buildroot-linux-uclibc-strip
移植ipset和libmnl.so
1.将ipset复制到/home/xiening/mtk7561/filesystem/usr/bin
chmod +x ipset
2.复制libmnl.so.0.2.0到/home/xiening/mtk7561/filesystem/lib
chmod 777 libmnl.so.0.2.0
ln -sf libmnl.so.0.2.0 libmnl.so
ln -sf libmnl.so.0.2.0 libmnl.so.0