PROG="/usr/sbin/easycwmpd"
UCI_SET="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} set"
UCI_GET="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} get"
UCI_COMMIT="/sbin/uci -q ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} commit"
init_device_info() {
local val oval
local change=0
val=`cat "/etc/device_info" | grep "DEVICE_MANUFACTURER" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
oval=`$UCI_GET easycwmp.@device[0].manufacturer`
[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].manufacturer="$val"; change=1; }
val=`cat "/etc/device_info" | grep "DEVICE_PRODUCT" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
oval=`$UCI_GET easycwmp.@device[0].product_class`
[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].product_class="$val"; change=1; }
val=`cat "/etc/device_info" | grep "DEVICE_REVISION" | cut -f 2 -d '=' | sed -e "s/['\"]//g" -e "s'[]:@/?#[!$&()*+,;=]'_'g"`
oval=`$UCI_GET easycwmp.@device[0].hardware_version`
[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].hardware_version="$val"; change=1; }
val=`cat "/etc/openwrt_version"`
oval=`$UCI_GET easycwmp.@device[0].software_version`
[ -n "$val" -a "$val" != "$oval" ] && { $UCI_SET easycwmp.@device[0].software_version="$val"; change=1; }
#The same thing here for OUI and SerialNumber
[ "$change" = "1" ] && $UCI_COMMIT easycwmp
start_service() {
#执行/etc/init.d/easycwmpd start,会进行到这里
#读取开关
local enable=`uci -q get easycwmp.@local[0].enable`
if [ "$enable" == "1" ]; then
#1. 获取平台的厂商 ,OID,软硬件版本号等,保存在uci中 /etc/config/easycwmp
init_device_info
#2.将/usr/sbin/easycwmpd进程加入到procd中监控起来
#2.1增加一个服务实例
procd_open_instance
#2.2 添加进程处理
procd_set_param command "$PROG" -f
if [ "$1" = "--boot" ];then
procd_append_param command --boot
procd_append_param command --getrpcmethod
#2.3 设置异常 机制
procd_set_param respawn "3" "7" "0"
#2.4 完成进程实例的增加
procd_close_instance
boot() {
start --boot
service_triggers()
#配置文件或网络接口改变之后触发服务重新读取配置
procd_add_reload_trigger easycwmp
启动脚本主要内容在函数start_service中,
-
1.在openwrt系统中,easycwmpd进程不是直接启动,而是使用procd监控进程来启动,做法很nice;
-
从系统文件中读取系统的基本信息,存入uci接口中,方便easycwmpd的读取信息操作
procd相关的介绍在详细请看
OpenWrt开发:25—软件模块之procd
uci set
easycwmp
.@local[0].ubus_socket=/tmp/run/ubus/ubus.sock
/etc/
init
.d/
easycwmpd
restart
ubus list |grep tr069
我们在ubuntu下要把一个程序加入开机
启动
,一般可以通过修改rc.local来完成,但ubuntu下有两个rc.local文件。分别是/etc/rc.local和/etc/
init
.d/rc.local。可以看一下两个文件的内容找到他俩的关系:
/etc/
init
.d/rc.local
#! /bin/sh
### BEGIN
INIT
INFO
# Provides: rc.local
# Required
-
Start: $all
# Required
-
Stop:
# Default
-
Start: 2 3 4 5
# Default
-
Stop:
# Short
-
Descrip
EasyCwmp
设计包括两个部分:
①
EasyCwmp
Core:它包括TR069 CWMP引擎,并负责与ACS服务器的通信。使用C语言开发。
②
EasyCwmp
DataModel:它包含TR
-
06的DATAModel,并且符合某些DataModel标准,例如TR
-
098,TR
-
181,TR
-
104等。使用shell开发,只支持部分协议模型,在开发和维护过程效率比较低。
二、
EasyCwmp
源码组成
三、
EasyCwmp
文件依赖
四、
EasyCwmp
执行
流程
详细代码参考easyc
config local
option enable '0' #开关
-
是否
启动
easycwmpd
进程
option interface eth0 #TR069协议报文接收,发送的网卡
-
一般是WAN口
option port 7547 #本机监听acs Get操作的接口
option ubus_s
这几天的工作是将Openwrt中的freeCWMP替换为
easyCWMP
.由于
easyCWMP
默认是不存在于menuconfig中的,因此只能通过添加pacakge的方式来进行.
好在
easyCWMP
对openWRT的支持很友好,可以直接在package下解压,就可以在menuconfig中识别到了.
BUT!!!
坑也不少.
原以为可以直接在package/解压目录下修改源码,然后编译,即...
EasyCwmp
安装
源代码下载地址为:http://
easycwmp
.org/download/
easycwmp
-
1.8.6.tar.gz
一般参考官网发布版本中README文件就可以成功安装,但是部分同学可能会遇到各种问题,本文按照官方提供的安装方法一步一步安装验证,其中遇到一些依赖库安装问题,已整理到本文安装步骤中。
1. OpenWRT Linux 上安装
EasyCwmp
EasyCwmp
部分
EasyCwmp
主要是在OpenWRT Linux平台上开发和测试的。
下载 easycwm
什么是CWMP(TR069)
CWMP是由数字用户线路DSL——Digital Subscriber’s Line论坛(之后更名为broadband
-
forum)发起开发的技术规范之一,编号为TR
-
069,所以又被称为TR
-
069协议
CWMP协议基础概念
CWMP的全称为:CPE广域网管理协议(CPE WAN Management Protocol),这个协议主要用于网管中心远程管理配置数量较大...
如果在你的 Linux 系统中执行 `/etc/
init
.d/cron restart` 命令时出现 `/etc/
init
.d/cron: No such file or directory` 的错误提示,可能是因为你的系统使用的是 Systemd 而不是 SysV
init
。
在 Systemd 中,服务的
启动
和管理不再通过 `/etc/
init
.d/` 目录下的脚本文件实现,而是通过使用 `systemctl` 命令。
因此,你可以尝试使用以下命令来重启 crontab 服务:
sudo systemctl restart cron.service
如果你希望在系统
启动
时自动
启动
crontab 服务,可以使用以下命令:
sudo systemctl enable cron.service
这样就可以在系统
启动
时自动
启动
crontab 服务了。如果还有问题,可以在评论区留言。