1.平台
MT7628

2.交叉编译器及版本信息
mipsel-linux + buildroot-gcc463_32bits.tar.bz2

3.创建工作目录
lancer@ubuntu:~$ mkdir -p tr069/usr

lancer@ubuntu:~/tr069/usr$ pwd
/home/lancer/tr069/usr

4.移植json-c -----------------------------------------------------------------------------------------------
root@ubuntu:/home/lancer/tr069# git clone git://github.com/json-c/json-c.git
cd json-c

Generate configuration files:
# sh autogen.sh

Configure:
# ./configure --prefix=/home/lancer/tr069/usr --host=mipsel-linux

# make
# make install
# ln -sf /home/lancer/tr069/usr/include/json-c /usr/include/json

5.移植libubox ----------------------------------------------------------------------------------------------
root@ubuntu:/home/lancer/tr069# git clone git://nbd.name/luci2/libubox.git
cd libubox

Configure:
vim CMakeLists.txt #在前边添加如下配置,注意是最前边
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "mipsel-linux-gcc")
SET(CMAKE_CXX_COMPILER "mipsel-linux-g++")
INCLUDE_DIRECTORIES("/home/lancer/tr069/usr/include/")
INCLUDE_DIRECTORIES("/home/lancer/tr069/usr/include/json-c")
LINK_DIRECTORIES("/home/lancer/tr069/usr/lib")

(cmake如何清除编译缓存,root@ubuntu:/home/lancer/tr069/libubox# rm CMakeCache.txt)
root@ubuntu:/home/lancer/tr069/libubox# cmake CMakeLists.txt -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=/home/lancer/tr069/usr
-- The C compiler identification is GNU
-- Check for working C compiler: /opt/buildroot-gcc463/usr/bin/mipsel-linux-cc
-- Check for working C compiler: /opt/buildroot-gcc463/usr/bin/mipsel-linux-cc -- works #说明添加OK

Build:
root@ubuntu:/home/lancer/tr069/libubox# make
Scanning dependencies of target ubox
[ 3%] Building C object CMakeFiles/ubox.dir/avl.c.o
[ 6%] Building C object CMakeFiles/ubox.dir/avl-cmp.c.o
[ 9%] Building C object CMakeFiles/ubox.dir/blob.c.o
[ 12%] Building C object CMakeFiles/ubox.dir/blobmsg.c.o
[ 16%] Building C object CMakeFiles/ubox.dir/uloop.c.o
[ 19%] Building C object CMakeFiles/ubox.dir/usock.c.o
[ 22%] Building C object CMakeFiles/ubox.dir/ustream.c.o
[ 25%] Building C object CMakeFiles/ubox.dir/ustream-fd.c.o
[ 29%] Building C object CMakeFiles/ubox.dir/vlist.c.o
[ 32%] Building C object CMakeFiles/ubox.dir/utils.c.o
[ 35%] Building C object CMakeFiles/ubox.dir/safe_list.c.o
[ 38%] Building C object CMakeFiles/ubox.dir/runqueue.c.o
[ 41%] Building C object CMakeFiles/ubox.dir/md5.c.o
[ 45%] Building C object CMakeFiles/ubox.dir/ulog.c.o
Linking C shared library libubox.so
[ 45%] Built target ubox
Scanning dependencies of target blobmsg_json
[ 48%] Building C object CMakeFiles/blobmsg_json.dir/blobmsg_json.c.o
In file included from /home/lancer/tr069/libubox/blobmsg_json.c:17:0:
/home/lancer/tr069/libubox/blobmsg_json.h:22:24: fatal error: json/json.h: No such file or directory
compilation terminated.
make[2]: *** [CMakeFiles/blobmsg_json.dir/blobmsg_json.c.o] Error 1
make[1]: *** [CMakeFiles/blobmsg_json.dir/all] Error 2
make: *** [all] Error 2
解决方案:
我们前边已经包含了头文件路径,"/home/lancer/tr069/usr/include/json-c",把所有"json/json.h",改为"json.h"再重新编译
/home/lancer/tr069/libubox/blobmsg_json.c: In function '__blobmsg_add_json':
/home/lancer/tr069/libubox/blobmsg_json.c:78:2: error: implicit declaration of function 'is_error' [-Werror=implicit-function-declaration]
cc1: all warnings being treated as errors
make[2]: *** [CMakeFiles/blobmsg_json.dir/blobmsg_json.c.o] Error 1
make[1]: *** [CMakeFiles/blobmsg_json.dir/all] Error 2
make: *** [all] Error 2
解决方案:
vim blobmsg_json.c +78添加头文件
#include "bits.h"重新编译OK

Install:
sudo make install
sudo ln -sf /usr/local/lib/libubox.so /usr/lib/libubox.so
sudo mkdir -p /usr/share/libubox
sudo ln -sf /usr/local/share/libubox/jshn.sh /usr/share/libubox/jshn.sh

6.移植uci--------------------------------------------------------------------------------------------------
Get the sources:
lancer@ubuntu:~/tr069$ git clone git://nbd.name/uci.git
cd uci

Configure:
vim CMakeLists.txt #在前边添加如下配置,注意是最前边
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "mipsel-linux-gcc")
SET(CMAKE_CXX_COMPILER "mipsel-linux-g++")
INCLUDE_DIRECTORIES("/home/lancer/tr069/usr/include/")
LINK_DIRECTORIES("/home/lancer/tr069/usr/lib")
root@ubuntu:/home/lancer/tr069/uci# cmake CMakeLists.txt -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=/home/lancer/tr069/usr2

