kernel 2.6 проблемы с ниже приведенным кодом (на ядрах 2.4 код работает)
#include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #include <asm/segment.h> #include <asm/uaccess.h> #include <linux/unistd.h>
// организую системный вызов static inline _syscall3(int, execve, char *, file, char **, argv, char**, envp) ;
int init_module() { char *ar[3] ; // к примеру будет выполнять команду ls ar[0] = "/bin/ls" ; ar[1] = "/etc" ; ar[2] = 0 ; // для выполнения системного вызова переходим в user space static mm_segment_t fs ; fs = get_fs() ; set_fs(KERNEL_DS) ; // вызываем execve(*ar, ar, NULL) ; set_fs(fs) ; printk("MOD_NAME loaded\n") ; return 1 ; }
void cleanup_module() { return ; }
компилиться код без проблем, но при загрузке в ядро выводиться сообщение insmod: error inserting 'mod.o': -1 Unknown symbol in module когдаже я комментирую строку execve(*ar, ar, NULL) ; модуль загружаеться без проблем. Подскажите плз где ошибка? может есть какието иные пути запуска системных вызовов из kernel space?