click在linksys wrt1200AC平台上的交叉编译

来源:互联网 发布:淘宝店身份认证复核 编辑:程序博客网 时间:2024/06/05 11:27

注意这是在openwrt14.07上编译click的过程,Linksyswrt1200AC平台见后面,但整个交叉编译的过程参考此过程。


Openwrt14.07 NETGEAR平台上编译click

  1. 准备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

  1. 指定openwrttoolchain工具的gccg++

  1. 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

  2. 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++

  3. exportPATH=$PATH:/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/

  4. exportSTAGING_DIR=/home/ubuntu/trunk14.07/trunk/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_uClibc-0.9.33.2/

  1. 下载click源码:

gitclone git://github.com/kohler/click.git

cdclick

gitcheckout v2.0.1

  1. 交叉编译

  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/

  2. Make

注意make后接近成功时报如下错,说明工具click-mkmindriver没有链接成功,不过这个工具并不影响我们的使用,此时click可执行程序已经在userlevel文件夹下了,可以直接使用click.(可以在click源码的tools下删除click-mkmindriver)

  1. MobilityFirst0.1.1源码中的router相关代码拷贝到clickelements/local文件夹下:

  1. 回到click_2.0.1目录下,执行步骤4configuremake步骤。

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/

重新configuremake:

此时可以看到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/"

重新configuremake,成功!

Makeinstall

  1. 尝试在SDK里编译成ipk,仍然失败,待分析。

下一步,烧制openwrt,将交叉编译成功后的MFclick上传,尝试运行。







LinksysWRT1200AC

注:下载openwrt15.05trunk开发版,配置内核如下:


编译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主体程序)

重新configuremake。成功!

(SDK中也可以feed后安装相关依赖,然后进行编译)

Linksys安装https://wiki.openwrt.org/toh/linksys/wrt1200ac提供的https://downloads.openwrt.org/snapshots/trunk/mvebu/generic/镜像(和我编译的一致,15.07),安装完毕后,

1ssh登陆进去,然后安装基于Luciweb界面:

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!


0 0