当前位置: 首页 > news >正文

fmql之Linux WDT

正点原子第52章

基础知识

正点原子教程

fmql-dts

代码

APP代码(不需要编写驱动代码)

static int dw_wdt_drv_probe(struct platform_device *pdev)
{struct device *dev = &pdev->dev;struct watchdog_device *wdd;struct dw_wdt *dw_wdt;    /* 描述SDWT设备 */struct resource *mem;struct dw_wdt_of_data *of_data = NULL;int ret;/* 实例化wdt对象 */ dw_wdt = devm_kzalloc(dev, sizeof(*dw_wdt), GFP_KERNEL);if (!dw_wdt)return -ENOMEM;/* 获取SWDT的寄存器基地址(物理地址)* 并将其转换为内核当中操作使用的虚拟地址* 将其存放在dw_wdt->regs中*/mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);dw_wdt->regs = devm_ioremap_resource(dev, mem);if (IS_ERR(dw_wdt->regs))return PTR_ERR(dw_wdt->regs);/* 获取输入时钟 */dw_wdt->clk = devm_clk_get(dev, NULL);if (IS_ERR(dw_wdt->clk))return PTR_ERR(dw_wdt->clk);/* 使能时钟 */ret = clk_prepare_enable(dw_wdt->clk);if (ret)return ret;/* 获取时钟频率 */dw_wdt->rate = clk_get_rate(dw_wdt->clk);if (dw_wdt->rate == 0) {ret = -EINVAL;goto out_disable_clk;}dw_wdt->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL);if (IS_ERR(dw_wdt->rst)) {ret = PTR_ERR(dw_wdt->rst);goto out_disable_clk;}reset_control_deassert(dw_wdt->rst);/* 对 struct watchdog_device 对象成员变量进行了初始化 */wdd = &dw_wdt->wdd;wdd->info = &dw_wdt_ident;wdd->ops = &dw_wdt_ops;wdd->min_timeout = 1;wdd->max_hw_heartbeat_ms =dw_wdt_top_in_seconds(dw_wdt, DW_WDT_MAX_TOP) * 1000;wdd->parent = dev;/* 调用函数:* 初始化WDT*/watchdog_set_drvdata(wdd, dw_wdt);      watchdog_set_nowayout(wdd, nowayout);  // 设置WDT status为WDOG_NO_WAY_OUTwatchdog_init_timeout(wdd, 0, dev);    // 超时时间值/** If the watchdog is already running, use its already configured* timeout. Otherwise use the default or the value provided through* devicetree.*/if (dw_wdt_is_enabled(dw_wdt)) {wdd->timeout = dw_wdt_get_top(dw_wdt);set_bit(WDOG_HW_RUNNING, &wdd->status);} else {wdd->timeout = DW_WDT_DEFAULT_SECONDS;watchdog_init_timeout(wdd, 0, dev);}platform_set_drvdata(pdev, dw_wdt);watchdog_set_restart_priority(wdd, 128);/* 向看门狗核心层注册一个WDT设备 */ret = watchdog_register_device(wdd);if (ret)goto out_disable_clk;of_data = dev_to_ofdata(&pdev->dev);if (of_data && of_data->init) {ret = of_data->init(&pdev->dev);if (ret)goto out_disable_clk;}return 0;out_disable_clk:clk_disable_unprepare(dw_wdt->clk);return ret;
}
static const struct watchdog_info dw_wdt_ident = {.options	= WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT |WDIOF_MAGICCLOSE,.identity	= "Synopsys DesignWare Watchdog",
};
/* options:* WDIOF_KEEPALIVEPING    支持喂狗* WDIOF_SETTIMEOUT       设置超时时间* WDIOF_MAGICCLOSE       当应用层关闭设备时,WDT不会停止运行*/static const struct watchdog_ops dw_wdt_ops = {.owner		= THIS_MODULE,.start		= dw_wdt_start,.stop		= dw_wdt_stop,.ping		= dw_wdt_ping,.set_timeout	= dw_wdt_set_timeout,.get_timeleft	= dw_wdt_get_timeleft,.restart	= dw_wdt_restart,
};

运行测试

