OpenHarmony喂狗源码解读之启动喂狗服务 原创 精华
民之码农
发布于 2022-1-13 10:21
浏览
8收藏
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
插入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"]
},
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-1-13 11:45:28修改
赞
11
收藏 8
回复
相关推荐
感谢大佬科普
配合以下阅读,效果更佳
1、OpenHarmony喂狗源码解读之启动喂狗服务
https://harmonyos.51cto.com/posts/9945
2、OpenHarmony喂狗源码解读之内核态源码
https://harmonyos.51cto.com/posts/9966
3、OpenHarmony喂狗源码解读之用户态源码
https://harmonyos.51cto.com/posts/9967
4、OpenHarmony喂狗源码解读之Linux内核原生喂狗配置
https://harmonyos.51cto.com/posts/9969