openharmony3.1Beta啟動喂狗服務解讀
一.喂狗功能介紹
二.核心态配置
三.使用者态配置
一. 功能介紹
watchdog的實作用于監視系統的運作,包括核心态watchdog子產品和使用者态watchdog服務程式。核心态watchdog 子產品通過 /dev/watchdog這個字元裝置與使用者态通信。使用者态程式一旦打開/dev/watchdog 裝置,就會在核心中啟動N秒的喂狗定時器,此後,使用者态程式需要保證在N秒之内向這個裝置寫入資料),每次寫操作會導緻重新設定定時器。如果使用者态程式在N秒之内沒有寫操作,喂狗定時器到期會導緻一次系統CPU複位重新開機。通過這種機制可以保證系統核心程序大部分時間都處于運作狀态,即使特定情形下程序崩潰,因無法正常定時“喂狗”,CPU硬體複位,系統重新開機;重新恢複系統的正常運作。
二. 核心态配置
1. 代碼在OpenHarmony的位置:
device\hisilicon\hispark_taurus\sdk_linux\soc\src\interdrv\common\wtdg\hi_wtdg.c
2. 配置選項:
device\hisilicon\hispark_taurus\sdk_linux\soc\src\mpp\cfg.mak
export CONFIG_HI_WDG=y
device\hisilicon\hispark_taurus\sdk_linux\soc\src\mpp\cbb\include\autoconf.h
#define CONFIG_HI_WDG 1
3. 編譯腳本BUILD.gn:
device\hisilicon\hi3516dv300\BUILD.gn
group("hi3516dv300_group") {
deps = [
"build:rc_files",
"build/rootfs:init_configs",
"sdk_linux/mpp:sdk_linux_mpp_group",
"//device/hisilicon/hispark_taurus:hispark_taurus",
]
}
"//device/hisilicon/hispark_taurus:hispark_taurus", 配置了編譯喂狗代碼生成hi3516cv500_wdt.ko核心子產品
打包進入vendor鏡像的/vendor/modules/hi3516cv500_wdt.ko
4. 子產品KO的插入:
device\hisilicon\hi3516dv300\build\rootfs\init.Hi3516DV300.cfg
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMxkDM3YWZidTOkVTN2YTZxYzXxQTO1QTM4EzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
插入ko之後,就是有/dev/watchdog 裝置檔案。
三. 使用者态配置
1. 代碼位置:
base\startup\init_lite\watchdog\init_watchdog.c
2. BUILD.gn編譯腳本:
import("//build/ohos.gni")
ohos_executable("watchdog_service") {
sources = [ "init_watchdog.c" ]
include_dirs = [ "//base/startup/init_lite/services/log" ]
deps = [ "//base/startup/init_lite/services/log:init_log" ]
defines = [ "LINUX_WATCHDOG" ]
install_enable = true
part_name = "init"
}
從編譯腳本分析,生成watchdog_service可執行檔案,并打包在/system/bin目錄下
3. init程序腳本配置
base\startup\init_lite\services\etc\init.cfg
"jobs" : [{
"name" : "pre-init",
"cmds" : [
"write /proc/sys/kernel/sysrq 0",
"mkdir /acct/uid",
"chown root system /dev/memcg/memory.pressure_level",
"chmod 0040 /dev/memcg/memory.pressure_level",
"mkdir /dev/memcg/apps/ 0755 system system",
"mkdir /dev/memcg/system 0550 system system",
"start ueventd",
"start watchdog_service",
"mkdir /data",
"mount_fstab /vendor/etc/fstab.${ohos.boot.hardware}",
"load_persist_params "
]
"start watchdog_service", 啟動watchdog_service服務
服務配置
{
"name" : "watchdog_service",
"path" : ["/system/bin/watchdog_service", "10", "2"],
"disabled" : 1,
"uid" : "root",
"gid" : ["shell", "log", "readproc"]
},
想了解更多關于鴻蒙的内容,請通路:
51CTO和華為官方合作共建的鴻蒙技術社群
https://harmonyos.51cto.com/#bkwz