Build:
make

Install:
class="western"
sudo make install
sudo ln -sf /usr/local/bin/uci /sbin/uci
sudo ln -sf /usr/local/lib/libuci.so /usr/lib/libuci.so

7.移植ubus-------------------------------------------------------------------------------------------------
Get the sources:
root@ubuntu:/home/lancer/tr069# git clone git://nbd.name/luci2/ubus.git
cd ubus

Configure:
vim CMakeLists.txt #在前边添加如下配置,注意是最前边
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "mipsel-linux-gcc")
SET(CMAKE_CXX_COMPILER "mipsel-linux-g++")
INCLUDE_DIRECTORIES("/home/lancer/tr069/usr/include/")
INCLUDE_DIRECTORIES("/home/lancer/tr069/usr/include/json-c")
LINK_DIRECTORIES("/home/lancer/tr069/usr/lib")
root@ubuntu:/home/lancer/tr069/ubus# cmake CMakeLists.txt -DBUILD_LUA=OFF -DCMAKE_INSTALL_PREFIX=/home/lancer/tr069/usr

Build:
make

Install:
sudo make install
sudo ln -sf /usr/local/sbin/ubusd /usr/sbin/ubusd
sudo ln -sf /usr/local/lib/libubus.so /usr/lib/libubus.so

8.移植microxml---------------------------------------------------------------------------------------------
Get the sources:
root@ubuntu:/home/lancer/tr069# git clone https://github.com/pivasoftware/microxml.git
cd microxml

Generate configuration files:
root@ubuntu:/home/lancer/tr069/microxml# autoconf -i

Configure:
root@ubuntu:/home/lancer/tr069/microxml# ./configure --prefix=/home/lancer/tr069/usr --host=mipsel-linux --enable-threads --enable-shared --enable-static

Build:
make

Install:
sudo make install
sudo ln -sf /usr/lib/libmicroxml.so.1.0 /lib/libmicroxml.so
sudo ln -sf /usr/lib/libmicroxml.so.1.0 /lib/libmicroxml.so.1

9.移植curl
下载:https://curl.haxx.se/download.html :curl-7.53.1.tar.gz
cd curl-7.53.1

Configure:
root@ubuntu:/home/lancer/tr069/curl-7.53.1# ./configure --prefix=/home/lancer/tr069/usr --host=mipsel-linux

Build:
make

Install:
sudo make install

10.移植easycwmp-----------------------------------------------------------------------------------------------
官网下载:http://www.easycwmp.org/download.html : 我选择easycwmp-1.5.2.tar.gz
cd easycwmp-1.5.2

Generate configuration files:
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# autoreconf -i

Configure:
./configure --prefix=/home/lancer/tr069/usr --host=mipsel-linux --enable-debug --enable-devel --enable-acs=multi --enable-jsonc=1 --x-includes=/home/lancer/tr069/usr/include/ --x-libraries=-L/home/lancer/tr069/usr/lib
......
checking for LIBCURL... no
configure: error: Package requirements (libcurl) were not met:

