Talkweb开发者社区
直播中

拓维信息

3年用户 34经验值
私信 关注
[经验]

OpenHarmony喂狗源码解读之启动喂狗服务

一.喂狗功能介绍
二.内核态配置
三.用户态配置



一. 功能介绍watchdog的实现用于监视系统的运行,包括内核态watchdog模块和用户态watchdog服务程序。内核态watchdog 模块通过 /dev/watchdog这个字符设备与用户态通信。用户态程序一旦打开/dev/watchdog 设备,就会在内核中启动N秒的喂狗定时器,此后,用户态程序需要保证在N秒之内向这个设备写入数据),每次写操作会导致重新设定定时器。如果用户态程序在N秒之内没有写操作,喂狗定时器到期会导致一次系统CPU复位重启。通过这种机制可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,CPU硬件复位,系统重启;重新恢复系统的正常运行。

二. 内核态配置1. 代码在OpenHARMony的位置:

  1. devicehisiliconhispark_taurussdk_linuxsocsrcinterdrvcommonwtdghi_wtdg.c



2. 配置选项:
  1. devicehisiliconhispark_taurussdk_linuxsocsrcmppcfg.mak
  2. export CONFIG_HI_WDG=y
  1. devicehisiliconhispark_taurussdk_linuxsocsrcmpPCBbincludeautoconf.h
  2. #define CONFIG_HI_WDG 1



3. 编译脚本BUILD.gn:
  1. devicehisiliconhi3516dv300BUILD.gn
  2. group("hi3516dv300_group") {
  3.   deps = [
  4.     "build:rc_files",
  5.     "build/rootfs:init_configs",
  6.     "sdk_linux/mpp:sdk_linux_mpp_group",
  7.     "//device/hisilicon/hispark_taurus:hispark_taurus",
  8.   ]
  9. }


“//device/hisilicon/hispark_taurus:hispark_taurus”, 配置了编译喂狗代码生成hi3516cv500_wdt.ko内核模块
打包进入vendor镜像的/vendor/modules/hi3516cv500_wdt.ko

4. 模块KO的插入:
  1. devicehisiliconhi3516dv300buildrootfsinit.Hi3516DV300.cfg


插入ko之后,就是有/dev/watchdog 设备文件。

三. 用户态配置1. 代码位置:
  1. basestartupinit_litewatchdoginit_watchdog.c



2. BUILD.gn编译脚本:
  1. import("//build/ohos.gni")
  2.   ohos_executable("watchdog_service") {
  3.     sources = [ "init_watchdog.c" ]
  4.     include_dirs = [ "//base/startup/init_lite/services/log" ]
  5.     deps = [ "//base/startup/init_lite/services/log:init_log" ]
  6.     defines = [ "LINUX_WATCHDOG" ]
  7.     install_enable = true
  8.     part_name = "init"
  9.   }


从编译脚本分析,生成watchdog_service可执行文件,并打包在/system/bin目录下

3. init进程脚本配置
  1. basestartupinit_liteservicesetcinit.cfg
  2.    "jobs" : [{
  3.             "name" : "pre-init",
  4.             "cmds" : [
  5.                 "write /proc/sys/kernel/sysrq 0",
  6.                 "mkdir /acct/uid",
  7.                 "chown root system /dev/memcg/memory.pressure_level",
  8.                 "chmod 0040 /dev/memcg/memory.pressure_level",
  9.                 "mkdir /dev/memcg/apps/ 0755 system system",
  10.                 "mkdir /dev/memcg/system 0550 system system",
  11.                 "start ueventd",
  12.                 "start watchdog_service",
  13.                 "mkdir /data",
  14.                 "mount_fstab /vendor/etc/fstab.${ohos.boot.hardware}",
  15.                 "load_persist_params "
  16.             ]


“start watchdog_service”, 启动watchdog_service服务
服务配置

  1. {
  2.             "name" : "watchdog_service",
  3.             "path" : ["/system/bin/watchdog_service", "10", "2"],
  4.             "disabled" : 1,
  5.             "uid" : "root",
  6.             "gid" : ["shell", "log", "readproc"]
  7.         },




更多回帖

发帖
×
20
完善资料,
赚取积分