Nazdar,
na
fóru Debianu jsem našel krásnej a vcelku jednoduchej návod, kterak zkompilovat kernel, ale nějak se mi nedaří.
Odtud jsem stáhnul kernel 2.6.32 a na něj patch (ale patchoval jsem trochu jinak, automatizovaně-
bzcat /usr/src/patch-2.6.32.bz2 | patch -p1 -E -t), konfigurace se mi pravděpodobně povedla (RT SMP kernel s podporou pouze mýho HW), ale během kompilace na mne vyskočila chyba, že ve dvou souborech jsou nějaký duplicitní definice, což se mi povedlo opravit, ale s další chybou si nevím rady:
CC kernel/trace/trace_output.o
kernel/trace/trace_output.c: In function ‘seq_print_userip_objs’:
kernel/trace/trace_output.c:416: error: ‘const struct userstack_entry’ has no member named ‘tgid’
kernel/trace/trace_output.c: In function ‘trace_print_lat_fmt’:
kernel/trace/trace_output.c:503: error: ‘struct trace_entry’ has no member named ‘lock_depth’
kernel/trace/trace_output.c:506: error: ‘struct trace_entry’ has no member named ‘lock_depth’
make[3]: *** [kernel/trace/trace_output.o] Error 1
make[2]: *** [kernel/trace] Error 2
make[1]: *** [kernel] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.32.666'
make: *** [debian/stamp/build/kernel] Error 2
trace_output.c, řádky 409-420 (jakási chyba na ř. 416):
if (trace_flags & TRACE_ITER_SYM_USEROBJ) {
struct task_struct *task;
/*
* we do the lookup on the thread group leader,
* since individual threads might have already quit!
*/
rcu_read_lock();
task = find_task_by_vpid(entry->tgid);
if (task)
mm = get_task_mm(task);
rcu_read_unlock();
}
Ten samej soubor, řádky 477-507 (jakási chyba na ř. 503, 506):
int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
{
int hardirq, softirq;
int ret;
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
if (!trace_seq_printf(s, "%c%c%c",
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
'X' : '.',
(entry->flags & TRACE_FLAG_NEED_RESCHED) ?
'N' : '.',
(hardirq && softirq) ? 'H' :
hardirq ? 'h' : softirq ? 's' : '.'))
return 0;
if (entry->preempt_count)
ret = trace_seq_printf(s, "%x", entry->preempt_count);
else
ret = trace_seq_putc(s, '.');
if (!ret)
return 0;
if (entry->lock_depth < 0)
return trace_seq_putc(s, '.');
return trace_seq_printf(s, "%d", entry->lock_depth);
}
Google nic relevantního neví, já se v céčku nevyznám, nesetkal se s tím někdo?