天天看點

click在linksys wrt1200AC平台上的交叉編譯

注意這是在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. 指定openwrt的toolchain工具的gcc和g++:
  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相關代碼拷貝到click的elements/local檔案夾下:
  1. 回到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

  1. 嘗試在SDK裡編譯成ipk,仍然失敗,待分析。

下一步,燒制openwrt,将交叉編譯成功後的MFclick上傳,嘗試運作。

LinksysWRT1200AC

注:下載下傳openwrt15.05的trunk開發版,配置核心如下:

click在linksys wrt1200AC平台上的交叉編譯

編譯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!

繼續閱讀