AML_看门狗驱动分析

看门狗的工作原理是,定时器中断,设定的时间递减完了,如果此时没有重新启动定时器开始计数,也就是所谓的“喂狗”,模块就会拉低引脚,让平台重启复位

看linux driver从module_init函数开始

module_init(aml_wdt_driver_init);

里面注册了一个平台设备驱动

static struct platform_driver aml_wdt_driver = {
    .probe      = aml_wdt_probe,
    .remove     = aml_wdt_remove,
    .shutdown   = aml_wdt_shutdown,
    .suspend    = aml_wdt_suspend,
    .resume     = aml_wdt_resume,
    .driver     = {
        .owner  = THIS_MODULE,
        .name   = "aml_wdt",
        .of_match_table = aml_wdt_of_match,
    },
}

模块在上电匹配设备层也就是dtd的compatible后,运行probe回调函数

static int aml_wdt_probe(struct platform_device *pdev)
{
    struct watchdog_device *aml_wdt; /*watchdog的核心结构体*/
    struct aml_wdt_dev *wdev;/*pri data*/
    int ret;
    aml_wdt = devm_kzalloc(&pdev->dev, sizeof(*aml_wdt), GFP_KERNEL);/*alloc space*/
    if (!aml_wdt)
        return -ENOMEM;

    wdev = devm_kzalloc(&pdev->dev, sizeof(*wdev), GFP_KERNEL);
    if (!wdev)
        return -ENOMEM;
    wdev->dev       = &pdev->dev;
    mutex_init(&wdev->lock); /*init mutex lock*/
    aml_init_pdata(wdev); /*init platform data*/

    aml_wdt->info         = &aml_wdt_info;
    aml_wdt->ops          = &aml_wdt_ops;/*ops is important*/
    aml_wdt->min_timeout = wdev->min_timeout;
    aml_wdt->max_timeout = wdev->max_timeout;
    aml_wdt->timeout = 0xffffffff;
    wdev->timeout = 0xffffffff;

    watchdog_set_drvdata(aml_wdt, wdev);
    platform_set_drvdata(pdev, aml_wdt);/*save 平台数据*/
    if (wdev->reset_watchdog_method == 1) {

        INIT_DELAYED_WORK(&wdev->boot_queue, boot_moniter_work);
        mod_delayed_work(system_freezable_wq, &wdev->boot_queue,
     round_jiffies(msecs_to_jiffies(wdev->reset_watchdog_time*1000)));
        enable_watchdog(wdev);/*启动定时器用到喂狗*/
        set_watchdog_cnt(wdev,
                 wdev->default_timeout * wdev->one_second);/*设置喂狗时间间隔*/
        dev_info(wdev->dev, "creat work queue for watch dog\n");
    }
    ret = watchdog_register_device(aml_wdt);/*注册接口*/
    if (ret)
        return ret;
    awdtv = wdev;
    register_pm_notifier(&aml_wdt_pm_notifier);
    register_reboot_notifier(&aml_wdt_reboot_notifier);
    dev_info(wdev->dev, "AML Watchdog Timer probed done\n");

    return 0;
}

这样timer会每隔一段时间去喂狗,如果系统繁忙或者其他原因造成系统卡顿没有喂狗,那系统就会被看门狗拉低重启

static void boot_moniter_work(struct work_struct *work)
{
    struct aml_wdt_dev *wdev = container_of(work, struct aml_wdt_dev,
                            boot_queue.work);
    reset_watchdog(wdev); /*喂狗*/
    mod_delayed_work(system_freezable_wq, &wdev->boot_queue,
    round_jiffies(msecs_to_jiffies(wdev->reset_watchdog_time*1000)));/*延时*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这些文件是与音频处理相关的代码文件,属于Android系统中的音频相关模块。下面简单介绍一下每个文件的作用: - alsa_config_parameters.c:alsa驱动的配置参数管理。 - alsa_manager.c:alsa驱动的管理,包括打开、关闭、读写等操作。 - aml_audio_delay.c:音频延迟的处理。 - aml_audio_dev2mix_process.c:音频设备到混音器的音频数据处理。 - aml_audio_ease.c:音频的平滑处理。 - aml_audio_hal_avsync.c:音频硬件同步的处理。 - aml_audio_mixer.c、amlAudioMixer.c、sub_mixing_factory.c:音频混音的处理。 - aml_audio_ms12_bypass.c、aml_audio_ms12_render.c、aml_audio_ms12_sync.c:Dolby MS12音频的处理。 - aml_audio_nonms12_render.c:非Dolby MS12音频的处理。 - aml_audio_scaletempo.c:音频的变速变调处理。 - aml_audio_spdifout.c:SPDIF音频输出的处理。 - aml_audio_stream.c:音频流的处理。 - aml_audio_timer.c:音频定时器的处理。 - aml_avsync_tuning.c:音视频同步的调节。 - aml_config_data.c、aml_config_parser.c:音频相关配置数据的处理。 - aml_dtvsync.c:DTV同步的处理。 - aml_hfp.c:音频头戴式设备的处理。 - aml_mmap_audio.c:音频内存映射的处理。 - aml_vad_wakeup.c:语音唤醒的处理。 - audio_aec.c:音频回声消除的处理。 - audio_bt_sco.c:蓝牙SCO音频的处理。 - audio_dtv_utils.c:DTV音频的处理。 - audio_format_parse.c:音频格式解析的处理。 - audio_hdmi_util.c:HDMI音频的处理。 - audio_hw.c、audio_hw_dtv.c、audio_hw_ms12.c、audio_hw_ms12_common.c、audio_hw_ms12_v2.c、audio_hw_profile.c:音频硬件相关的处理。 - audio_hwsync.c、audio_hwsync_wrap.c:音频硬件同步的处理。 - audio_hw_utils.c:音频硬件工具类的处理。 - audio_kara.c:卡拉OK音频的处理。 - audio_mediasync_wrap.c:媒体同步的处理。 - audio_policy.c:音频策略的处理。 - audio_port.c:音频端口的管理。 - audio_post_process.c:音频后处理的处理。 - audio_tsync_wrap.c:时间同步的处理。 - audio_usb_hal.c:USB音频的处理。 - audio_virtual_buf.c:虚拟音频缓冲的处理。 - dolby_lib_api.c:Dolby音频库的API。 - earc_utils.c:EARC音频的处理。 - hw_avsync.c、hw_avsync_callbacks.c:硬件音视频同步的处理。 - karaoke_manager.c:卡拉OK管理的处理。 - spdif_encoder_api.c:SPDIF编码的API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值