Xen虚拟化技术详解---第四章----申请超级调用

内核驱动程序privcmd负责将位于GuestOS用户空间的超级调用请求传递到GuestOS内核中,与Linux系统的内核驱动程序相同,该操作要在系统调用ioctl()的帮助下完成。

1、关于ioctl()系统调用:

在Linux系统中,系统调用ioctl()被认为是对常规系统调用的扩充,它通过一个参数间接地给出具体的操作命令,凡是不适合为之专门设置一个系统调用或分配一个系统调用号的操作,都可以利用系统调用ioctl()。此外,在开发基于Linux内核应用而须要对内核加以扩充(通常是增加特殊设备的驱动)时,可以通过增设新的ioctl()操作命令的方法来实现。ioctl在系统中对应的例程sys_ioctl()代码如下:

/*
 * 系统调用ioctl()在Linux内核中对应的服务例程
 * */
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
{
    struct file * filp;
    int error = -EBADF;
    int fput_needed;

    filp = fget_light(fd, &fput_needed);
    if (!filp)
        goto out;

    error = security_file_ioctl(filp, cmd, arg);
    if (error)
        goto out_fput;

    error = vfs_ioctl(filp, fd, cmd, arg);
 out_fput:
    fput_light(filp, fput_needed);
 out:
    return error;
}
  
2、关于copy_from_user()/copy_to_user(),这两个函数主要用来实现内核态和用户态数据的相互拷贝。由于这两个参数会发生阻塞,所以不能用在软、硬件中断中,因而一直将这两个特殊拷贝函数用在类似于系统调用一类的函数中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值