文章目录
Nvme Probe
概述
Nvme Probe 主要功能就是初始画探测pcie总线上的设备 并将该设备初始化建立连接,方便后期host 和 device 之间的数据通信
- 开始之前思考问题 :
- 初始化流程是什么样子的?
- 在nvme 控制器初始话之前做了哪些工作,初始化后有做了哪些工作,为什么这样做呢?
1 Nvme Probe 流程 开胃前菜 主要数据结构介绍
struct device
struct pci_dev
struct nvme_dev
三者之间宏观意义的从属联系
nvme
设备和 pci
都属于device
通用设备,二者之间也是通过device 来建立关系的。因为我们知道结构体device
中支持Koject
设备树 中断等等一个设备拥有的所有资源,这就内核去用最简化的代码去管理设备,而不是单独去为某个设备搞一个管理子系统
- 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 */
}</