利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路

news2024/12/25 1:18:06

linux kernel map网址

https://makelinux.github.io/kernel/map/

源码分析

点击Scheduler标签内的kernel/sched/

左侧菜单,选择一个内核版本

Search Identifier搜索框输入要搜索的函数,回车执行搜索

 结果列出了一处函数定义及两处引用

 新窗口打开定义

可以看到该函数的源码

 回到上个页面,点击一处引用,查看调用处

 网页会自动显示到调用处,并有色块标注

点击do_sched_cfs_period_timer 

网页跳转到该函数搜索结果页面,继续点击引用

依次循环,找出完整的调用链路 

 

 分支1:调用处

  • kernel/sched/core.c, line 6056

void __init sched_init(void)

 到达内核入口函数

asmlinkage __visible void __init start_kernel(void)

 分支2:调用处

  • kernel/sched/fair.c, line 10085

 

 分支1:

  • kernel/sched/autogroup.c, line 71

 

  ksys_setsid分支2

  • init/do_mounts_initrd.c, line 38

 

 

 位于

static noinline void __init kernel_init_freeable(void)

到达kernel_init 

 ksys_setsid分支2

  • kernel/sys.c, line 1190

 宏定义宏展开SYSCALL_DEFINED(setsid)

SYSCALL_METADATA(setsid, 0); \
asmlinkage long sys_setsid(void); \
ALLOW_ERROR_iNJECTION(sys_setsid, ERRNO); \
asmlinkage long sys_setsid(void)

 参考:

https://blog.csdn.net/hknaruto/article/details/129857542

利用gcc展开

gcc \
-E \
-Wp,-MD,kernel/.sys.o.d \
-nostdinc \
-isystem \
/usr/lib/gcc/aarch64-linux-gnu/7.3.0/include \
-I./arch/arm64/include \
-I./arch/arm64/include/generated \
-I./include \
-I./arch/arm64/include/uapi \
-I./arch/arm64/include/generated/uapi \
-I./include/uapi \
-I./include/generated/uapi \
-include \
./include/linux/kconfig.h \
-include \
./include/linux/compiler_types.h \
-D__KERNEL__ \
-mlittle-endian \
-Wall \
-Wundef \
-Wstrict-prototypes \
-Wno-trigraphs \
-fno-strict-aliasing \
-fno-common \
-fshort-wchar \
-Werror-implicit-function-declaration \
-Wno-format-security \
-std=gnu89 \
-fno-PIE \
-mgeneral-regs-only \
-DCONFIG_AS_LSE=1 \
-fno-asynchronous-unwind-tables \
-Wno-psabi \
-mabi=lp64 \
-fno-delete-null-pointer-checks \
-Wno-frame-address \
-Wno-format-truncation \
-Wno-format-overflow \
-Wno-int-in-bool-context \
-O2 \
--param=allow-store-data-races=0 \
-Wframe-larger-than=2048 \
-fstack-protector-strong \
-Wno-unused-but-set-variable \
-Wno-unused-const-variable \
-fno-omit-frame-pointer \
-fno-optimize-sibling-calls \
-fno-var-tracking-assignments \
-g \
-gdwarf-4 \
-pg \
-fno-inline-functions-called-once \
-Wdeclaration-after-statement \
-Wno-pointer-sign \
-fno-strict-overflow \
-fno-merge-all-constants \
-fmerge-constants \
-fno-stack-check \
-fconserve-stack \
-Werror=implicit-int \
-Werror=strict-prototypes \
-Werror=date-time \
-Werror=incompatible-pointer-types \
-Werror=designated-init \
-DKBUILD_BASENAME=\"sys\" \
-DKBUILD_MODNAME=\"sys\" \
-o \
/tmp/sys.E.c \
"kernel/sys.c"

查看/tmp/sys.E.c

