ZYNQ printk 缓冲区读取

news2024/12/29 1:23:55

之前调试kenel ,如果kenenl崩溃会,通过内核system.map定位log_buf变量地址,给cpu复位,在u-boot中读取对应的物理地址,即可知道最终内核崩溃最后打出的消息。

我在使用 5.4.154这个内核版本,中没有log_buf这个变量,经过分析 kernel/printk.c文件,我尝试打出这个日志文件,printk.c中部分源码如下:

 其中在372行定义

DECLARE_STATIC_PRINTKRB(printk_rb, CONFIG_LOG_BUF_SHIFT, &printk_cpulock);

我查了这个宏定义在 include/linux/printk_ringbuffer.h这个头文件中,这个宏定义如下

#define DECLARE_STATIC_PRINTKRB(name, szbits, cpulockptr)		\
static char _##name##_buffer[1 << (szbits)]				\
	__aligned(__alignof__(long));					\
static DECLARE_WAIT_QUEUE_HEAD(_##name##_wait);				\
static void _##name##_wake_work_func(struct irq_work *irq_work)		\
{									\
	wake_up_interruptible_all(&_##name##_wait);			\
}									\
static struct irq_work _##name##_wake_work = {				\
	.func = _##name##_wake_work_func,				\
	.flags = IRQ_WORK_LAZY,						\
};									\
static struct printk_ringbuffer name = {				\
	.buffer = &_##name##_buffer[0],					\
	.size_bits = szbits,						\
	.seq = 0,							\
	.lost = ATOMIC_LONG_INIT(0),					\
	.tail = ATOMIC_LONG_INIT(-111 * sizeof(long)),			\
	.head = ATOMIC_LONG_INIT(-111 * sizeof(long)),			\
	.reserve = ATOMIC_LONG_INIT(-111 * sizeof(long)),		\
	.cpulock = cpulockptr,						\
	.ctx = ATOMIC_INIT(0),						\
	.wq = &_##name##_wait,						\
	.wq_counter = ATOMIC_LONG_INIT(0),				\
	.wq_work = &_##name##_wake_work,				\
}

把这行代码进行宏展开

DECLARE_STATIC_PRINTKRB(printk_rb, CONFIG_LOG_BUF_SHIFT, &printk_cpulock);

等价与

#define DECLARE_STATIC_PRINTKRB( szbits, cpulockptr)
//只替换name

static char _printk_rb_buffer[1 << (szbits)] __aligned(__alignof__(long));
static DECLARE_WAIT_QUEUE_HEAD(_printk_rb_wait);

static void _printk_rb_wake_work_func(struct irq_work *irq_work)
{
	wake_up_interruptible_all(&_printk_rb_wait);
}

static struct irq_work _printk_rb_wake_work = {
	.func = _printk_rb_wake_work_func,
	.flags = IRQ_WORK_LAZY,	
};	

static struct printk_ringbuffer printk_rb = {
	.buffer = &_printk_rb_buffer[0],
	.size_bits = szbits,				
	.seq = 0,					
	.lost = ATOMIC_LONG_INIT(0),		
	.tail = ATOMIC_LONG_INIT(-111 * sizeof(long)),
	.head = ATOMIC_LONG_INIT(-111 * sizeof(long)),
	.reserve = ATOMIC_LONG_INIT(-111 * sizeof(long)),
	.cpulock = cpulockptr,				
	.ctx = ATOMIC_INIT(0),					
	.wq = &_printk_rb_wait,					
	.wq_counter = ATOMIC_LONG_INIT(0),		
	.wq_work = &_printk_rb_wake_work,		
}

可以看到上面宏定义 _printk_rb_buffer的数组,做缓冲区,我们只需要读取这个数据就可以,

在system.map中搜索_printk_rb_buffer中搜索如下图:

 由于ZYNQ的DDR是从0x0开始,根据system.map中的值0xc0c6fcd0,减去0xc0000000,在u-boot中通过md读取0x00c6fcd0就可以。

我使用的是ZYNQ平台,通过vivado的sdk工具,读取

 通过二进制工具打开,效果如下图

 

这个缓冲区数据有格式,没有仔细研究,将就能看。

本文章做个笔记,下次调试再翻看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金蝶附件上传接口开发思路

1️⃣需求描述&#xff1a;需要通过调用金蝶API接口实现指定单据的附件上传。本文以收料通知单为例&#xff0c;以Java代码示例进行讲解。 tips&#xff1a;阅读本文开始前&#xff0c;希望你是一名开发者同时阅读过&#xff1a; https://vip.kingdee.com/article/872325739310…

【小知识点】为爬虫训练场项目添加 Bootstrap5 时间轴

爬虫训练场建站时间轴&#xff1a;https://pachong.vip/timeline 背景 为了便于记录爬虫训练场项目更新日志&#xff0c;所以集成该功能&#xff0c;实现效果如下所示。 特别备注一下&#xff0c;时间轴是什么&#xff1f; 时间轴是一种常用的网站布局元素&#xff0c;通常用…

Forexclub:特斯拉四季度交付车辆创纪录,你认为2023年特斯拉销量如何

周一特斯拉宣布其2022年第四季度交付了创纪录的405278辆汽车。这一数字创下了该公司的纪录&#xff0c;但低于华尔街的估计。据报道&#xff0c;报告中对交付量的普遍估计为420760。特斯拉称&#xff1a;“2022年&#xff0c;汽车交付量同比增长40%&#xff0c;达到131万辆。”…

基于Vue和SpringBoot的论文检测系统的设计与实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

【信息论与编码 沈连丰】第七章:信息率失真理论及其应用

【信息论与编码 沈连丰】第七章&#xff1a;信息率失真理论及其应用第七章 信息率失真理论及其应用7.1 失真函数和平均失真度7.2 信息率失真函数7.3 信息率失真函数R(D)的计算7.4 保真度准则下的信源编码定理7.5 信息率失真函数与信息价值第七章 信息率失真理论及其应用 香农第…

网工、运维必备的免费在线画图工具,真的很好用!

都说一图胜千言&#xff0c;一个IT工程师如果能画的一手好图&#xff0c;无论是在方案选项、还是技术交流&#xff0c;都能快速表达自己的想法&#xff0c;让你的思路更加的直观明了&#xff1b;市面上的制图工具有很多&#xff0c;下面就推荐几款好用且免费的工具&#xff0c;…

SaaS服务最大的优势是哪些?(附免费试用)

SaaS服务十大优势 近些年来&#xff0c;SaaS&#xff08;Software-as-a-Service&#xff09;成为整个IT领域中最受欢迎的业务模型之一。由于SaaS的市场每年以近60&#xff05;的速度增长&#xff0c;因此它正在取代更传统的应用市场&#xff0c;并将在未来几年内成为主导模式。…

【非侵入式负载监测】低采样率电动汽车充电的无训练非侵入式负载监测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一、TTY子系统介绍

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、TTY介绍2、控制台终端2.1 系统控制台2.2 当前控制台2.3 虚拟控制台3、伪终端4、串口终端5. 其它类型…

《移动安全》(10)Frida第一篇之环境搭建

0x00 前言 Frida是一款轻量级HOOK框架&#xff0c;我们在电脑上安装Frida环境后&#xff0c;还需要将frida-server上传到目标机器上运行&#xff08;需要Root&#xff09;&#xff0c;通过它来注入进程完成hook操作。本文主要讲述Frida环境的搭建。 0x01 Frida环境搭建 &…

node.js创建网站实例3

node.js访问mysql数据库并把查询结果返回给前端 1.cmd中运行&#xff1a;npm install mysql -s 2.修改api.js的代码 // 1.先引入express模块&#xff0c;express是一个函数 var express require("express") //2.执行express函数&#xff1b;用变量接收express函数…

概论_第2章_重点_随机变量函数的概率分布___定理法和分布函数法的应用

一 定义 概括地说&#xff1a; 随机变量Y是随机变量X的函数。 设g(x) 是一给定的连续函数&#xff0c; 称Yg(X) 为随机变量X的一个函数&#xff0c; Y也是一个随机变量。当X取值 时&#xff0c;Y取值 . ~~~~~~~~~~~~~~ 本文讨论连续型随机变量函数。 定理1: 设X为连续型…

【3.2】Eureka-搭建注册中心/服务注册/服务发现

【3.2】Eureka-搭建注册中心/服务注册/服务发现1 搭建EurekaServer1.1 详细步骤1.2 搭建EurekaServer小结2 服务注册2.1 详细步骤&#xff08;踩坑点&#xff01;解决&#xff09;2.2 模拟多实例部署2.3 服务注册小结3 服务发现3.1 详细步骤4 总结1 搭建EurekaServer 搭建Eure…

2022年,我每天都会用的linux常用命令

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令 1.Linux命令概述 2.Linux命令的分类 &#…

科研 | 学生研究方向指导 | 技术路线 | 相关学习资源

1. AI某领域 1.1 Python基础 慕课教程&#xff1a;Python 入门语法教程 哔哩哔哩&#xff1a;3小时快速入门Python 1.2 机器学习框架 sklearn框架&#xff1a;菜菜的机器学习sklearn 1.3 深度学习框架 慕课教程&#xff1a;TensorFlow 入门教程 PyTorch官方教程中文版 不…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的AI作画模型!

目录给我推荐20个比较流行的AI作画模型给我推荐20个比较流行的AI作画模型代码给我推荐20个比较流行的AI作画模型 好的&#xff0c;下面是20个比较流行的AI作画模型&#xff1a; DALL-E GAN Deep Dream CycleGAN StyleGAN pix2pix SketchRNN BigGAN ProGAN ESRGAN SPADE BigVA…

Vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景VueLeaflet实现加载OSM显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件用于创建和编辑几何图层的插件可绘…

如何避免无效外贸邮件营销?

如何避免无效的邮件营销&#xff0c;米贸搜为您整理如下&#xff0c;希望对您有所帮助:1 .和邮件正文一样重视主题主题对于电子邮件就像标题对于文章或博客一样重要。即使你有全宇宙最吸引人的散文诗&#xff0c;或者最吸引人的求婚&#xff0c;如果根本没有人打开这封邮件&…

CSS 中各种居中你真的玩明白了么

前言 页面布局中最常见的需求就是元素或者文字居中了&#xff0c;但是根据场景的不同&#xff0c;居中也有简单到复杂各种不同的实现方式&#xff0c;有的特定场景下可能还有一些稀奇古怪的bug&#xff0c;本篇就带大家一起了解下&#xff0c;各种场景下&#xff0c;该如何使用…

72、【哈希表】leetcode——454. 四数相加 II(C++版本)

题目描述 原题链接&#xff1a;454. 四数相加 II 解题思路 本题构建Hash表的关键是确定Value的含义&#xff0c;因为目标是找到四个集合中各种情况为0的情况之和&#xff0c;因此不需要对相同情况去重&#xff0c;Value设置为满足某种对应情况的出现次数。当找到一次满足nums…