您好,我正在尝试从内核版本 2.4.20 编译我的新内核。此外,我有一个头文件,其中包括结构的定义(一个用于定义链表和列表结构使用的节点)和两个在我的新系统调用文件中定义的函数原型sample.c
。但是,当我在全局范围内定义一个列表并尝试sched.c
在函数中进行分配时,sched_init()
我的新内核版本没有打开。它在开始之前就卡住了。在这里你可以看到我的头文件和系统调用文件。
/* project_header.h */
#ifndef __LINUX_PROJECT_HEADER_H
#define __LINUX_PROJECT_HEADER_H
#include <linux/linkage.h>
#include <linux/vmalloc.h>
#endif
typedef struct node{
struct node* next;
struct node* prev;
long project_pid;
long project_ticket_number;
}PROJECT_NODE;
typedef struct{
PROJECT_NODE* head;
PROJECT_NODE* tail;
int list_size;
}PROJECT_LIST;
PROJECT_LIST* project_init_list(void);
void project_add_node(PROJECT_LIST*, long);
这是我实现的系统调用sample
。如您所见,我必须在这里定义函数,原型在project_header.h
其中,由两个 system_call 文件调用,它们是fork.c
和sched.c
/* sample.c */
#include <linux/sample.h>
#include <linux/project_header.h>
long int maximum_ticket_number=0;
extern PROJECT_LIST* project_list;
PROJECT_LIST* project_init_list(void){
PROJECT_LIST* list = vmalloc(sizeof(*list));
list->list_size=0;
list->head = NULL;
list->tail = NULL;
return list;
}
void project_add_node(PROJECT_LIST* list, long id){
PROJECT_NODE* pnew;
pnew = vmalloc(sizeof(*pnew));
pnew->project_pid=id;
maximum_ticket_number++;
pnew->project_ticket_number=maximum_ticket_number;
if(list->list_size==0){ // Assume list is empty
list->head = pnew;
list->tail = pnew;
list->list_size++;
}
else {
list->tail->next = pnew;
pnew->prev = list->tail;
list->tail = pnew;
list->list_size++;
}
}
asmlinkage void sys_sample(void){ //System call does print the inital list size
printk("LIST->SIZE = %d\n", project_list->list_size);
return;
}
这是添加到的部分sched.c
/* sched.c */
.
.
#include <linux/project_header.h>
#include <linux/sample.h>
PROJECT_LIST* project_list; // Create a list globally
extern PROJECT_LIST* project_init_list(void); // Provide to call project_init_list function which returns a list properly
.
.
void __init sched_init(void){
.
.
project_list = vmalloc(sizeof(*project_list)); //Allocate space and initialize the variables of main list
.
.
这是内核启动之前我当前情况的快照
我确定问题出在sched_init()
功能上,但我找不到。如果您能提供帮助和感谢,我将不胜感激。