Как ioctl() вызывает код драйвера
Я работаю над инструментом тестирования для nvme-cli(написан на c и может работать на Linux).
В целях проверки SSD я на самом деле искал пользовательскую команду (например, для команды ввода-вывода напишите, а затем прочитайте одно и то же и, наконец, сравните, если обе данные совпадают)
Для чтения ioctl()
функция используется, как показано в приведенном ниже коде.
struct nvme_user_io io = {
.opcode = opcode,
.flags = 0,
.control = control,
.nblocks = nblocks,
.rsvd = 0,
.metadata = (__u64)(uintptr_t) metadata,
.addr = (__u64)(uintptr_t) data,
.slba = slba,
.dsmgmt = dsmgmt,
.reftag = reftag,
.appmask = appmask,
.apptag = apptag,
};
err = ioctl(fd, NVME_IOCTL_SUBMIT_IO, &io);
Могу ли я туда, где именно контроль исполнения идет, чтобы понять прочитанное.
Также я хочу иметь другую команду, которая выглядит как
err = ioctl(fd,NVME_IOCTL_WRITE_AND_COMPARE_IO, &io);
так что я могу выполнить внутреннюю запись, затем прочитать одно и то же место и, наконец, сравнить обе данные, чтобы убедиться, что диск содержит только те данные, которые я хотел записать.
Так как я новичок в этом nvme/ioctl(), если есть какие-либо ошибки, пожалуйста, исправьте меня.
1 ответ
nvme_io() - это основной обработчик команд, который принимает в качестве параметра код операции NVMe, который вы хотите отправить на ваше устройство. Согласно стандарту, у вас есть отдельные команды (коды операций) для чтения, записи и сравнения. Вы можете либо отправить эти команды отдельно, либо добавить команду конкретного поставщика, чтобы рассчитать то, что вам нужно.