- 论坛徽章:
- 1
|
本帖最后由 shihyu 于 2015-07-24 20:36 编辑
我是做安卓开发, 最近使用 ftrace 想cat available_filter_functions
android kernel 是 3.10.49 , cat available_filter_functions 会出现下面错误 , 但是我另外版本 android kernel 3.10.69 可以正常使用
adb shell cat /sys/kernel/debug/tracing/available_filter_functions
/system/bin/sh: cat: /sys/kernel/debug/tracing/available_filter_functions: No such device
于是我把 android kernel 3.10.69 ftrace 代码 porting 到 android kernel 3.10.49- kernel/kernel/trace/trace_sched_wakeup.c: In function 'start_wakeup_tracer':
- kernel/kernel/trace/trace_sched_wakeup.c:546:2: warning: passing argument 1 of 'register_trace_sched_migrate_task' from incompatible pointer type [enabled by default]
- error, forbidden warning: trace_sched_wakeup.c:546
- make[3]: *** [kernel/trace/trace_sched_wakeup.o] Error 1
- make[2]: *** [kernel/trace] Error 2
- make[2]: *** Waiting for unfinished jobs....
复制代码 可是从上面讯息看不出是哪trace_sched_wakeup.c 造成 build error,
实在搞不明白是什么原因 , 我目前疑惑点有两个地方 , 还有个问题
1. build error 为什么还是可以编译出 trace_sched_wakeup.o
2. register_trace_sched_migrate_task 再整个内核代码中根本没有实现这函数 , 为什么3.10.6也可以编译过?
3. 我现在被指派弄android kernel 部份我发现很多时候搞不懂 Makefile Kconfig 之类 , 初学kernel 要去研究内核编译结构嘛?
还是应该专注再代码学习?
trace_sched_wakeup.c- static void start_wakeup_tracer(struct trace_array *tr)
- {
- int ret;
- ret = register_trace_sched_wakeup(probe_wakeup, NULL);
- if (ret) {
- pr_info("wakeup trace: Couldn't activate tracepoint"
- " probe to kernel_sched_wakeup\n");
- return;
- }
- ret = register_trace_sched_wakeup_new(probe_wakeup, NULL);
- if (ret) {
- pr_info("wakeup trace: Couldn't activate tracepoint"
- " probe to kernel_sched_wakeup_new\n");
- goto fail_deprobe;
- }
- ret = register_trace_sched_switch(probe_wakeup_sched_switch, NULL);
- if (ret) {
- pr_info("sched trace: Couldn't activate tracepoint"
- " probe to kernel_sched_switch\n");
- goto fail_deprobe_wake_new;
- }
- ret = register_trace_sched_migrate_task(probe_wakeup_migrate_task, NULL);
- if (ret) {
- pr_info("wakeup trace: Couldn't activate tracepoint"
- " probe to kernel_sched_migrate_task\n");
- return;
- }
- wakeup_reset(tr);
- /*
- * Don't let the tracer_enabled = 1 show up before
- * the wakeup_task is reset. This may be overkill since
- * wakeup_reset does a spin_unlock after setting the
- * wakeup_task to NULL, but I want to be safe.
- * This is a slow path anyway.
- */
- smp_wmb();
- if (start_func_tracer(is_graph()))
- printk(KERN_ERR "failed to start wakeup tracer\n");
- return;
- fail_deprobe_wake_new:
- unregister_trace_sched_wakeup_new(probe_wakeup, NULL);
- fail_deprobe:
- unregister_trace_sched_wakeup(probe_wakeup, NULL);
- }
复制代码 |
|