hell-o! собираю тут сабж по туториалу одного весьма уважаемого ресурса и натыкаюсь на еррор: весь код примера: Код (Text): #include <sys/types.h> #include <sys/param.h> #include <sys/proc.h> #include <sys/module.h> #include <sys/sysent.h> #include <sys/kernel.h> #include <sys/systm.h> /*this is the function which represents our system call*/ static int hello (struct proc *p, void *arg) { printf ("hello kernel\n"); return 0; } /*on FreeBSD every system call is described by a sysent structure, which holds the corresponding system call function (here hello) and the appropriate count of arguments (here 0)*/ static struct sysent hello_sysent = { //<--видимо тут ругается 0, /* sy_narg */ hello /* sy_call */ }; /*every system call has a certain number (called slot or offset on BSD). This number represents the index in the global sysent list holding every syscall. BSD is able to search a free slot for a syscall (by setting it to NO_SYSCALL) which is used here.*/ static int offset = NO_SYSCALL; /*this function can be compared to the init_module & cleanup_module functions on Linux. The differentiation is done via the cmd variable.*/ static int load (struct module *module, int cmd, void *arg) { int error = 0; /*what do we have?*/ switch (cmd) { /*we have a load*/ case MOD_LOAD : printf ("syscall loaded at %d\n", offset); break; /*we have an unload*/ case MOD_UNLOAD : printf ("syscall unloaded from %d\n", offset); break; default : error = EINVAL; break; } return error; } /*This is the most tricky part of this module. That macro will install the module and calls the required functions. We will take a deeper look at this later.*/ SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL); собираю через make след. Makefile-ом: люди мудрые, подскажите, что я не учел итд? спасибо
сейчас глянул на екзамплы в /usr/share/examples/kld/syscall/module/syscall.c. там имеем следующее: Код (Text): static int hello (struct thread *td, void *arg) { printf ("hello kernel\n"); return 0; } а также в /sys/sys/sysent.h имеем следующее: Код (Text): typedef int sy_call_t(struct thread *, void *); struct sysent { /* system call table */ int sy_narg; /* number of arguments */ sy_call_t *sy_call; /* implementing function */ au_event_t sy_auevent; /* audit event associated with syscall */ }; выходит проблема была в некорректной ф-ции в екзампле (out-of-date example?), т.к. выше в посте у ф-ции аргумент первый совсем другого типа. досадно, что мало актуальных статей!!! все приходится приводить в нормальный вид в соответствии с текущими апдейтнутыми рулесами етц етц.. (