Я читаю Книгу Роберта Лава Linux Разработка ядра .
Он использует ядро 2.6.33 для демонстрации.
Я просматривал определенные части исходного кода и не могу понять, где находится исходное определение многих вещей. Многие вещи просто используются, например, «magi c», и я не могу найти определение.
Один пример:
static struct sched_entity *__pick_next_entity(struct cfs_rq *cfs_rq)
{
struct rb_node *left = cfs_rq->rb_leftmost;
if (!left)
return NULL;
return rb_entry(left, struct sched_entity, run_node);
}
static struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
{
struct rb_node *last = rb_last(&cfs_rq->tasks_timeline);
if (!last)
return NULL;
return rb_entry(last, struct sched_entity, run_node);
}
Это находится в kernel/sched_fair.c
строках 384
и 394
в ядре 2.6.33.
Откуда run_node
?
Я использовал grep для всей исходной базы поверх здесь , и я не нашел никакого определения run_node
, которое позволило бы использовать его таким образом.
В структуре sched_entity
есть объявление , но за его пределами нет ничего, что позволило бы использовать его вот так.
Я не могу понять, как все устроено, это действительно сбивает с толку.
Что происходит?