trace_init()
kernel/trace/trace.c
void __init trace_init(void) { if (tracepoint_printk) { tracepoint_print_iter = kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL); if (WARN_ON(!tracepoint_print_iter)) tracepoint_printk = 0; } tracer_alloc_buffers(); trace_event_init(); }
CONFIG_TRACING 커널 옵션이 설정된 경우에 빌드되어 동작되며 트레이스용 버퍼 및 이벤트를 초기화한다.
- 성능상의 이유로 production 커널을 빌드시에는 이 옵션을 사용하면 안된다.
- if (tracepoint_printk) {
- “tp_printk=on” 등의 커널 파라메터가 동작된 경우
- tracepoint_print_iter = kmalloc(sizeof(*tracepoint_print_iter), GFP_KERNEL);
- trace_iterator 구조체 공간을 할당받는다.
- tracer_alloc_buffers();
- trace용 per-cpu 버퍼를 할당받고 초기화한다.
- (생략)
- trace용 per-cpu 버퍼를 할당받고 초기화한다.
- trace_event_init();
- CONFIG_EVENT_TRACING 커널 옵션을 사용하는 경우 이벤트 트레이스를 위해 초기화한다.
- (생략)
- CONFIG_EVENT_TRACING 커널 옵션을 사용하는 경우 이벤트 트레이스를 위해 초기화한다.
“tp_printk=” 커널 파라메터
static int __init set_tracepoint_printk(char *str) { if ((strcmp(str, "=0") != 0 && strcmp(str, "=off") != 0)) tracepoint_printk = 1; return 1; } __setup("tp_printk", set_tracepoint_printk);
“tp_printk=0” 및 “tp_printk=off”가 아닌 경우 전역 tracepoint_printk를 1로 설정하여 trace 출력이 가능하게한다.