Chinaunix

标题: 从内核态调用用户空间的程序 [打印本页]

作者: marksman201    时间: 2010-02-23 16:33
标题: 从内核态调用用户空间的程序
在内核态调用用户空间本身不是一个好的想法,这样做可能会影响内核的稳定.如果确实有这种需求,可以考虑在用户空间做一个deamon程序来实现类似的功能.
不过,这里还是给一个例子,来实现从内核调用用户空间的程序,仅当娱乐:
#include
#include
#include
static int my_execve(const char *filename,char *const argv[], char *const envp[])
{
    long __res;
    __asm__ volatile ("int $0x80"
            :"=a" (__res)
            : "0" (__NR_execve),"b"
            ((long)(filename)),"c"((long)(argv)),"d"((long)(envp)));
    return (int) __res;
}
static int exec_cmd(void *filename)
{
        //may be need envp and argv
    //char *envp[] = { "HOME=/","TERM=linux","PATH=/sbin:/usr/sbin:",NULL};
    //char *argv[] = { "/bin/ls","-l","/tmp/",NULL};
    int ret;
    mm_segment_t old_fs = get_fs();
    set_fs(KERNEL_DS);
    ret = my_execve((char*)filename,NULL,NULL);
    printk("execve failed :%s\n",(char*)filename);
    set_fs(old_fs);
    return ret;
}
int init_module(void)
{
    int pid;
    pid  = kernel_thread(exec_cmd,"./helloworld",0);
    if( pid < 0) {
        printk(KERN_ERR "kernel_thread failed.\n");
        return pid;
    }
    return 0;
}
void cleanup_module(void)
{
    return;
}
在用户空间随便写一个helloworld程序,然后和这个模块放在同一个目录下,就可以了.
最后还是建议最好不要这样做.
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86590/showart_2185233.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2