对于当前不在OpenWRT repository中的软件,如果是用源码形式发布的,那么可以用OpenWRT Buildroot进行交叉编译。
- 首先编译好Buildroot(一般编译过一次固件,就已经编译好了)
- 找到目录staging_dir/toolchain-architecture_gcc-complierver_uClibc-libcver/bin/
- 把它加入到环境变量PATH:
PATH=$PATH(上面提到的目录)
export PATH
- 把环境变量STAGING_DIR设置为上面提到的toolchain目录:
STAGING_DIR=toolchain目录
export STAGING_DIR
- 设置编译设置中的一些参数,我这里用到的是修改makefile:
make CC=architecture-openwrt-linux-uclibc-gcc LD=architecture-openwrt-linux-uclibc-ld
- 如果缺一些头文件或者库文件,那么需要修改CFLAGS和LDFLAGS,让它们指向staging_dir/target-architecture_uClibc-libcver/usr/include和.../usr/lib目录
编译单独的安装包
- 首先make menuconfig,在里面选择好需编译的软件包和它依赖的库。
- 然后make tools/install
make toolchain/install
- 最后就可以编译需要的软件了:
make package/***/compile
make package/***/install
make package/***/index
这时就可以在bin目录下找到软件的安装包了。
(最后一个make index不知道是什么东西,不运行已经能在bin下找到.ipk了)
这次主要是路由器又出问题了,于是重新编译了一下固件(TP720的),发现认证上不去网,于是尝试交叉编译xd-h3c,还是不行,然后编译了个tcpdump装到路由上,抓包,现象很诡异,好像路由器的处理器老化了一样,收到包后很久才回复。可能是驱动出 了问题?不知道。。最后等了很久就认证成功了。
当时折腾得烦得很,差点一怒之下买个树莓派或者cubieboard,不想再忍受这种痛苦了。
当穷学生就是惨,以后工作了应该能使劲折腾了。
期间看了下8021.X协议。这个协议主要是用来认证的,单说以太网上面,它把一个物理端口划分为逻辑上的两个端口,其中一个用来认证,所有的认证包都能通过,另一个用来发送正常的数据包,但是只有当认证成功了的时候那个端口才开放。