list_head не распознается при компиляции ядра Linux - PullRequest
0 голосов
/ 20 июня 2019

Я компилирую модифицированную версию ядра, в которой есть программа на С, которую я сделал.Я новичок в этом, и я не могу избавиться от этой ошибки:

ошибка: неизвестное имя типа 'list_head';Вы имели в виду 'rcu_head'?

Вот строки, ведущие к строке с ошибкой:

//directives
#include <linux/sched.h>
#include <linux/list.h>
#include <linux/sched/task.h>
#include <asm-generic/barrier.h>
#include <linux/resource.h>

#define set_task_state(tsk, state_value)            \
    do {                            \
        (tsk)->task_state_change = _THIS_IP_;       \
        smp_store_mb((tsk)->state, (state_value));      \
    } while (0)

#define PROC_NUM 50
#define MILSEC_GAP 2

*(delta_entry) get_delta_entry(int num, *linked_list);
int get_delta_time(list_head *linked_list, delta_entry *de, int max);

Я знаю, list.h включает в себя types.h, который определяет list_head.Что я делаю не так?

1 Ответ

1 голос
/ 20 июня 2019

Посмотрев на types.h, мне кажется, что проблема в следующем: list_head - это имя структурного тега, а не типа.Поэтому вам нужно написать struct list_head ..., а не просто list_head ....Другими словами, прототип функции должен читать

int get_delta_time(struct list_head *linked_list, delta_entry *de, int max);

и всякий раз, когда вы хотите переменную, вы должны объявить ее как

struct list_head head;
head.next = ...

См. http://c -faq.com / struct / typedef.html и http://c -faq.com / struct / impltypedef.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...