天天看點

OpenHarmony喂狗源碼解讀之啟動喂狗服務

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
           
OpenHarmony喂狗源碼解讀之啟動喂狗服務

插入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

繼續閱讀