Linux nvme驱动分析

该博客详细介绍了Linux内核中nvme驱动的Ioctl处理流程,包括NVME_IOCTL_ID、NVME_IOCTL_ADMIN_CMD和NVME_IOCTL_SUBMIT_IO三个命令的处理。在NVME_IOCTL_ADMIN_CMD中,涉及了用户空间命令信息的复制、DMA总线地址的映射以及数据传输的准备工作。内容涵盖了权限检查、内存页映射到DMA地址以及scatter-gather列表的使用。
摘要由CSDN通过智能技术生成

Ioctl流程:



static int nvme_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
unsigned long arg)
{
struct nvme_ns *ns = bdev->bd_disk->private_data;


switch (cmd) {
case NVME_IOCTL_ID:
return ns->ns_id;
case NVME_IOCTL_ADMIN_CMD:
return nvme_user_admin_cmd(ns->dev, (void __user *)arg);
case NVME_IOCTL_SUBMIT_IO:
return nvme_submit_io(ns, (void __user *)arg);
default:
return -ENOTTY;
}

}




static int nvme_user_admin_cmd(struct nvme_dev *dev,
struct nvme_admin_cmd __user *ucmd)
{
struct nvme_admin_cmd cmd;
struct nvme_command c;
int status, length;
struct nvme_iod *uninitialized_var(iod);


if (!capable(CAP_SYS_ADMIN))

return -EACCES;

        //从用户空间复制给定的命令信息,这个命令比64字节长,包含其他信息

if (copy_from_user(&cmd, ucmd, size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值