CWMP开源代码研究——cwmp移植
原创作品,转载请注明出处,严禁非法转载。如有错误,请留言!
email:40879506@qq.com
声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流。(企鹅号:408797506)
本篇用到的文件包下载路径:http://download.csdn.net/detail/eryunyong/9735149
一. 环境
1.GNU/Linux Centos6.5操作系统
2.gcc
二. 依赖包的安装
1. expat-2.1.0
1)下载安装包expat-2.1.0.tar.gz ,路径http://www.libexpat.org/
2)解压
tar -xvf expat-2.1.0.tar.gz
3)进入目录
cd expat-2.1.0;mkdir tmp
4) 配置安装路径到tmp
./configure --prefix=$PWD/tmp(如果是本地linux系统,只需要./configure)
5) 安装
make;make install
6)拷贝tmp目录下相应的文件到需要的位置(暂跳过)
2. openssl-1.0.2(暂时跳过)
因为curl的安装包依赖于openssl以及在CWMP中要用到SSL证书的HTTPS安全方式,所以提前先安装上openssl
1)下载安装包openssl-1.0.2.tar.gz,路径http://distfiles.macports.org/openssl/
2)解压
tar -xvf openssl-1.0.2.tar.gz
3) 进入目录
cd openssl-1.0.2;mkdir tmp;mkdir tmp/openssl
4) 配置安装路径和配置文件路径
./config shared --prefix=$PWD/tmp --openssldir=$PWD/tmp/openssl(如果是本地linux系统,只需要./config shared)
5)安装
make;make install
6) 拷贝tmp目录下相应的文件到需要的位置(暂跳过)
3.curl-7.21.4
1)下载安装包curl-7.21.4.tar.gz,路径: http://pkgs.fedoraproject.org/repo/pkgs/curl/
2) 解压
tar -xvf curl-7.21.4.tar.gz
3) 进入目录
cd curl-7.21.4;mkdir tmp
4) 配置安装路径和SSL选项(SSL支持放到以后的高级部分专门介绍)
./configure --without-ssl --prefix=$PWD/tmp
5) 安装
make;make install
6) 拷贝tmp目录下相应的文件到需要的位置(暂跳过)
至此,CWMP core依赖的安装包已经完成了。
三. 安装cwmp
因为CWMP core不开源,这里提供X86 Centos6.5平台下编译好的安装程序。如果有不同环境的读者需要此程序,可以留言。
把编译出来的可执行文件cwmp拷贝到电脑或者设备的可行性路径下即可。
四. libcwmp库安装
这里涉及到对数据的存储和操作,我们知道openwrt引入了UCI,是一套配置参数管理系统。所以我们首先需要了解UCI的基本操作和知识,这里不做介绍了,此外也可以通过轻量级嵌入式数据库sqlite来管理数据。
1. UCI安装
为了便于后续的开发,这里移植了在曾经的产品中开发过的luci,主要变化是在/usr/config/下面多出了一份动态存储参数,而在/etc/config/目录下的配置是默认参数配置。即,当uci程序获取某配置参数信息的时候,首先会从/usr/config/目录加载配置,如果读到则返回。若读取不到,再从/etc/config/目录加载配置。
1)下载安装包uci-0.4.0.tar.gz,路径http://distfiles.macports.org/openssl/
2)解压
tar -xvf uci-0.4.0.tar.gz
3) 进入目录
cd uci-0.4.0;mkdir tmp
4) 编译
make
5) 安装 (暂跳过)
将产生的*.h *.so 拷贝到需要的位置
Note: 也可以手动修改源码目录下Makefile的install规则,然后make install。
2)libcwmp安装
提供源码,可以自由开发。将编译出来后的so放到/usr/lib目录下即可。(需要源码可留言邮箱地址)
五. 下载安装包
下载路径:http://download.csdn.net/detail/eryunyong/9735149
基于上述操作,我把依赖包的依赖程序(动态库和头文件)和测试数据的配置放到了一个打包文件里,并写了相应的脚本文件。下面是使用说明,可供参考。
脚本的使用说明:
如果你和我一样,新装了X86平台下的Centos6.5系统,只需要解压安装包并执行make命令即可完成cwmp的core安装和所有依赖包程序需要的文件。
如何环境不一样,比如使用Ubuntu或者Fedora等系统,直接执行我在Centos6.5环境编译出来的程序会遇到很多错误,有的是共享库出错,有的是软件版本不一致(比如Glibc)等(参考第六节)。
所以,除了CWMP core没有源码之外,其他所有程序建议重新编译,并且把编译后产生的程序或者依赖文件(动态库和头文件)放到你的环境中。
下载安装包,解压后看到如下目录:
cwmp_dep_packet用到的上述依赖包。
etc和usr目录存放的是数据。
lib和include存储的是上述依赖包编译出来的头文件和动态库(暂时不需要静态库)。(现在明白为什么依赖包安装的时候最后一个步骤是"暂跳过"了吧,只需要把所有安装的程序拷贝到这里,并执行make就自动完成了cwmp的部署)
bin是用到的可执行程序。
脚本install_dep.sh安装所用到的配置数据。(可单独操作)
脚本install_dep.sh.sh安装所用到的依赖文件。(可单独操作)
/lib/link.sh脚本是创建lib目录下用到的动态库so文件的软连接。(可单独操作)
Makefile主要是完成上面三个脚本的动作。
六. 测试
在测试之前,必须先配置好参数和环境。
acs url 和CPE 地址对应的文件位置,根据自己的环境进行修改。
执行命令:
命令和测试: [root@localhost X86移植_CentOS]# make [root@localhost X86移植_CentOS]# cwmp -F /etc/config/cwmp_global.conf
log默认输出到/tmp/log/cwmp1.log 文件,可使用命令tail -f /tmp/log/cwmp1.log 追踪查看。如果需要修改log存储路径,可以修改配置/etc/config/log1.conf文件里的路径。
Note:首次安装后/tmp/log目录会被创建,由于tmp目录下内容断电会丢失,所以每次重启系统需要手动创建/tmp/log目录。
七. 跨平台或操作系统遇到的问题
下面是将Ubuntu12.04操作系统的依赖包直接移植到Centos6.5移植过程中遇到的错误,而不是重新编译了一把依赖包和程序,仅供参考:
问题一:
cwmp: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory
原因:
[root@localhost X86移植]# grep "rtmp" . -R
Binary file ./lib/libcurl.so.4.2.0 matches
解决方法:
1)重新编译libcurl去掉rtmp协议支持,(2)或者在Centos系统上安装rtmp库,而安装rtmp协议需要openssl和zlib库的支持。
参考:http://blog.csdn.net/u014037733/article/details/22978887
这里用第一种方式,重新编译libcurl,去掉librtmp支持。选项--without-librtmp
即配置libcurl时使用命令:./configure --without-ssl --prefix=$PWD/tmp --without-librtmp
最后把make出来的文件拷贝到需要的位置即可。
问题二:
root@localhost X86移植]# easycwmp -F /etc/config/cwmp_global.conf
easycwmp: /lib/libc.so.6: version `GLIBC_2.15' not found (required by easycwmp)
easycwmp: /lib/libldap_r-2.4.so.2: no version information available (required by /usr/lib/libcurl.so.4)
easycwmp: /lib/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libcurl.so.4)
原因:glibc版本太低,升级即可。参考:http://blog.csdn.net/hnhuangyiyang/article/details/50392997
七. 移植到arm,mips等平台
因为考虑大部分读者无法实践(没有开发板),所以X86平台的移植写的比较详细。参考上述步骤,应该很容易移植成功,至于其他平台的移植,未来根据读者的留言考虑是否再写一篇跨平台的移植。
如需交叉编译,请提供交叉编译工具链,我会把编译后的cwmp core程序发给你。
CWMP开源代码研究——cwmp移植的更多相关文章
- CWMP开源代码研究——git代码工程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- CWMP开源代码研究5——CWMP程序设计思想
声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...
- CWMP开源代码研究1——开篇之作
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- CWMP开源代码研究2——easycwmp安装和学习
声明:本文是对开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文所有笔记和代码可以到csdn下载:http://download.csdn.n ...
- CWMP开源代码研究7——cwmp移植
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- CWMP开源代码研究3——ACS介绍
声明:本文涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅号:408797506) 本文介绍自己用过的ACS,其中包括开源版(提供下载包)和商业版(仅提供安装包下载 ...
- CWMP开源代码研究6——libcwmp动态库开发
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 为了使程序具有通用性,便于扩展和维护.采用了"模块"插入的思想.将设备业务相 ...
- CWMP开源代码研究4——认证流程
TR069 Http Digest 认证流程 一 流程及流程图 1.1盒端主动发起Http Digest认证流程 盒端CPE ...
- CWMP开源代码研究——stun的NAT穿透
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 参考: http://www.cnblogs.com/myblesh/p/6259765.htm ...
随机推荐
- linux内核管理
一 linux组成:kernel.库.rootfs.程序 1.kernel的功能: 1) kernel提供的功能都通过系统调用给用户接口 2) kernel包括:进程管理 .内存管理 .网络管理 ...
- 【Linux】 环境变量与shell配置&执行
■ 变量与环境变量 shell环境通常存在很多变量,变量可以通过echo $VAR或${VAR}的方式查看.set命令可以查看当前环境中的所有变量(包括一般的自定义变量和环境变量) 变量的设置通过简单 ...
- 蚂蚁金服安全实验室首次同时亮相BlackHat Asia 以及CanSecWest国际安全舞台
近期,蚂蚁金服巴斯光年安全实验室(以下简称AFLSLab)同时中稿BlackHat Asia黑帽大会的文章以及武器库,同时在北美的CanSecWest安全攻防峰会上首次中稿Android安全领域的漏洞 ...
- 通过jersey-client客户端调用Jersey的Web服务模拟CURD
一.总体说明 通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增.删.改.查等操作. 服务端主要是通过内存的方式,来模拟用户的增加.删除.修改.查询 ...
- WCF跨域解决方法及一些零碎的东西。
之前发过一篇随笔,说的WCF配置文件配置问题.里面也配了跨域支持,但是jsoncollback只支持Get请求,Post请求是解决不了,所以这里把真正的WCF跨域问题贴出来. 话不多说,直接帖配置文件 ...
- Django—urls系统:urls基础
Django的urls系统简介 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映 ...
- C语言第三次博客作业
一.PTA实验作业 1 1.实验代码 int i,N; char sex; float high; scanf("%d",&N); for(i =1;i <=N;i ...
- 201621123050 《Java程序设计》第2周学习总结
1.本周学习总结 java的数据类型 基本数据类型:介绍了java特有的boolean 引用数据类型 String:不变性:需要频繁修改时使用StringBuilder 包装类:自动拆.装箱 数组 一 ...
- JAVA序列化基础知识
1.序列化是干什么的? 简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保 存object states, ...
- 20145237《Java程序设计》第一周学习总结
教材学习内容总结 java可分为Java SE.Java EE.Java ME三大平台. java SE分为JVM.JRE.JDK.与java语言四个部分. JRE包括java SE API和JVM. ...