static const char *types__setsid[] = { }; static const char *args__setsid[] = { }; static struct syscall_metadata __syscall_meta__setsid; static struct trace_event_call __attribute__((__used__)) event_enter__setsid = { .class = &event_class_syscall_enter, { .name = "sys_enter""      _setsid", }, .event.funcs = &enter_syscall_print_funcs, .data = (void *)&__syscall_meta__setsid, .flags = TRACE_EVENT_FL_CAP_ANY, }; static struct trace_event_call __attribute__((__used__)) __attribute__((section("_ftrace_events"))) *__event_enter__setsid = &event_enter__setsid      ;; static struct syscall_metadata __syscall_meta__setsid; static struct trace_event_call __attribute__((__used__)) event_exit__setsid = { .class = &event_class_syscall_exit, { .name = "sys_exit""_setsid", }, .event.funcs = &exit_syscall_print_funcs, .data = (void *)&__syscall_m      eta__setsid, .flags = TRACE_EVENT_FL_CAP_ANY, }; static struct trace_event_call __attribute__((__used__)) __attribute__((section("_ftrace_events"))) *__event_exit__setsid = &event_exit__setsid;; static struct syscall_metadata __attribute__((__used__)) __syscall_meta__setsid = {       .name = "sys""_setsid", .syscall_nr = -1, .nb_args = 0, .types = 0 ? types__setsid : ((void *)0), .args = 0 ? args__setsid : ((void *)0), .enter_event = &event_enter__setsid, .exit_event = &event_exit__setsid, .enter_fields = { &(__syscall_meta__setsid.enter_fields), &(__sysca      ll_meta__setsid.enter_fields) }, }; static struct syscall_metadata __attribute__((__used__)) __attribute__((section("__syscalls_metadata"))) *__p_syscall_meta__setsid = &__syscall_meta__setsid;; long __arm64_sys_setsid(const struct pt_regs *__unused); ; long __arm64_sys_setsid(      const struct pt_regs *__unused)
{
    return ksys_setsid();
}

最终生成的函数名long __arm64_sys_setsid( const struct pt_regs *__unused)

搜索不到结果,应该是宏修饰导致 

 

 

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

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

相关文章

14.Java面向对象----Object类

Object类 Java中Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类&am…

【Spark】介绍 快速入门

目录 介绍 Spark and Hadoop Spark or Hadoop 核心模块 Spark Core Spark SQL Spark Streaming Spark MLlib Spark GraphX 快速上手 来源: 介绍 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark and Hadoop HadoopHadoop 是由 java…

Linux 网络I/O模型

一、Linux下面的I/O模型 Linux下面一共有五种可以使用的I/O模型,如下: 1)阻塞式I/O 2)非阻塞式I/O 3)I/O多路复用(select与epoll) 4)信号驱动式I/O 5)异步I/O 下面重点介…

知识图谱-实体抽取

命名实体识别(Named Entity Recognition,简称NER)是信息抽取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。一般来说,命名实体识别的任务就是识别出待处…

【产品设计】电商后台系统设计--库存

电商后台产品,涉及众多模块,而以商品、订单、库存为核心模块,模块间存在大量交互。库存决定商品是否可售卖,下单是否能成功。 电商中的库存管理是为了保证前台商品的正常售卖,库存的管理和仓库密不可分,而仓…

Midjourney详细注册和使用教程

来源:Midjoureny详细注册使用教程【探索ChatGPT】 Midjourney,用户只需要输入一段图片的文字描述,即可生成精美的绘画,相信了解Midjourey的小伙伴已经对它强大之处而赞叹! 下面是用通俗易懂的步骤教会大家如何注册和…

【严蔚敏版数据结构】你分得清顺序栈和链栈吗

【严蔚敏版数据结构】顺序栈和链栈的剖析和对比一、顺序栈和链栈的存储结构二、顺序栈和链栈的初始化三、顺序栈和链栈的判断是否栈空四、顺序栈和链栈的入栈五、顺序栈和链栈的弹栈六、顺序栈和链栈的取栈顶元素一、顺序栈和链栈的存储结构 顺序栈的存储结构图如下&#xff1…

Windows 10系统,JDK安装与环境变量配置

