Всем доброго времени суток. Столкнулся с проблеммой: пишу модуль для ядра 2.6. в модуле делаю 2 системных вызова: mq_open и mq_unlink. не могу собраться, пишется undefined на оба вызова. Ядро собрано с поддержкой POSIX Messqge queues. Если я неправильно сделал, то как обращаться к системным вызовам при написании моделя ядра? Ответившим огромное спсибо.
Вот код: // все хедеры подключаются из /lib/modules/`uanme -r`/build/include #define CONFIG_NR_CPUS 1
#ifndef errno static int errno; #endif // errno
//#include <linux/errno.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/mqueue.h> #include <linux/fcntl.h> #include <linux/syscalls.h> #include <linux/unistd.h>
static mqd_t oc_qdesc = 0;
#define MQ_NAME "oc_queue"
int oc_kernelmod_init_module(void) { printk( KERN_DEBUG "Module OC_KernelMod init\n" ); struct mq_attr l_attr; l_attr.mq_maxmsg = 10; l_attr.mq_msgsize = 1024; l_attr.mq_flags = 0; l_attr.mq_curmsgs = 0; oc_qdesc = sys_mq_open(MQ_NAME, O_WRONLY | O_CREAT, 0664, &l_attr); if (oc_qdesc == -1) { printk(KERN_ERR "Failed to open message queue. Errno = %d\n", errno); return 1; } printk(KERN_INFO "Message queue opened with mqd = %d\n", (int)oc_qdesc);
return 0; }
static void oc_kernelmod_exit_module(void) { printk( KERN_DEBUG "Module OC_KernelMod exit\n" ); sys_mq_unlink(MQ_NAME); }
module_init(oc_kernelmod_init_module); module_exit(oc_kernelmod_exit_module);