免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3293 | 回复: 11
打印 上一主题 下一主题

[内核入门] 有关内核态调用用户态应用问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-04 16:05 |只看该作者 |倒序浏览
本帖最后由 wang_nets 于 2012-12-04 16:06 编辑

我想在内核每次调用sys_init_module系统调用时,创建一个文件,并将lsmod的输出信息保存到这个文件当中。
  1. static int execute(const char *name)
  2. {
  3.         int ret;
  4.         char *envp[] = {
  5.                 "HOME=/",
  6.                 "TERM=linux",
  7.                 "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
  8.                 NULL
  9.         };

  10.         char *argv[] = {
  11.                 "/bin/bash",
  12.                 "-c",
  13.                 (char *)bhname,
  14.                 NULL
  15.         };

  16.         if( ( ret = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC) ) != 0  )
  17.                 printk(KERN_ERR"run user application <%s> failed", bhname);

  18.         return ret;
  19. }

  20. static int create_view(int cmd)
  21. {
  22.         int ret;
  23.         switch( cmd )
  24.         {
  25.         case CREATE_MODULE_VIEW:
  26.         {
  27.                 ret = execute("touch /home/test_file;lsmod > /home/test_file");
  28.                 if(ret != 0)
  29.                         printk(KERN_ERR"create the module failed");
  30.         }
  31.         break;
  32.              ...
  33.         default:
  34.                 ret = -ENOSYS;
  35.                 break;
  36.         }
  37.         return ret;
  38. }
复制代码
以上代码编译成内核可以执行,完全没问题。但是写到内核里,一运行就死机。请问各位是什么原因?

论坛徽章:
0
2 [报告]
发表于 2012-12-07 14:50 |只看该作者
没有哪位大神遇到过这种问题么?

论坛徽章:
0
3 [报告]
发表于 2012-12-07 21:52 |只看该作者
你可以使用kdump+crash这两个工具,来看内核是在什么地方崩溃。记得要安装内核的调试包

论坛徽章:
0
4 [报告]
发表于 2012-12-09 21:15 |只看该作者
回复 3# justlinux2010
好的,谢谢,我调试下看看


   

论坛徽章:
0
5 [报告]
发表于 2012-12-25 10:19 |只看该作者
回复 3# justlinux2010
再次请教一下,我一运行就死机,没有生成vmcore文件...

   

论坛徽章:
0
6 [报告]
发表于 2012-12-26 09:48 |只看该作者
你用service kdump restart 看kdump服务是否能成功启动,如果启动成功,检查内核调试包是否安装回复 5# wang_nets


   

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
7 [报告]
发表于 2012-12-26 13:07 |只看该作者
回复 1# wang_nets


    把执行的用户程序该简单些,先确认下calluserhelper能够正确执行?

论坛徽章:
0
8 [报告]
发表于 2012-12-26 14:30 |只看该作者
回复 6# justlinux2010
都成功了。之前在3.4.20内核上也成功了。但是加上xen之后还是不可以,直接运行echo c > /proc/sysrq-trigger重启后并没有生成vmcore文件。运行的程序后干脆直接死机了....   

论坛徽章:
0
9 [报告]
发表于 2012-12-26 14:32 |只看该作者
回复 7# bensenq
我试了好多方法,最后直接执行"/bin/touch /home/test_file”也不可以,就是在call_usermodehelper那出错的....


   

论坛徽章:
0
10 [报告]
发表于 2013-07-10 14:00 |只看该作者
不知道这个问题解决了没?

在 2.6.34.10 上遇到类似的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP