文件路徑:
- 源碼:ext/openwrt/init.d/easycwmpd
- 設備路徑 /etc/init.d/easycwmpd
源碼內容
#!/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中,
- 1.在openwrt系統中,easycwmpd進程不是直接啓動,而是使用procd監控進程來啓動,做法很nice;
- 從系統文件中讀取系統的基本信息,存入uci接口中,方便easycwmpd的讀取信息操作
procd相關的介紹在詳細請看