尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
linux内核中追踪jiffies的定义
最近我在阅读linux内核源码很多代码使用了一个名为“jiffies”的全局变量但是如果你去追踪这个“jiffies”变量的定义位置的时候会只能找到对应全局变量声明而找不到全局变量定义。如下面static bool mfc_cmd_host2risc(enum mfc_facade_cmd cmd, int arg1, int arg2, int arg3, int arg4) /**从host到risc发送命令 */ { enum mfc_facade_cmd cur_cmd 0; unsigned long timeo jiffies; timeo 20; /* waiting for 100ms */ /* wait until host to risc command register becomes H2R_CMD_EMPTY */ while (time_before(jiffies, timeo)) { cur_cmd READL(MFC_HOST2RISC_COMMAND); if (cur_cmd H2R_CMD_EMPTY) /**H2R:host2RISC */ break; msleep_interruptible(2); } if (cur_cmd ! H2R_CMD_EMPTY) return false; WRITEL(arg1, MFC_HOST2RISC_ARG1); WRITEL(arg2, MFC_HOST2RISC_ARG2); WRITEL(arg3, MFC_HOST2RISC_ARG3); WRITEL(arg4, MFC_HOST2RISC_ARG4); WRITEL(cmd, MFC_HOST2RISC_COMMAND); return true; }追踪jiffies的定义发现只能在“jiffies.h”中找到全局变量声明#define __jiffy_data __attribute__((section(.data))) /* * The 64-bit value is not atomic - you MUST NOT read it * without sampling the sequence number in xtime_lock. * get_jiffies_64() will do this for you as appropriate. */ extern u64 __jiffy_data jiffies_64; extern unsigned long volatile __jiffy_data jiffies;因为太多代码都使用了jiffies这个全局变量了如果直接全局搜索不易于大海捞针。之所以找不到这个全局变量的定义一种可能是因为变量是使用宏定义“##”链接符号组成的但是jiffies绝对不是这种情况因为jiffies变量名就一个单词。还有一种情况就是变量jiffies不在源文件中定义而是在汇编.S中定义显然如果根据搜索结果查找的话也没有找到。还有一种情况就是使用宏定义#define替代方式也不是属于这种用法。还有一种用法就是使用alias别名编译器参数的方式给一个变量起别名显然也不是这种。我到这里和大家一样也是卡住了幸好现在有AI于是我问了一下vscode中Github Copilot让它帮我找一下最终在linux的链接脚本vmlinux.lds中找到一行赋值代码也就是链接脚本中使用赋值的方式给一个现有变量取别名实现了一个变量两个变量名字。也就是将jiffies_64这个变量的地址赋值给了jiffies因此一个变量的地址有了2个名字也可以这么说同一个内存变量有2个名字。这个也可以从.map文件中验证这个结论只不过是有了结果才得出结论的也就是反推得出的结论。下一步就是搜索“jiffies_64”这个变量的定义即可通过vscode的搜索工具搜索得到:kernel/timer.c中找到一下结果u64 jiffies_64 __cacheline_aligned_in_smp INITIAL_JIFFIES;
RELATED

相关推荐

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/g…

📅 2026/9/6 6:24:50
无限制OCR技术解析:从Tesseract到分布式处理的长文档识别方案

无限制OCR技术解析:从Tesseract到分布式处理的长文档识别方案

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你正在处理长文档、扫描书籍或多页PDF的OCR识别任务,可能已经发现传统OCR工具的一个致命缺陷:它们往往对单…

📅 2026/10/31 23:27:32
深度解析Rive渲染器:高性能跨平台动画渲染引擎架构设计与实战应用

深度解析Rive渲染器:高性能跨平台动画渲染引擎架构设计与实战应用

深度解析Rive渲染器:高性能跨平台动画渲染引擎架构设计与实战应用 【免费下载链接】rive-renderer Low-level C Rive runtime and renderer 项目地址: https://gitcode.com/GitHub_Trending/ri/rive-renderer Rive渲染器是一款专为现代交互式动画设计的高性能…

📅 2026/9/4 14:29:31
MORE NEWS

更多资讯

📰

OpenCode:TypeScript+monorepo+LLM协同编程平台解析

1. OpenCode到底是什么?别被名字骗了,它根本不是代码编辑器OpenCode这个名字,第一眼容易让人联想到“开源代码编辑器”或者“类似VS Code的轻量版”,但实际完全不是这么回事。我最早在TypeScript开发者群里看到有人发链接说“用Op…

📰

动物病理学习笔记:疾病概论与血循环障碍的机制串联

动物病理这门课,真正让人头疼的从来不是背名词,而是那些看起来彼此孤立、实际却串成一条线的机制。我当年第一次翻到"疾病概论"和"血循环障碍"这两块内容时,最大的感受就是:概论讲了一堆抽象概念,…

📰

大模型Agent开发入门:从核心原理到实战避坑指南

这些年聊大模型,大家从最早的“能聊天”逐渐过渡到了“能不能帮我干点正事”。而“让大模型自己干活”这件事,最直接的落地形态就是Agent。这个标题“大模型Agent开发入门”看起来很直白,但真正接触过的朋友都知道,从概念到能跑通…

📰

27B模型压缩至5.9GB:极端量化与长程智能体任务性能实测

1. 从54GB到5.9GB:这个压缩比到底意味着什么第一次看到“27B参数、54GB压到5.9GB”这组数字的时候,我的直觉是——这要么是标题党,要么是某种极端到会牺牲可用性的量化方案。27B这个量级的模型,如果按FP16存储,权重体积…

📰

MySQL 8.0 Windows安装与优化配置指南

1. MySQL 8.0安装前的准备工作 在Windows环境下安装MySQL 8.0之前,有几个关键准备工作需要完成。首先需要确认系统兼容性,MySQL 8.0要求Windows 10、Windows 11或Windows Server 2016及以上版本。对于较旧的Windows系统,可能需要考虑安装MyS…

📰

AI早报:模型记忆、多模型协作与端侧算力如何重构AI工作流

早上翻完一圈信息流,今天这组新闻有点意思。Claude 记忆打通 Cowork,GPT-5.6 登陆 Kiro,Apple 发布 2nm 芯片——三条消息看着不搭界,放在一起其实是一盘棋:模型层的持久记忆、应用层的多模型协作、硬件层的端侧算力&a…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