QNX HAM配置解析

作者: 巴菲伟 | 来源:发表于2023-08-30 15:11 被阅读0次

    一、HAM架构介绍

    1、背景
    当汽车驾驶过程中,可能会出现断电、部件故障、操作人员失误、软件故障等等系统故障。QNX团队研发出高可用性框架为构建高效的HAM系统提供了可靠的软件基础设施,除了支持面向硬件的HAM解决方案(例如CompactPCI和自定义硬件)之外,您还拥有在整个系统中出现软件故障之前隔离甚至修复软件故障的工具。
    2、什么是HAM
    HAM(High Availability Manager)是一个“智能看门狗”——一个高弹性的管理进程,它可以在系统服务或进程失败或不再响应时监视您的系统并执行多级恢复。作为一个自我监控的管理者,HAM对内部故障具有弹性。不管出于什么原因,如果HAM本身被异常地停止,它可以通过移交给一个称为“监护人”的镜像进程,立即并完全地重建自己的状态。简单说,可以用守护机制做进程保活的。
    3、HAM架构特性

    • 系统稳定性
    • 软件模块的隔离性
    • 软件组件的动态升级
    • HAM应用程序所需的许多特殊特性

    二、HAM基本元素

    参考使用文档:https://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.ham/topic/about.html
    1、entities

    • Self-attached entities:即通过主动调用HA ham_attach_self() ham_detach_self() 等API 使得自身受到HAM模块
    • Externally attached entities : 即外部被动监测实体,如进程A说如果进程B死亡则通知我,则进程B被动的加入监测。
    • Global entity: 并非一个具体的实体,指的是可以指定系统的任意感兴趣的事件,并在该事件发生时,设定特定的动作。
      2、conditions
      Condition
      Description
      CONDDEATH
      进程中止
      CONDABNORMALDEATH
      进程异常中止
      CONDDETACH
      断开HAM
      CONDATTACH
      连接上HAM
      CONDHBEATMISSEDHIGH
      进程失去心跳达最大次数
      CONDHBEATMISSEDLOW
      进程失去心跳达最小次数
      CONDRESTART
      进程重新启动
      CONDSTATE
      进程状态发生变化
      CONDANY
      任何condition改变
      CONDRAISE
      将检测状况报告给HAM

    3、action
    Action
    Description
    ham_action_restart()
    重启
    ham_action_execute()
    执行一段脚本
    ham_action_notify_pulse()
    发送PULSE事件
    ham_action_notify_signal()
    发送系统信号事件
    ham_action_waitfor()
    等待
    ham_action_log()
    输出日志
    ham_action_notify_signal_node()

    ham_action_notify_pulse_node()

    ham_action_heartbeat_healthy()

    三、ham-monitor.conf文件分析

    1. ham-monitor.conf位置 : qnx_svp/dist/g9ph-aarch64/svp/etc/
    2. 预编译阶段:
      qnx_svp/dist/g9ph-aarch64/svp/目录下的etc、lib、bin三个文件夹拷贝到apps/qnx_ap/prebuilt/emmc_bu/对应的etc、lib、bin三个文件夹目录下。
    3. 启动流程:
    • 在create_images.sh 文件中加入下面两个命令即可拉起svp.init.sh
      TOPDIR=(cd `dirname0`;pwd)
      source $TOPDIR/../../../prebuilt/emmc_bu/svp/etc/svp.init.sh
    • svp.init.sh 会把相关svp的sh脚本执行起来
      无法复制加载中的内容
      备注: ham-monitor.conf的参数可以在svp.startup.sh中找到启动

    ham-monitor.conf 文件内容

    @processes
    i2c1:json:{"name":"i2c-rcar-A-p0xe6508000-i320-v","restart_script":"/proc/boot/i2c-rcar-A -p0xe6508000 -i320 -v --u 1","pulse":10}
    i2c2:json:{"name":"i2c-rcar-A-p0xe6510000-i318-v","restart_script":"/proc/boot/i2c-rcar-A -p0xe6510000 -i318 -v --u 2","pulse":11}
    sdmmc_emmc:json:{"name":"devb-sdmmc-rcar_gen3blkdirectio=no,maxio=512,cache=16m,noatime,ra=256k:512k,rapolicy=aggressive,commit=none,naming=0#@cambounce=128kmemname=below4Gcamnopriv,quiet,cache,asyncsdioidx=2,emmc,bw=8,timing=hs200diskname=mmc@0sdmmcpartitions=on","restart_script":"/proc/boot/devb-sdmmc-rcar_gen3 blk directio=no,maxio=512,cache=16m,noatime,ra=256k:512k,rapolicy=aggressive,commit=none,naming=0#@ cam bounce=128k mem name=below4G cam nopriv,quiet,cache,async sdio idx=2,emmc,bw=8,timing=hs200 disk name=mmc@0 sdmmc partitions=on","pulse":12}
    devc_serscif2:json:{"name":"devc-serscif-E-F-b115200-c66666666-t14scif1-u2","restart_script":"/proc/boot/devc-serscif -E -F -b115200 -c 66666666 -t 14 scif1 -u2","pulse":13}
    slogger2:json:{"name":"slogger2","restart_script":"/proc/boot/slogger2","pulse":14}
    screen:json:{"name":"screen-c/usr/lib/graphics/rcarm3/graphics.conf","restart_script":"/sbin/screen -c /usr/lib/graphics/rcarm3/graphics.conf","pulse":16}
    ..................

    参数讲解:
    screen:json: {
    "name":"screen-c/usr/lib/graphics/rcarm3/graphics.conf",
    "restart_script":"/sbin/screen -c /usr/lib/graphics/rcarm3/graphics.conf",
    "pulse":16
    }
    screen: 在QNX环境中二进制命令 (QNX环境目前没有添加,需要手动加入,路径在binscan_info.txt中)
    name : 作为存储启动screen屏幕的key数值
    screen -c /usr/lib/graphics/rcarm3/graphics.conf : 在QNX环境下启动屏幕的命令
    restart_script : 执行重新启动
    /sbin/screen -c /usr/lib/graphics/rcarm3/graphics.conf : 在QNX环境下启动屏幕的命令
    pulse : 发送重启PULSE事件
    16 : 第16个事件

    相关文章

      网友评论

        本文标题:QNX HAM配置解析

        本文链接:https://www.haomeiwen.com/subject/vqznmdtx.html