Package libcurl was not found in the pkg-config search path.
Perhaps you should add the directory containing `libcurl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libcurl' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBCURL_CFLAGS
and LIBCURL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
解决方案:
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# PKG_CONFIG_PATH=/home/lancer/tr069/usr//lib/pkgconfig:$PKG_CONFIG_PATH
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# export PKG_CONFIG_PATH
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# echo $PKG_CONFIG_PATH
/home/lancer/tr069/usr//lib/pkgconfig:
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# ./configure --prefix=/home/lancer/tr069/usr --host=mipsel-linux --enable-debug --enable-devel --enable-acs=multi --enable-jsonc=1
OK
或者vim /opt/buildroot-gcc463/usr/bin/pkg-config修改
#!/bin/sh
#PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/lib/pkgconfig:/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/share/pkgconfig} PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR:-/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot} $(dirname $0)/pkgconf $@
PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-/home/lancer/tr069/usr/lib/pkgconfig:/home/lancer/tr069/usr/share/pkgconfig} PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR:-} $(dirname $0)/pkgconf $@
为PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-/home/lancer/tr069/usr/lib/pkgconfig:/home/lancer/tr069/usr/share/pkgconfig} PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR:-/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot} $(dirname $0)/pkgconf $@
当然第二种更好,不然编译还会有如下问题。

Build:
make
root@ubuntu:/home/lancer/tr069/easycwmp-1.5.2# make
Making all in bin
make[1]: Entering directory `/home/lancer/tr069/easycwmp-1.5.2/bin'
mipsel-linux-gcc -DPACKAGE_NAME=\"easycwmpd\" -DPACKAGE_TARNAME=\"easycwmpd\" -DPACKAGE_VERSION=\"1.5.2\" -DPACKAGE_STRING=\"easycwmpd\ 1.5.2\" -DPACKAGE_BUGREPORT=\"mohamed.kallel@pivasoftware.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"easycwmpd\" -DVERSION=\"1.5.2\" -DPACKAGE=\"easycwmpd\" -DVERSION=\"1.5.2\" -DJSONC=1 -DDEBUG=1 -DDEVEL=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -I. -I/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot/home/lancer/tr069/usr/include -D_THREAD_SAFE -D_REENTRANT -I/opt/buildroot-gcc463/usr/mipsel-buildroot-linux-uclibc/sysroot/home/lancer/tr069/usr/include -g -O2 -MT ../src/easycwmpd-backup.o -MD -MP -MF ../src/.deps/easycwmpd-backup.Tpo -c -o ../src/easycwmpd-backup.o `test -f '../src/backup.c' || echo './'`../src/backup.c
In file included from ../src/backup.c:13:0:
../src/backup.h:15:22: fatal error: microxml.h: No such file or directory
compilation terminated.
make[1]: *** [../src/easycwmpd-backup.o] Error 1
make[1]: Leaving directory `/home/lancer/tr069/easycwmp-1.5.2/bin'
make: *** [all-recursive] Error 1
看前边。

自此,tr069相关库及程序都已交叉编译完毕。

tr069开源协议EasyCwmp移植的更多相关文章

  1. tr069开源代码——cwmp移植

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...

  2. 聊聊 Apache 开源协议

    摘要 用一句话概括 Apache License 就是,你可以用这代码,但是如果开源你必须保留我写的声明:你可以改我的代码,但是如果开源你必须写清楚你改了哪些:你可以加新的协议要求,但不能与我所 公布 ...

  3. 五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    什么是许可协议? 什么是许可,当你为你的产品签发许可,你是在出让自己的权利,不过,你仍然拥有版权和专利(如果申请了的话),许可的目的是,向使用你产品的人提供 一定的权限. 不管产品是免费向公众分发,还 ...

  4. [转]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    当Adobe.Microsoft.Sun等一系列巨头开始表现出对"开源"的青睐时,"开源"的时代即将到来!现今存在的开源协议很多,而经过Open Source ...

  5. 四大开源协议比较:BSD、Apache、GPL、LGPL (转)

    转自:http://www.lupaworld.com/portal.php?mod=view&aid=205552&page=all 本文参考文献:http://www.fsf.or ...

  6. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    当Adobe.Microsoft.Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来!现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协 ...

  7. 五种开源协议的比较(BSD_Apache_GPL_LGPL_MIT)

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses/alphabetic ...

  8. 四大开源协议:BSD、Apache、GPL、LGPL

    参考文献:http://www.fsf.org/licensing/licenses/ 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种.我 ...

  9. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)

    BSD开源协议(original  BSD license.FreeBSD  license.Original  BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...

随机推荐

  1. NAT穿透进行P2P文件传输

    实现一个简单的p2p文件传输,主要解决NAT穿透问题,使用tcp协议传输. NAT背景介绍 简介 NAT(Network Address Translation ,网络地址转换) 是一种广泛应用的解决 ...

  2. linux的文件权限小结

    对于初接触Linux的朋友来说,会有各种不习惯和各种昏头,文件的权限就很让人不知所措. ls命令以及字段含义 比如我们列出当前目录文件: 我们来看下上述大致含义: 第1行显示的信息: 总用量(tota ...

  3. Java面试14|Session与Cookie

    1.在分布式环境,管理Session通常使用下面三种方式: (1)Session Replication 方式管理 (即session复制) 将一台机器上的Session数据广播复制到集群中其余机器上 ...

  4. Macaca 自动化框架 [Python 系列]

    介绍 Macaca是一套完整的自动化测试解决方案,基于node.js开发.由阿里巴巴公司开源: 地址:http://macacajs.github.io/macaca/ 特点: 同时支持PC端和移动端 ...

  5. Rotate Array leetcode

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  6. KoaHub.js:使用ES6/7特性开发Node.js框架

    KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...

  7. 1036: [ZJOI2008]树的统计Count

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7496  Solved: 3078[Submit] ...

  8. UITextField输入限制/小数/首位等

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementS ...

  9. Android: Fragment (Trying to instantiate a class that is not a Fragment)

    Fragments API: https://developer.android.com/guide/components/fragments.html 第一次使用Fragment遇到一个问题就是: ...

  10. 在LaTeX 与 LyX 中设置“Contents”为“目录”

    在 LaTeX 中,目录一般被显示为英文"Contents",因此需要设置成"目录". 通常在 Preamble 按照如下方式设置: \renewcommand ...