s.t_seeyou 发表于 2009-08-03 14:25

驱动中可以调用用户态进程吗?

想要在内核驱动中启用一个用户态的shell命令,比方说,在ifconfig eth0 ipaddr up,是否可行?好像在一些书上看到有人这么做,但不知道具体怎么个做法?

hotoldbaby 发表于 2009-08-03 15:25

用驱动模型是否可以?firmware接口?

s.t_seeyou 发表于 2009-08-03 15:38

原帖由 hotoldbaby 于 2009-8-3 15:25 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
用驱动模型是否可以?firmware接口?
不太明白,可以详细一下了,tks!

emmoblin 发表于 2009-08-03 22:26

可以调用,不过没有必要。
驱动中可以做任何事情,为什么要倒用户曾呢?
你要调用用户态程序可以使用
modehelper,忘了怎么拼了

s.t_seeyou 发表于 2009-08-04 09:38

回复 #4 emmoblin 的帖子

你说的是call_usermodehelper 吧, 在 kmod.c 里面,
可以在驱动里面call 它 。 不过 ,有个问题, 它类似 应用编程里的 exec() , 它会结束当前进程,而起一个新的进程, 这样driver部分就完了 。

s.t_seeyou 发表于 2009-08-04 14:37

回复 #1 s.t_seeyou 的帖子

试了一下,问题解决,现在把code 贴出来,方便后来人了
int ret;
        char *envp[]={
      "HOME=/",
        "TERM=vt102",
        "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
        NULL,
        };
        char *argv[]={
      "/bin/sh",
        "-c",
        "/sbin/ifconfig rausb0 192.168.0.134 up",
        NULL,
        };
       if((ret=call_usermodehelper(argv,argv,envp,1)) !=0){
                 DBGPRINT(RT_DEBUG_ERROR, "user mode helper failed to run ret=%d\n",ret);
           }

可以启动用户态进程,ok

garyv 发表于 2009-08-04 17:42

对楼主表示赞赏:lol:
页: [1]
查看完整版本: 驱动中可以调用用户态进程吗?