网站首页 > 编程文章 正文
NVMe 设备 ID 表是一个包含设备 ID 和相关信息的静态数组。它被用于在内核启动时或加载 NVMe 驱动程序时进行设备识别和初始化。
在 Linux 内核源代码中,nvme_id_table 数据结构通常定义在 drivers/nvme/host/pci.c 或类似的文件中,具体的位置可能会有所不同。
数据结构示例
下面是一个简单的示例,显示了 nvme_id_table 的可能结构:
static const struct pci_device_id nvme_id_table[] = {
{ PCI_DEVICE(0x1c58, 0x0023) }, /* WDC SN200 adapter */
{ PCI_DEVICE(0x144d, 0xa808) }, /* Samsung NVMe SSD */
{ PCI_DEVICE(0x8086, 0x0953) }, /* Intel NVMe SSD */
{ 0 }
};
在这个示例中,nvme_id_table 包含了一系列的 struct pci_device_id 条目,每个条目都对应着一个特定的 NVMe 设备。
如何使用
内核在启动或加载 NVMe 驱动程序时,会遍历 nvme_id_table 中的条目,尝试将每个条目与系统中的 NVMe 设备进行匹配。匹配成功后,内核将加载相应的驱动程序并初始化设备。
总结
nvme_id_table 是 Linux 内核中用于存储 NVMe 设备 ID 的静态数据结构。它允许内核在启动或加载驱动程序时识别并匹配系统中的 NVMe 设备,从而实现对 NVMe 设备的正确初始化和管理。
如何添加新设备
根据设备的供应商ID(Vendor ID)和产品ID(Product ID)自定义NVMe驱动程序中的特殊功能。
- 定义自定义ioctl命令: 在您的驱动程序头文件中定义一个自定义ioctl命令。该命令将触发基于设备供应商ID和产品ID的特定逻辑。
- 修改nvme_id_table: 确保nvme_id_table包含您要特别处理的设备。
- 实现ioctl处理程序: 在ioctl处理程序中检查设备的供应商ID和产品ID,并根据这些ID执行不同的逻辑。
首先,在您的驱动程序头文件中定义一个自定义ioctl命令:
#define NVME_IOCTL_CUSTOM_CMD _IO('N', 0x90)
其次在驱动程序源文件中实现ioctl处理程序:
static long nvme_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct nvme_dev *dev = file->private_data;
struct pci_dev *pdev = dev->pci_dev;
switch (cmd) {
case NVME_IOCTL_CUSTOM_CMD:
switch (pdev->vendor) {
case 0x1c58: // Sandisk Corp
if (pdev->device == 0x0023) {
printk(KERN_INFO "Handling ioctl for WDC SN200 adapter\n");
// 针对WDC SN200适配器的自定义逻辑
}
break;
case 0x144d: // Samsung
if (pdev->device == 0xa808) {
printk(KERN_INFO "Handling ioctl for Samsung NVMe SSD\n");
// 针对三星NVMe SSD的自定义逻辑
}
break;
case 0x8086: // Intel
if (pdev->device == 0x0953) {
printk(KERN_INFO "Handling ioctl for Intel NVMe SSD\n");
// 针对英特尔NVMe SSD的自定义逻辑
}
break;
default:
printk(KERN_WARNING "Unknown vendor ID: 0x%04x\n", pdev->vendor);
return -ENOTTY;
}
break;
default:
return -ENOTTY;
}
return 0;
}
猜你喜欢
- 2024-10-19 免修改BIOS让老电脑用上NVMe固态硬盘启动系统
- 2024-10-19 差异有多少?M.2 NVME SSD转PCI-E 转接卡VS原生M.2插槽
- 2024-10-19 对于NVMe固态硬盘,大家可能都理解错了
- 2024-10-19 Intel 600P有救了!PCEVA发布改版NVMe驱动
- 2024-10-19 7代CPU无法安装win7?您可以试试这个办法!
- 2024-10-19 “Rust for Linux”:用 Rust 编写的驱动程序,性能与 C 编写的一样好
- 2024-10-19 重新定义SLC缓存:Solidigm P41 Plus 1TB评测
- 2024-10-19 Marvell的NVMe RAID加速器来啦(nvme raid0速度)
- 2024-10-19 m.2固态硬盘安装win7(m.2固态硬盘安装win7蓝屏)
- 2024-10-19 旧电脑加装固态,运行仍如龟速?大有可能是你没做好这点
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)