Re: [問題] Kernel build fail

作者: leolarrel (真.粽子無雙)   2015-07-26 13:09:09
※ 引述《yshihyu (yshihyu)》之銘言:
: 最近再android 上使用 ftrace , android kernel 是 3.10.49
: cat available_filter_functions 會出現下面錯誤 ,
: 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 可以正常使用
: 於是我把 android kernel-3.10.69/kernel/ftrace 程式碼 porting 到
: android kernel-3.10.49/kernel/ftrace
: 編譯後出現下面錯誤訊息
: 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....
: 1. 但是有產生出 trace_sched_wakeup.o , build error 為什麼還是可以編譯出
: trace_sched_wakeup.o
: 2. register_trace_sched_migrate_task 再整個kernel中根本沒有實現這函數 , 為
: 什麼3.10.69也可以編譯過? 是不是Makefile 有做什麼flag 阻擋?
: 有辦法像shell script debug 下 -x 參數可以看到詳細執行流程
: 在kernel 中像Makefile問題要怎麼去分析?
: 3. 我現在被指派做kernel 部份我發現很多時候搞不懂 Makefile Kconfig,
: 初學kernel 要去研究內核編譯結構嘛?還是應該專注再程式碼學習?
: 謝謝
gcc 有告訴你原因了
>>passing argument 1 of 'register_trace_sched_migrate_task' from
>>incompatible pointer type
問題出在kernel/kernel/trace/trace_sched_wakeup.c 第546行
A
1)這個錯誤原本只是一個"警告",我猜是因為這樣所以有產生trace_sched_wakeup.o,
會吐出編譯錯誤是因為這個程式碼再編譯的時候被指定了gcc 參數 -Werror,這個gcc參
數表示了,不論任何"警告",都要視為"錯誤",所以你看到了編譯錯誤的訊息
2)有兩個可能,要馬就是3.10.69的code 有這個函數的實作,只是你還沒找到,要馬就是
ftrace 的code 本身有用什麼辦法讓register_trace_sched_migrate_task 相關的code
不會被編譯到,就像你說的用旗標的方式
3)你的C語言的經驗可能還不足,對於kernel的一些怪招難以招架,不過我是建議先研究
kernel 程式碼的部分
:wq

Links booklink

Contact Us: admin [ a t ] ucptt.com