【NVMe 专题 probe详解】

Nvme Probe

概述

Nvme Probe 主要功能就是初始画探测pcie总线上的设备 并将该设备初始化建立连接,方便后期host 和 device 之间的数据通信

  • 开始之前思考问题 :
  1. 初始化流程是什么样子的?
  2. 在nvme 控制器初始话之前做了哪些工作,初始化后有做了哪些工作,为什么这样做呢?

1 Nvme Probe 流程 开胃前菜 主要数据结构介绍

struct device
struct pci_dev
struct nvme_dev
三者之间宏观意义的从属联系
nvme 设备和 pci 都属于device 通用设备,二者之间也是通过device 来建立关系的。因为我们知道结构体device 中支持Koject 设备树 中断等等一个设备拥有的所有资源,这就内核去用最简化的代码去管理设备,而不是单独去为某个设备搞一个管理子系统

struct device
struct pci_dev
struct nvme_dev
在linux系统它是所有设备的通用结构,
可以和相关特殊设备之间建立联系比如本文中提到NVMe
PCI
pci 下面也可以挂在很多设备比如
USB 网卡 声卡 GPU ASIC nvme存储设备等等

- Device
pci_set_drvdata(&pdev,data)
关键数据结构

  • pci_dev
    struct pci_dev {
   
        struct list_head bus_list;	/* Node in per-bus list */
        struct pci_bus	*bus;		/* Bus this device is on */
        struct pci_bus	*subordinate;	/* Bus this device bridges to */
        struct proc_dir_entry *procent;	/* Device entry in /proc/bus/pci */
	    struct pci_slot	*slot;		/* Physical slot this device is in */
        unsigned int	devfn;		/* Encoded device & function index */
	    unsigned short	vendor;
	    unsigned short	device;
        ..
        struct pci_driver *driver;	
        struct device	dev;			/* Generic device interface */
    }
  • struct device dev;
struct device {
   
    struct kobject kobj;
	struct device		*parent;    
    void		*driver_data;	/* Driver data, set and get with dev_set_drvdata/dev_get_drvdata */
    ...
    int		numa_node;	/* NUMA node this device is close to */
    struct device_node	*of_node; /* associated device tree node */

}</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值