引言 随着互联网的日益发展, 越来越多的小伙伴加入了程序员这个行列, 也有很多小伙伴正计划学习编程, 学习Java 那么对于新手来说, 第一件事就是下载安装Java开发工具包, 也就是JDK, 今天我们就来一起详细的说说怎么操作 JDK版本描述 学习环境中, 我们通常使用较新版本的JD…

支持PHP运行环境和系统防火墙配置管理,1Panel开源面板v1.1.0发布

2023年4月17日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.1.0版本。 在这一版本中,1Panel新增支持PHP运行环境、系统防火墙配置管理以及同步本地应用等功能,并带来了40多项功能更新和问题修复,感谢各位社区用户的反…

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测 目录回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网…

nvm管理node

开发的时候node版本不兼容问题频频出现,就得安装多个版本node,nvm管理起来就很方便。 首先nvm是一个nodejs的版本管理工具。为了解决node.js各种版本存在不兼容现象可以通过它安装和切换不同版本的node.js。 打开CMD,输入命令 nvm &#xf…

密码基础知识——密码的概念与作用

密码基础知识——密码的概念与作用密码的概念与作用密码的概念密码的重要作用密码的功能密码应用技术框架密码应用中的安全性问题密码应用安全性评估的基本原理信息安全管理标准PDCA 管理循环信息安全风险评估定义信息安全风险评估的目的和用途信息安全风险评估的基本要素密码的…

Centos 7 安装系列(10):ElasticSearch 8.6.2

ElasticSearch 部署一、系统环境二、解压安装2.1 解压压缩包2.2 修改配置文件2.3 添加操作用户2.4 启动2.5 开放端口2.6 开机自启动配置2.7 设置用户名密码认证三、总结一、系统环境 操作系统:Centos 7 已配置环境:空 二、解压安装 2.1 解压压缩包 上…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平

【原文链接】:基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土壤、农业、大气等领域的数据分析https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537467&idx4&sn10c4c12897282daf5320efae05caf3a4&chksmfe689551…

黑马2023JavaScript笔记1

一、js知识点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

LoRA 指南之 LyCORIS 模型使用

LoRA 指南之 LyCORIS 模型使用 在C站看到这个模型&#xff0c;一眼就非常喜欢 在经历几番挣扎之后终于成功安装 接下来&#xff0c;我们一起开始安装使用吧&#xff01; 1、根据原作大佬的提示&#xff0c;需要安装两个插件 https://github.com/KohakuBlueleaf/a1111-sd-web…

蓝桥杯之我见

前言 关于蓝桥杯&#xff0c;应该有很多人不知道这是一个什么样的比赛。但是作为一名合格的程序员&#xff0c;就算之前没有参加过蓝桥杯的比赛&#xff0c;或者没听说过蓝桥杯&#xff0c;读完本篇文章再说不知道蓝桥杯&#xff0c;就有点不合适了吧&#xff1f;&#xff01;那…

网络作业6【计算机网络】

网络作业6【计算机网络】前言推荐网络作业6一. 单选题&#xff08;共11题&#xff0c;33分&#xff09;二. 多选题&#xff08;共2题&#xff0c;10分&#xff09;三. 判断题&#xff08;共1题&#xff0c;1分&#xff09;四. 阅读理解&#xff08;共1题&#xff0c;56分&#…

DY-30型电压继电器DY-36

DY-30系列电压继电器 DY-32电压继电器&#xff1b;DY-36电压继电器&#xff1b; DY-33电压继电器&#xff1b;DY-37电压继电器&#xff1b; DY-34电压继电器&#xff1b;DY-38电压继电器&#xff1b; DY-31电压继电器&#xff1b;DY-35电压继电器&#xff1b; DY-32/60C电压继…

npm与node版本不匹配问题解决思路(一百五十八)

1.报错 npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: ‘electron-packager17.1.1’, npm WARN EBADENGINE required: { node: ‘> 14.17.5’ }, npm WARN EBADENGINE current: { node: ‘v12.22.9’, npm: ‘8.5.1’ } npm WARN EBADENGINE } np…