声明:本文是对开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流。(企鹅号:408797506)

本文所有笔记和代码可以到csdn下载:http://download.csdn.net/detail/eryunyong/9590036

一. linux上安装

为了更好理解easycwmp运行机制和以及部署在各类linux内核的操作系统环境,我们选择官网的第二种安装方法。

(1)       linux系统:Ubuntu 12.04

(2)       安装EasyCwmp所需要的依赖:(若安装过程提示找不到安装包,请到官网更新Ubuntu源:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8)

libcurl :

libuci

json-c:可能会遇到版本问题,后附解决放案.

libubox

libubus

libmicroxml:下载地址 http://easycwmp.org/download/libmicroxml.tar.gz

1. general安装

参考官网,在/opt/目录下创建git和dev两个目录。并赋予用户操作权限
为了省去sudo麻烦,后面所有操作可以直接使用root用户进行安装

2.  curl安装

安装说明:
这里暂时不安装curl工具,因为我们需要用curl进行编程,所以重点会介绍如何在c程序里使用curl提供的API接口。
如果喜欢curl命令行工具,可以使用命令安装: sudo apt-get install curl
后续如果有必要,再安装该工具

1.
sudo apt-get install libcurl4-openssl-dev   (官网 Note: If you build
libcurl with an SSL package dependency, then it is recommended to build
with OpenSSL since EasyCwmp was mainly tested with libcurl using
OpenSSL.)

提示:最后出现ldconfig deferred processing now taking place: 编写测试程序若出现找不到curl文件,最好重启生效。

2. 测试curl程序

参考:http://blog.csdn.net/u011641885/article/details/46900771

#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
CURL *curl; //定义CURL类型的指针
CURLcode res; //定义CURLcode类型的变量,保存返回状态码
if(argc!=2)
{
printf("Usage : file <url>;/n");
exit(1);
} curl = curl_easy_init(); //初始化一个CURL类型的指针
if(curl!=NULL)
{
//设置curl选项. 其中CURLOPT_URL是让用户指定url. argv[1]中存放的命令行传进来的网址
curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
//调用curl_easy_perform 执行我们的设置.并进行相关的操作. 在这里只在屏幕上显示出来.
res = curl_easy_perform(curl);
//清除curl操作.
curl_easy_cleanup(curl);
}
return 0;
}

3. json安装

0.依赖libtool
apt-get install libtool

1.get source
git clone git://github.com/json-c/json-c.git /opt/git/json-c
cd /opt/git/json-c/

2.Generate configuration files:
必须保证libtool工具已经安装好
./autogen.sh

3. Configure:
./configure

4.build & install
make
make install
ln -sf /usr/local/include/json-c /usr/include/json

4. libubox安装

0. 依赖工具包cmake
apt-get install cmake

1. 获取源码
git clone git://nbd.name/luci2/libubox.git /opt/git/libubox
cd /opt/git/libubox/

2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF

遇到提示:package 'json' not found
只要json路径默认安装在/usr/local/include
可以不用担心该提示

3. 编译安装
make
遇到错误:
blobmsg_json.c:78:2 error: implicit declaration of function 'is_error'
jshn.c:162:2: error: implicit declaration of function 'is_error'
解决办法:
对应的文件里加入下面定义
#define is_error(ptr) (ptr == NULL)

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

5. uci安装

1. 获取源码
git clone git://nbd.name/uci.git /opt/git/uci
cd /opt/git/uci/

2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF

3. 编译安装
make

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

6. ubus安装

1. 获取源码
git clone git://nbd.name/luci2/ubus.git /opt/git/ubus
cd /opt/git/ubus/

2. 配置
cmake CMakeLists.txt -DBUILD_LUA=OFF
提示: package 'systemd' not found
可以不用担心该提示

3. 编译安装
make

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

7. microxml安装

1. 获取源码
git clone https://github.com/pivasoftware/microxml.git /opt/git/microxml
cd /opt/git/microxml/

2. 配置
autoconf -i
./configure --prefix=/usr --enable-threads --enable-shared --enable-static

3. 编译安装
make
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

8.easycwmp安装

1. 获取源码
cd /opt/dev/
wget http://easycwmp.org/download/easycwmp-{x}.{y}.{z}.tar.gz
tar -xzvf easycwmp-{x}.{y}.{z}.tar.gz
mv easycwmp-{x}.{y}.{z} easycwmp
cd /opt/dev/easycwmp/

2. 配置
autoconf -i
./configure --enable-debug --enable-devel --enable-jsonc=1

3. 编译安装
make

4. 准备配置开发环境
4.1 创建脚本存放目录
mkdir -p /usr/share/easycwmp/functions
mkdir -p /etc/easycwmp

4.2 创建easycwmp脚本运行的符号链接

ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/easycwmp.sh /usr/sbin/easycwmp
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/defaults /usr/share/easycwmp/defaults
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/common /usr/share/easycwmp/functions/common
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/device_info /usr/share/easycwmp/functions/device_info
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/lan_device /usr/share/easycwmp/functions/lan_device
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/management_server /usr/share/easycwmp/functions/management_server
ln -sf /opt/dev/easycwmp/ext/openwrt/scripts/functions/management_server /usr/share/easycwmp/functions/management_server

4.3 创建easycwmp配置文件的符号链接
 mkdir /etc/config
 ln -sf /opt/dev/easycwmp/ext/openwrt/config/easycwmp /etc/config/easycwmp