过一会就重启了(应该是WDT没喂狗)

  • fmql的WDT时间要比设置的长一些,比如这里我设置的"set 10",理论上是10s,但是我大概计算了一下,需要30s+才会复位。
  • 需要查看wdt使用的clk。

开启&定时:

重启:

重启时卡在这里

发现sd卡的第二个分区未能成功搭载。(当时不知道为什么创建了三个分区:sdb1放启动文件,sdb3放ubuntu系统,sdb2空的)(所以只需要创建2个分区即可★★★) 

WDT重启系统后

linux内核启动报错Kernel panic - not syncing: No working init found. 问题分析-CSDN博客

petalinux启动报错:Kernel panic - not syncing: No working init found. Try passing init= option to kernel.-CSDN博客

显示SD卡的某个分区未成功加载。

不可行:

之前设置好了:

尝试其他解决办法

法一:

不使用wdt,使用shell命令(如reboot)让ubuntu重启。

理论可行。

法二:

修改SD卡分区,只创建2个分区。

并且修改u-boot环境变量,设置为从mmcplk0p2启动

wdt没有喂狗后成功重启ubuntu。

  • 备份ubuntu系统:(要先取消sdb3的挂载)

sudo dd if=/dev/sdb3 of=/home/sdcard_backup.img bs=4M status=progress

  • 拷贝到SD卡新的分区:

sudo dd if=/home/sdcard_backup.img of=/dev/sdb2 bs=4M status=progress

setenv bootargs 'console=ttyPS0,115200 noinitrd root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw' 

重启后

MobaXterm(windows)无法通过SSH连接ubuntu:

尝试中。。。

其他学习内容

kill杀掉进程

https://download.csdn.net/blog/column/11438800/137284052

buildroot配置目录

【Buildroot】学习记录(2)配置注释_buildroot配置-CSDN博客

17. Buildroot根文件系统的构建 — [野火]嵌入式Linux镜像构建与部署——基于LubanCat-i.MX6ULL开发板 文档

相关文章:

fmql之Linux WDT

