注意这是在openwrt14.07上编译click的过程,Linksyswrt1200AC平台见后面,但整个交叉编译的过程参考此过程。
Openwrt14.07 NETGEAR平台上编译click:
-
准备openwrt环境
sudoapt-get install build-essential subversion git-core libncurses5-devzlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perlmercurial bzr ecj cvs unzip
下载openwrt版本:gitclone git://git.openwrt.org/14.07/openwrt.git trunk
./scripts/feedsupdate -a //更新扩展
./scripts/feedsinstall -a //安装扩展
makedefconfig //测试编译环境
makemenuconfig //编译固件,进入定制界面
(注意别忘记选择libraries/ssl/libopenssl,后面的MF会用到)
Notice:配置内核:
TargetSystem–>AtherosAR9XXX //主芯片,cpu型号
TargetProfile–>NETGEARWNDR3800 //路由器型号
选择Toolchain;
select build SDK
-
指定openwrt的toolchain工具的gcc和g++:
-
exportCC=/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc
-
exportCXX=/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-g++
-
exportPATH=$PATH:/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/
-
exportSTAGING_DIR=/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/
-
下载click源码:
gitclone git://github.com/kohler/click.git
cdclick
gitcheckout v2.0.1
-
交叉编译
-
./configure--disable-linuxmodule --enable-local --enable-user-multithread--host=mips-unknown-elf --build=mips--prefix=/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/--with-linux=/home/ubuntu/trunk14.07/trunk/build_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/linux/
-
Make
注意make后接近成功时报如下错,说明工具click-mkmindriver没有链接成功,不过这个工具并不影响我们的使用,此时click可执行程序已经在userlevel文件夹下了,可以直接使用click.(可以在click源码的tools下删除click-mkmindriver)
-
将MobilityFirst0.1.1源码中的router相关代码拷贝到click的elements/local文件夹下:
-
回到click_2.0.1目录下,执行步骤4的configure和make步骤。
make步骤会报MF的代码找不到openssl的相关头文件。
因为步骤1中选择安装了libopenssl,我们在openwrt目录下查找文件:
发现在staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include/文件下。
将此路径添加到c++和C的头文件搜索路径:
export CPLUS_INCLUDE_PATH=$ CPLUS_INCLUDE_PATH:/home/ubuntu/trunk14.07/trunk/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include/
export C_INCLUDE_PATH=$ C_INCLUDE_PATH:/home/ubuntu/trunk14.07/trunk/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/include/
重新configure并make:
此时可以看到MF的代码已编译通过,在链接动态库libcrypto时出现问题,找不到库。
此时查找libcrypto.so的路径:
将此路径加入到LDFLAGS,是的ld链接动态库可以查找到这个文件路径:
exportLDFLAGS="-L/home/ubuntu/trunk14.07/trunk/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib/"
重新configure并make,成功!
Makeinstall
-
尝试在SDK里编译成ipk,仍然失败,待分析。
下一步,烧制openwrt,将交叉编译成功后的MFclick上传,尝试运行。
LinksysWRT1200AC
注:下载openwrt15.05的trunk开发版,配置内核如下:
编译openwrt参照上页,交叉编译工具的环境变量设置参考上一页,编译click+MF步骤参照上页,./configure修改为如下:
[1]./configure--disable-linuxmodule --enable-local --enable-user-multithread--target=arm-openwrt-linux --host=arm-openwrt-linux--build=i686-linux-gnu--prefix=/home/ubuntu/openwrt/trunk/trunk/staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-5.2.0_musl-1.1.11_eabi/--with-linux=/home/ubuntu/openwrt/trunk/trunk/build_dir/toolchain-arm_cortex-a9+vfpv3_gcc-5.2.0_musl-1.1.11_eabi/linux/
[2]遇到
在include/click/llrpc.h添加:
//addby jjc
#ifndef_IOC_NRBITS
#define_IOC_NRBITS 8
#endif
#ifndef_IOC_TYPEBITS
#define_IOC_TYPEBITS 8
#endif
#ifndef_IOC_SIZEBITS
#define_IOC_SIZEBITS 14
#endif
#ifndef_IOC_DIRBITS
#define _IOC_DIRBITS 2
#endif
#ifndef _IOC_NRMASK
#define_IOC_NRMASK ((1 << _IOC_NRBITS)-1)
#endif
#ifndef_IOC_TYPEMASK
#define_IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
#endif
#ifndef_IOC_SIZEMASK
#define_IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
#endif
#ifndef_IOC_DIRMASK
#define_IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
#endif
#ifndef_IOC_NRSHIFT
#define_IOC_NRSHIFT 0
#endif
#ifndef_IOC_TYPESHIFT
#define_IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
#endif
#ifndef_IOC_SIZESHIFT
#define_IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
#endif
#ifndef_IOC_DIRSHIFT
#define_IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
#endif
//endby jjc
进入文件,注释掉此头文件。
elements/userlevel/todevice.cc也会报这个错误,注释掉此头文件。
编译click-mkmindriver错误,进入tools文件夹,删掉click-mkmindriver(不影响click主体程序)
重新configure、make。成功!
(SDK中也可以feed后安装相关依赖,然后进行编译)
Linksys安装https://wiki.openwrt.org/toh/linksys/wrt1200ac提供的https://downloads.openwrt.org/snapshots/trunk/mvebu/generic/镜像(和我编译的一致,15.07),安装完毕后,
【1】ssh登陆进去,然后安装基于Luci的web界面:
opkgupdate
opkginstall luci-ssl
/etc/init.d/uhttpdenable
/etc/init.d/uhttpdstart
然后便可以192.168.1.1登陆网页管理界面。
【2】开启ftp服务,用于传输文件
opkginstall vsftpd openssh-sftp-server
/etc/init.d/vsftpdenable
/etc/init.d/vsftpdstart
【3】上传交叉编译好的click相关文件,安装相关依赖软件:
opkginstall libopenssl
opkginstall libpcap
opkginstall libstdcpp
ok!