4.4 创建easycwmpd进程的符号链接
 ln -sf /opt/dev/easycwmp/bin/easycwmpd /usr/sbin/easycwmpd

4.5 export 在easycwmp脚本运行的环境变量
export UCI_CONFIG_DIR="/opt/dev/easycwmp/ext/openwrt/config/"
export UBUS_SOCKET="/var/run/ubus.sock"

4.6 使用Openwrt脚本测试是否easycwmp安装成功?
sudo mkdir -p /lib/{config,functions}
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_functions.sh -O /lib/functions.sh
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_config_uci.sh -O /lib/config/uci.sh
sudo wget http://pastebin.lukaperkov.net/openwrt/20121219_lib_functions_network.sh -O /lib/functions/network.sh

bash /usr/sbin/easycwmp get value InternetGatewayDevice.

遇到错误:: 未有任何输出,解决办法参考下一步遇到的错误

4.7 运行easycwmp
export PATH=$PATH:/usr/sbin:/sbin
ln -sf bash /bin/sh
/usr/sbin/ubusd -s /var/run/ubus.sock &
/usr/sbin/easycwmpd -f -b

遇到错误:: error while loading shared libraries: libjson-c.so.3: cannot open shared object file: No such file or directory
解决办法:如果严格按照我的步骤,你会出现找不到libjson库的问题,因为在安装libjson的时候默认安装到/usr/local/lib/路径下面,所以创建软连接指向这里即可:
ln -sf /usr/local/lib/libjson-c.so.3.0.0 /usr/lib/libjson-c.so.3

二. 使用openacs测试

1. 设置acs url
vi  /etc/config/easycwmp
修改acs url一行为如下
 option url http://ip:8080/openacs/acs

2.打开openacs
http://ip:8080/openacs
在FindCPE下面看到设备型号,输入序列号即可进行操作

. 代码阅读

初步阅读代码,未发现该开源代码有什么优势,这也许就是商业和非商业的区别。
而且在官网上,人家也说了:Data
Model部分,shell写的是开源,随便你们蹂躏,C写的才是商业机密,性能比你shell吊炸天!!!!要的就是你在shell里面痛苦,再找我要商业版的,^_^,外国犊子够奸诈了吧!!!!

有空我也写个商业版的cwmp,而且要比他还牛逼,我要支持多平台的,不仅仅是linux,那就赶紧众筹我吧,哈哈,让我有更多的时间来写一个吊炸天的程序给你们用。

参考:http://www.easycwmp.org/index.php/manual

CWMP开源代码研究2——easycwmp安装和学习的更多相关文章

  1. CWMP开源代码研究——git代码工程

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

  2. CWMP开源代码研究1——开篇之作

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

  3. CWMP开源代码研究5——CWMP程序设计思想

    声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...

  4. CWMP开源代码研究——cwmp移植

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

  5. CWMP开源代码研究7——cwmp移植

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

  6. CWMP开源代码研究3——ACS介绍

    声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...

  7. CWMP开源代码研究6——libcwmp动态库开发

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 为了使程序具有通用性,便于扩展和维护.采用了"模块"插入的思想.将设备业务相 ...

  8. CWMP开源代码研究4——认证流程

    TR069 Http Digest 认证流程   一 流程及流程图 1.1盒端主动发起Http Digest认证流程  盒端CPE                                    ...

  9. CWMP开源代码研究——stun的NAT穿透

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 参考: http://www.cnblogs.com/myblesh/p/6259765.htm ...

随机推荐

  1. Java初始化顺序

    package com.helei.init; class Log { public static String fatherStaticString(){System.out.println(&qu ...

  2. eclipse js 报错解决办法

    最近项目中的js一直红叉叉,本人本来就是那种看见回收站有东西想清理的那种强迫症患者, 所以对于这种红叉叉更是心烦.这个我已经忍了好久了.今天 见这哥们犀利的解决了这个eclipes的bug.很是激动, ...

  3. CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类

    以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...

  4. 《IBM BPM实战指南》读书笔记

    理论 BPM不是一个IT术语,更不是因技术的发展而起源的,相反,BPM自始至终都是管理学的术语和概念.它关注的一直都是效率.成本.利润.质量等核心问题.BPM是一门学科和一种方法论,只是现代的企业管理 ...

  5. react引用antd的form表单

    引用form是第三方插件ant插件,官网网址:https://ant.design/.用到的antd的版本是@2.0.1.form(https://ant.design/components/form ...

  6. iOS下Audio自动播放(Autoplay)音乐

    前几天做了一个H5活动页面,产品要求初始化播放音乐,因晓得H5 Audio标签支持Autoplay就没在意. 完了在手机上测试,发现手机上打开页面死活就是不会自动播放,点击播放按钮才可以播放,很是纠结 ...

  7. Json解析,Json-lib

    网络资源参考 http://www.json.org/json-zh.html http://code.alibabatech.com/wiki/pages/viewpage.action?pageI ...

  8. SharePoint 2013 Designer系列之自定义列表表单

    在SharePoint的使用中,默认的样式过于单调经常困扰着我们,其实,SharePoint使用Designer工具,可以很轻松解决这一问题,制作出各式各样漂亮的页面.下面,让我们简单介绍下这一过程. ...

  9. Runtime相关整理

    一.Runtime是用C和汇编写的 对于C语言,函数的调用在编译的时候会决定调用哪个函数.对于OC的函数,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名 ...

  10. 【代码笔记】iOS-下拉菜单

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...