![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
nvme
nvme协议学习
酸菜。
爱生活,爱TXJ。
展开
-
linux 3.13版本nvme驱动阅读记录四
调用完以后在dev目录下也可以看到相关的设备节点了。原创 2023-11-08 17:09:26 · 294 阅读 · 0 评论 -
linux 3.13版本nvme驱动阅读记录三
在调用完这个函数以后,就可以在dev目录下看到响应的设备了。原创 2023-11-08 16:54:43 · 215 阅读 · 0 评论 -
linux 3.13版本nvme驱动阅读记录二
内核3.13版本。该函数主要做了4减事情。1:nvme_dev_map,主要就是pci bar 那一套编程套路2:管理队列的配置3:dev_list?4:io队列的配置。原创 2023-11-06 09:17:10 · 326 阅读 · 0 评论 -
linux 3.13版本nvme驱动阅读记录一
2:dev->entry申请内存,大小是num_possible_cpus() * sizeof(*dev->entry),后面用于保存向量的相关信息,因为nvme是支持多队列的,所以后面可以将队列和特定的中断向量进行绑定,这个后面遇到相关代码再说。5:nvme_set_instance函数的调用,里面怎么实现的不用管,主要知道调用完它以后,dev->instance得到一个值就行了,这个值用于磁盘的命名,比如在dev目录下看到的/dev/nvmexxx就和这个值有关系。原创 2023-11-02 17:33:22 · 383 阅读 · 0 评论 -
nvme prp模型代码处理流程分析
一般来说,如果sge只有1个时,那么只需要在下发的nvme rw命令时填写prp1字段的值,这个值是64bit的,所以这个64bit的字段即需要有dma的地址,也需要有传输的长度,这个64bit所以它需要一些特定的bit记录地址,一些特定的bit记录长度,同理prp2也是。2:需要多个prp时,因为prp_list是只记录地址的,但是有时候一个IO请求时,数据量没那么巧怎么办?1:怎么知道prp2记录的是数据的地址还是prp_list的起始地址?最后看一下,关于选择sgl还是prp的依据。原创 2023-09-22 09:35:56 · 298 阅读 · 0 评论 -
nvme_queue_rq函数分析一
先说结论,这个是为了后面通过pool申请内存时记录这些内存用的,因为这些内存地址是64位的所以这里要用 sizeof(__le64 *) 乘以 nvme_pci_npages_sgl(nseg),至于nvme_pci_npages_sgl(nseg)这个函数不多说了,自己看看也很容易理解,这里要说的是NVME_MAX_KB_SZ和NVME_MAX_SEGS值的大小是可以调整的。接着先看nvme_pci_setup_sgls函数,然后在看nvme_pci_setup_prps函数。这个值是怎么来的呢?原创 2023-09-21 18:07:24 · 359 阅读 · 0 评论 -
nvme各模块间的关系总结
其中,在nvme-core.ko当中,trace.c,multipath.c, multipath.c fault_inject.c是可选的。目录:driver/host/nvme/makefile。原创 2023-09-20 09:53:47 · 175 阅读 · 0 评论 -
NVM Command学习
ubuntu系统安装nvme-cli,可以在应用层发起命令。内核当中描述描述coommand的结构体。原创 2023-08-05 15:50:25 · 1139 阅读 · 0 评论