#!/bin/sh /etc/rc.common
# Copyright (C) 2012-2014 OpenWrt.org
START=90
USE_PROCD=1
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
else
procd_append_param command --getrpcmethod
fi
#2.3 设置异常 机制
procd_set_param respawn "3" "7" "0"
#2.4 完成进程实例的增加
procd_close_instance
fi
}
boot() {
start --boot
}
service_triggers()
{
#配置文件或网络接口改变之后触发服务重新读取配置
procd_add_reload_trigger easycwmp
}
启动脚本主要内容在函数start_service中,
procd相关的介绍在详细请看