こんにちは、カーネル バージョン 2.4.20 から新しいカーネルをコンパイルしようとしています。さらに、構造の定義 (リンクされたリストとリスト構造で使用されるノードを定義するためのもの) と、新しいシステムコール ファイルで定義された 2 つの関数プロトタイプを含むヘッダー ファイルがあります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.h2つの 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()見つけることができません。とにかく助けてくれてありがとう。