关于内核中使用 sys_* 系统调用接口,谁出来解释一下即使是__user 类型也可以使用
时间:2011-02-18
来源:互联网
举例
asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name,
char __user *type, unsigned long flags,
void __user *data);
init/do_mounts.c 中就多次调用。
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
{
int err = sys_mount(name, "/root", fs, flags, data);
if (err)
return err;
sys_chdir((const char __user __force *)"/root");
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
printk("VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
current->fs->pwd.mnt->mnt_sb->s_type->name,
current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
" readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
return 0;
}
内核中直接调用时,给的确是内核空间的地址,个人猜测
static inline unsigned long __must_check copy_from_user(void *to,
const void __user *from,
unsigned long n)
对地址是否为用户空间,内核空间进行了判断, 并作不同的处理,从而规避了可能的问题出现。 这部分没有细看过,
还请高手解释一下!
asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name,
char __user *type, unsigned long flags,
void __user *data);
init/do_mounts.c 中就多次调用。
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
{
int err = sys_mount(name, "/root", fs, flags, data);
if (err)
return err;
sys_chdir((const char __user __force *)"/root");
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
printk("VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
current->fs->pwd.mnt->mnt_sb->s_type->name,
current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
" readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
return 0;
}
内核中直接调用时,给的确是内核空间的地址,个人猜测
static inline unsigned long __must_check copy_from_user(void *to,
const void __user *from,
unsigned long n)
对地址是否为用户空间,内核空间进行了判断, 并作不同的处理,从而规避了可能的问题出现。 这部分没有细看过,
还请高手解释一下!
作者: tuibo 发布时间: 2011-02-18
我刚读内核代码 我的个人理解是 __user 这个宏表示 这个地址在用户空间 ,也就是内核态访问用户空间
作者: qianhulou 发布时间: 2011-02-18
这个判断就是以TASK_SIZE比较下就可以了
作者: amarant 发布时间: 2011-02-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28