免费注册 查看新帖 |

Chinaunix

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

[内核]为什么提示说sys_mkdir没有定义啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-17 08:54 |只看该作者 |倒序浏览
程序如下:
#include <linux/types.h>
#include <linux/syscalls.h>
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");

static int __init start(void)
{
    printk("init\n");
    int mkdir_err = sys_mkdir("/tmp/wh", 0700);
    if(mkdir_err < 0)
        {
              printk("erro\n");
              return -1;
         }
    return 0;
}

static void __exit end(void)
{
    printk("exit\n");
}

module_init(start);
module_exit(end);

报错如下:
WARNING: "sys_mkdir" [/home/leowang/test/sys/mkdir.ko] undefined!

论坛徽章:
0
2 [报告]
发表于 2006-10-17 09:13 |只看该作者
是不是内核还需要配置一下啊?

论坛徽章:
0
3 [报告]
发表于 2006-10-17 16:04 |只看该作者
init/main.c中就用到了系统调用open,dup,close
它们的定义在/include/asm-i386/unistd.h中
你看一下,然后自己写一个sys_mkdir的定义

论坛徽章:
0
4 [报告]
发表于 2006-10-17 16:49 |只看该作者
我在unistd.h中并没有找到sys_mkdir的定义啊,只有__NR_mkdir
我在linux/syscalls.h找到了sys_mkdir的原型,在namei.c中找到了它的定义。
是不是要我照着这个写一个啊?
为什么内核不能直接调用呢?

论坛徽章:
0
5 [报告]
发表于 2006-10-17 18:47 |只看该作者
你把
long sys_mkdir(const char * pathname,int mode);
这一行加入你的程序头部看行否?

论坛徽章:
0
6 [报告]
发表于 2006-10-17 18:54 |只看该作者
其实你可以有两种方式使用sys_mkdir,一个是系统调用,一个是内核导出函数
1.系统调用的方法就象unistd.h中的那样,写一段汇编代码,调用int $0x80
long sys_mkdir(const char * pathname,int mode);
2.内核导出函数的方法就是加一行函数申明
long sys_mkdir(const char * pathname,int mode);
让gcc编译成功,再在insmod时进行连接.

论坛徽章:
0
7 [报告]
发表于 2006-10-17 19:18 |只看该作者
原帖由 qtdszws 于 2006-10-17 18:47 发表
你把
long sys_mkdir(const char * pathname,int mode);
这一行加入你的程序头部看行否?


符号被屏蔽了?

论坛徽章:
0
8 [报告]
发表于 2006-10-18 08:37 |只看该作者
其实我想应该不是声明的问题,因为我试着把sys_mkdir的参数多加了一个,编译的时候会报错,说明它已经找到了sys_mkdir的声明。
开始提示说没有找到定义,可能是因为没有找到它的实现函数,所以报错,是不是这样啊?

论坛徽章:
0
9 [报告]
发表于 2006-10-18 08:39 |只看该作者
其实编译是成功的,但是生成ko文件的时候才报错,应该是没有找到函数实现

论坛徽章:
0
10 [报告]
发表于 2006-10-18 09:57 |只看该作者
搜论坛旧帖,如何在内核空间调系统调用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP