cwmp开源代码研究——cwmp移植(代码片段)

myblesh myblesh     2022-11-02     720

关键词:

原创作品,转载请注明出处,严禁非法转载。如有错误,请留言!

email:[email protected]

声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流。(企鹅号: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 地址对应的文件位置,根据自己的环境进行修改。

技术分享图片

执行命令:

命令和测试:
[[email protected] X86移植_CentOS]# make
[[email protected] 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
原因:
[[email protected] 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出来的文件拷贝到需要的位置即可。

问题二:
[email protected] 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开源代码研究5——cwmp程序设计思想

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

configuregenieacs(代码片段)

GenieACSGeneralConfigconfig.json actsasthemainconfigurationfileandisstoredin /path_to_genieacs/config/.Inthisfolderthere‘salsoabackupfileofthemain(/default)config(config-sample.json).Thefollowingexampleshowssomeaddedoptions."DATABASE_NAME":"genieacs","MONGODB_SOCKET":"/tmp/mongodb-27017.... 查看详情

开源免费tr069协议cpe代理程序对比

...门的学习,是再合适不过的了,其中EasyCWMPCore是开源的,十分方便我们进行二次开发和拓展。但是EasyCwmpDataModel并不是完全开源的,开源版本只支持部分协议模型。官网地址:http://easycwmp.org 查看详情

tr069事件类型(eventcode对应的含义)(代码片段)

...WMP端第一次与ACS连接。注意,0BOOTSTARP可能和其他事件代码一起组成事件代码组,例如,在出厂后CPE初始启动时,CPE发送0BOOTSTARP和1BOOT事件代码。1BOOT当给电或是复位时引起的会话建立,这包括初始系统启动或... 查看详情

tr-069_amendment-4:附录g.穿越nat网关的连接请求方式

...Pv6部署要么不使用NAT,要么以不同的方式使用它。G.1介绍CWMP可以用来对通过网关连接的局域网下的CPE设备进行远程管理。当设备部在NAT网关之后,并被分配了私网IP后,CWMP依然可以对其进行管理,但有了限制,通过ConnectionRequest... 查看详情

esptouch移植xamarin记要(代码片段)

...新2.android和IOS双端混合UI开发App解决思路:到esptouch官方开源项目库(android,ios)编译jar及ios标准库到xamarin项目引用。实现:1.下载esptouch库,开源地址:https://github.com/EspressifApp/EsptouchForAndroid2.通过androidstudio编译aar文件G 查看详情

seetaface向树莓派移植

...组研发。代码基于C++实现,不依赖第三方库。然而,目前开源的代码,是在windowsvs上编译的,对于我们这帮mac/linux用户来说,用起来还是挺麻烦的。网上也有不少关于Linux的编译过程详解。然而针对嵌入式平台的移植依然少见:&... 查看详情

简单的底部标签开源项目:bottombar(代码片段)

...clipse项目移植到AndroidStudio上,移植完后就忙着看各种开源的特效,想加点到项目里,下面先看底部标签导航特效:BottomBar本文参考自:https://github.com/roughike/BottomBar先上图:  大神写的BottomBar,用起来... 查看详情

qt移植腾讯云c-sdk结合实现ota更新(代码片段)

...说明C-SDK支持三种编译方式:cmake 方式Makefile 方式代码抽取方式 &nbs 查看详情

guilite移植gui例程到stm32(代码片段)

...【GuiLite】移植GUI例程到STM32最近在做Github找到一个有趣的开源Gui框架:GuiLite,按照说明移植了GuiLite到STM32F4OLED屏幕上,分析一下自己的移植经验一、Gui 查看详情

qt移植腾讯云c-sdk结合实现ota更新(代码片段)

点击上方“嵌入式应用研究院”,选择“置顶/星标公众号”干货福利,第一时间送达!来源|嵌入式应用研究院整理&排版 |嵌入式应用研究院腾讯云C-SDK是一套能够帮助开发者快速对接腾讯云IotExplorer平台的一套跨... 查看详情

qt移植腾讯云c-sdk结合实现ota更新(代码片段)

...说明C-SDK支持三种编译方式:cmake 方式Makefile 方式代码抽取方式    编译方式以及编译配置选项的详细说明请参考docs目录文档C-SDK_Build编译环境及配置选项说明,参考如 查看详情

gstreamer移植qnx:概览篇(代码片段)

...qnx公司咨询才行。于是就有这么一个念头,移植一个开源的播放器到qnx平台上。之前也有尝试过移植VLC和gstreamer,但是因为工作时间比较忙,草草的尝试了一下&# 查看详情

c++最佳实践|5.可移植性及多线程(代码片段)

本系列是开源书C++BestPractises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第五篇。C++最佳实践:1.工... 查看详情

c++最佳实践|5.可移植性及多线程(代码片段)

本系列是开源书C++BestPractises[1]的中文版,全书从工具、代码风格、安全性、可维护性、可移植性、多线程、性能、正确性等角度全面介绍了现代C++项目的最佳实践。本文是该系列的第五篇。C++最佳实践:1.工... 查看详情

itextsharp操作pdf(代码片段)

一、介绍iTextSharp:是一个从JAVA项目iText衍生的.Net版本的开源项目。iText是一个PDF库,可让您创建,移植,检查和维护可移植文档格式(PDF)的文档,从而使您可以轻松地向软件项目添加PDF功能。我们甚至提供文档来帮助您进行... 查看详情

手把手教你ubuntu下移植mjpg-streamer(代码片段)

一、嵌入式视频图像开源库在嵌入式系统中,常用的视频图像处理开源系统有:luvcview、cheese、motion、mjpg-streamer或者ffmpeg,其中:•luvcview:基于V4L2、SDL的程序,支持拍照录像,参数调节,代码精简实用... 查看详情

stm32+littlevgl(lvgl)文件系统使用(代码片段)

...成以下步骤:(1)已经完成STM32移植LittleVgl(LVGL)嵌入式开源图形库,教程地址:https://blog.csdn.net/qq_44062900/article/details/116449413(2)已经完成STM32移植FatFS文件系统最新版R0.14b,教程地址:https://blog.csdn.net/qq_44062900/article/details/116... 查看详情