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

linux kernel map网址

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

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

源码分析

点击Scheduler标签内的kernel/sched/

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

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

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

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

利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第4张图片 结果列出了一处函数定义及两处引用

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

 新窗口打开定义

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

可以看到该函数的源码

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

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

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

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

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

点击do_sched_cfs_period_timer 

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

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

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

依次循环,找出完整的调用链路 利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第12张图片

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

 分支1:调用处

  • kernel/sched/core.c, line 6056

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

void __init sched_init(void)

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

 到达内核入口函数

asmlinkage __visible void __init start_kernel(void)

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

 分支2:调用处

  • kernel/sched/fair.c, line 10085

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

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

 分支1:

  • kernel/sched/autogroup.c, line 71

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

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

 利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第21张图片 ksys_setsid分支2

  • init/do_mounts_initrd.c, line 38

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

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

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

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

 位于

static noinline void __init kernel_init_freeable(void)

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

到达kernel_init 利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第27张图片

 ksys_setsid分支2

  • kernel/sys.c, line 1190

利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第28张图片 宏定义利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第29张图片宏展开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)

搜索不到结果,应该是宏修饰导致 利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路_第30张图片

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

 

你可能感兴趣的:(linux,linux,内核)