при компилировании gcc выдает WARNING: "do_fork" [`/my_mod.ko] undefined!
а при попытке загрузить модуль dmesg возвращает: insmod: error inserting 'my_mod.ko': -1 Unknown symbol in module
вот собственно код:
Код:
#include <asm/thread_info.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#define STACKSIZE 4096
typedef void (*CH_CALL)(void*);
typedef void** CH_STACK;
typedef void* CH_DATA;
pid_t my_mod_create_child(CH_CALL, CH_DATA, int);
int my_mod_child_fn(CH_DATA);
int init_module(){
pid_t child = my_mod_create_child((CH_CALL)&my_mod_child_fn, "Hello World!\n", STACKSIZE);
printk("<1>RasenHerz: Child PID is %i\n", (int)child);
return 0;
}
void cleanup_module(void){
printk("<1>RasenHerz: Module unloaded.\n");
}
int my_mod_child_fn(CH_DATA data){
printk("<1>RasenHerz: %s", (char*)data);
}
pid_t my_mod_create_child(CH_CALL call_adr, CH_DATA data, int stack_size)
{
struct pt_regs regs = {
.ebx = (unsigned long)call_adr,
.edx = (unsigned long)data,
.xds = __USER_DS,
.xes = __USER_DS,
.xfs = __USER_DS,
.orig_eax = -1,
.xcs = __USER_CS,
.eflags = X86_EFLAGS_IF|X86_EFLAGS_SF|X86_EFLAGS_PF|0x2
};
return (pid_t)(do_fork(SIGCHLD, 0, ®s, 0, NULL, NULL));
}
MODULE_LICENSE("GPL");
все заголовочные файлы присоеденены, код не содерхит явных ошибок. вот тока почему не прилинкована do_fork()?