正点原子第52章。 基础知识 正点原子教程 fmql-dts 代码 APP代码(不需要编写驱动代码) static int dw_wdt_drv_probe(struct platform_device *pdev) {struct device *dev &pdev->dev;struct watchdog_device *wdd;struct dw_wdt *dw_wdt; …...

【算法学习之路】7.链表算法

链表算法 前言一.原地逆置思路一:头插法思路二:双指针法思路3:递归 例题:1.头插法2.双指针法3,递归 二.双指针快慢指针:一个指针快一个指针慢例题1例题2 前言 我会将一些常用的算法以及对应的题单给写完&am…...

IDEA Commit 模态提交界面关闭VS开启对比

IDEA Commit 模态提交界面关闭VS开启对比 前言开启模态提交界面优点快捷且灵活的选择需要commit文件显示文件修改内容多(主观) 缺点在模态提交界面选择文件,临时关闭模态框重新打开会重置选择的commit文件 关闭模态提交界面优点允许在commit选择文件时查看其它没有修…...

【AI赋能】AI 工具生成视频教材:从创意到成品的全流程指南

AI 工具生成视频教材:从创意到成品的全流程指南 目标 通过本教材,您将学会如何利用 AI 工具(Grok、Sora、Speechify 和 CapCut)生成一个完整的视频,包括脚本生成、视频片段制作、字幕添加、音频生成以及最终剪辑合成…...

qt 操作多个sqlite文件

qt 操作多个sqlite文件 Chapter1 qt 操作多个sqlite文件1. 引入必要的头文件2. 创建并连接多个SQLite数据库3. 代码说明4. 注意事项 Chapter2 qt 多线程操作sqlite多文件1. 引入必要的头文件2. 创建数据库操作的工作线程类3. 在主线程中创建并启动多个工作线程4. 代码说明5. 运…...

WSL with NVIDIA Container Toolkit

一、wsl 下安装 docker 会提示安装 docekr 桌面版,所以直接安装 docker 桌面版本即可 二、安装 NVIDIA Container Toolkit NVIDIA Container Toolkit仓库 https://github.com/NVIDIA/nvidia-container-toolkit​github.com/NVIDIA/nvidia-container-toolkit 安装…...

Vue 系列之:组件通讯

子组件调用父组件方法 1、直接在子组件中通过 this.$parent.event 来调用父组件的方法 父组件&#xff1a; <template><p><child></child></p> </template> <script>import child from ./child;export default {components: {chi…...

【Linux实践系列】:用c语言实现一个shell外壳程序

&#x1f525;本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;博主主页&#xff1a;努力努力再努力wz 那么今天我们就要进入Linux的实践环节&#xff0c;那么我们之前学习了进程控制相关的几个知识点&#xff0c;比如进程的终止以及进程的等待和进程的替换&#xff0c;…...

STL map 的 lower_bound(x)、upper_bound(x) 等常用函数

【STL map 简介】 ● STL map 是一种关联容器&#xff0c;存储键值对&#xff0c;每个键&#xff08;key value&#xff09;是唯一的&#xff0c;而值&#xff08;mapped value&#xff09;可以重复。构建 STL map 时&#xff0c;无论元素插入顺序如何&#xff0c;STL map 中的…...

【A2DP】SBC 编解码器互操作性要求详解

目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…...

Computational Linguistics期刊全解析:领域顶刊的投稿指南与学术价值

在人工智能与语言学交叉融合的浪潮中&#xff0c;《Computational Linguistics》&#xff08;CL&#xff09;作为该领域的标杆期刊&#xff0c;始终是研究者发表前沿成果的首选平台。本文将从期刊影响力、投稿策略、收稿方向等角度&#xff0c;为学者提供一份全面的指南。 一、…...

【量化科普】Sharpe Ratio,夏普比率

【量化科普】Sharpe Ratio&#xff0c;夏普比率 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化投资领域&#xff0c;夏普比率&#xff08;Sharpe Ratio&#xff09;是一个非常重要的风险调整后收益指标。它由诺贝尔经济学奖得主威廉F夏普&#xff08;William…...

运行OpenManus项目(使用Conda)

部署本项目需要具备一定的基础&#xff1a;Linux基础、需要安装好Anaconda/Miniforge&#xff08;Python可以不装好&#xff0c;直接新建虚拟环境的时候装好即可&#xff09;&#xff0c;如果不装Anaconda或者Miniforge&#xff0c;只装过Python&#xff0c;需要确保Python是3.…...

TikTok Shop欧洲市场爆发,欧洲TikTok 运营网络专线成运营关键

TikTok在欧洲的影响力还在持续攀升&#xff0c;日前&#xff0c;TikTok发布了最新的欧盟执行和使用数据报告&#xff0c;报告中提到&#xff1a; 2024年7~12月期间&#xff0c;TikTok在欧盟地区的月活用户达1.591亿&#xff0c;较上一报告期&#xff08;2024年10月发布&#xf…...

基于YOLO11深度学习的电瓶车进电梯检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

微服务保护:Sentinel

home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多&#xff0c;比如&#xff1a; 请求限流 线程隔离 服务熔断 服务故障最重要原因&#xff0c;就是并发太高&#xff01;解决了这个问题&#xff0c;就能避免大部分故障。当然&#xff0c;接口的并发…...

labelimg标注的xml标签转换为yolo格式标签

本文不生产技术&#xff0c;只做技术的搬运工&#xff01;&#xff01;&#xff01; 前言 在yolo训练时&#xff0c;我们需要对图像进行标注&#xff0c;而使用labelimg标注时如果直接选择输出yolo格式的数据集&#xff0c;则原始数据的很多信息无法被保存&#xff0c;因此一版…...

VUE3开发-9、axios前后端跨域问题解决方案

VUE前端解决跨域问题 前端页面需要改写 如果无效&#xff0c;记得重启服务器 后端c#解决跨域问题 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客...

机试准备第12天

首先学习队列&#xff0c;队列有先进先出的特性。广度优先遍历需要基于队列实现&#xff0c;C中的stl引入了队列的实现方式。队列支持push()&#xff0c;进入队尾&#xff0c;pop()出队&#xff0c;队头出队&#xff0c;front()获取队首元素&#xff0c;back()获取队尾元素&…...

PHP开发者必看:如何在本地环境快速搭建gRPC和Protobuf开发环境

PHP开发者必看&#xff1a;如何在本地环境快速搭建gRPC和Protobuf开发环境 作为一名长期与PHP打交道的开发者&#xff0c;我深刻理解在微服务架构盛行的当下&#xff0c;掌握gRPC和Protobuf技术栈的重要性。记得第一次尝试在本地搭建环境时&#xff0c;光是版本兼容问题就耗费了…...

智能体间通信实践指南

每个雄心勃勃的 AI 项目都会遇到这样的时刻&#xff1a;你碰壁了。你有一个强大的语言模型&#xff0c;你让它做一些复杂的事情——也许从三十个不同角度研究一个主题,或者从头开始构建整个营销活动——但它就是……无法把所有东西整合在一起。上下文变得太大。任务太分散。输出…...

G-Helper:华硕笔记本电池健康管理的终极轻量化解决方案

G-Helper&#xff1a;华硕笔记本电池健康管理的终极轻量化解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...

TestDisk与PhotoRec:专业数据恢复的强力解决方案

TestDisk与PhotoRec&#xff1a;专业数据恢复的强力解决方案 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 当分区表损坏、文件系统崩溃或重要数据意外删除时&#xff0c;专业的数据恢复工具是唯一的救命稻…...

半导体仿真进阶:如何用Silvaco DOPING语句精确控制掺杂分布

半导体仿真进阶&#xff1a;如何用Silvaco DOPING语句精确控制掺杂分布 在半导体器件设计与工艺开发中&#xff0c;精确控制掺杂分布是决定器件性能的关键因素之一。Silvaco TCAD工具链中的DOPING语句&#xff0c;为工程师提供了从简单均匀掺杂到复杂梯度分布的灵活控制能力。…...

Qwen3-14B-AWQ模型效果深度评测:在算法题求解上的表现

Qwen3-14B-AWQ模型效果深度评测&#xff1a;在算法题求解上的表现 1. 评测背景与模型简介 在AI技术快速发展的今天&#xff0c;大语言模型在代码生成和算法解题领域展现出越来越强的能力。Qwen3-14B-Int4-AWQ作为通义千问系列的最新量化版本&#xff0c;在保持较高推理能力的…...

HRNet的‘并行多分支’到底强在哪?一个动画图解带你彻底搞懂特征融合机制

HRNet并行多分支架构的视觉化解析&#xff1a;如何通过双向特征融合突破关键点检测精度瓶颈 在计算机视觉领域&#xff0c;关键点检测任务&#xff08;如人体姿态估计、人脸特征点定位&#xff09;对空间精度的要求近乎苛刻。传统卷积神经网络通过层层下采样提取语义特征的代价…...

4个步骤掌握高频交易策略:High-Frequency-Trading-Model-with-IB实战指南

4个步骤掌握高频交易策略&#xff1a;High-Frequency-Trading-Model-with-IB实战指南 【免费下载链接】High-Frequency-Trading-Model-with-IB A high-frequency trading model using Interactive Brokers API with pairs and mean-reversion in Python 项目地址: https://gi…...

数字减影血管造影系统市场洞察:至2032年将攀升至557.6亿元

据恒州诚思最新调研数据显示&#xff0c;2025年全球数字减影血管造影系统&#xff08;DSA&#xff09;市场规模预计达386.7亿元&#xff0c;至2032年将攀升至557.6亿元&#xff0c;2026-2032年复合增长率&#xff08;CAGR&#xff09;为5.5%。这一增长受全球老龄化加速、心血管…...

华为Matebook 13双系统实战:Win10与Ubuntu 16.04无缝共存指南

1. 为什么选择华为Matebook 13安装双系统 作为一名长期使用双系统开发的工程师&#xff0c;我最近在华为Matebook 13上成功部署了Win10Ubuntu 16.04双系统组合。这款13英寸的轻薄本确实给了我不少惊喜——2K全面屏、1.3kg超轻机身、第八代i5处理器&#xff0c;这些硬件配置对于…...