easycwmp解讀(1.0)-啓動流程/etc/init.d/easycwmpd

文件路徑:

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

procd相關的介紹在詳細請看

OpenWrt開發:25—軟件模塊之procd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章