Sto imparando a scrivere i moduli del kernel per linux come principiante. Quello che sto cercando di fare è scrivere ogni attività e il suo processo figlio nel log del kernel usando l'algoritmo DFS. Ma quando compilo il codice utilizzando Makefile
, mostra l'errore di cui sopra:La dichiarazione di funzione non è un prototipo in C
function declaration isn’t a prototype [-Werror=strict-prototypes]
struct task_struct *current;
Essa sottolinea la parola task_struct
alla funzione DFS. Ecco il mio codice:
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/sched.h>
# include <linux/list.h>
void DFS (struct task_struct *task)
{
struct task_struct *current;
struct list_head *list;
list_for_each (list, &task->children)
{
current = list_entry(list, struct task_struct, sibling);
printk(KERN_INFO "%d\t%d\t%s \n", (int)current->state, current->pid, current->comm);
if (current != NULL)
{
DFS(current);
}
}
}
int DFS_init(void)
{
printk(KERN_INFO "Loading the Second Module...\n");
printk(KERN_INFO "State\tPID\tName\n");
DFS(&init_task);
return 0;
}
void DFS_exit(void)
{
printk(KERN_INFO "Removing the Second Module...\n");
}
Qualcuno sa come risolvere questo problema ??
Perché _votedown_ ?? Puoi spiegare ?? –
C consente 'corrente'. Forse c'è qualcosa nelle intestazioni che hai incluso? –
Nel kernel, 'current' è una variabile visibile globalmente (puntatore) che punta alla voce della tabella del processo corrente. – wildplasser