Я работаю над инструментом тестирования для 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(), если есть какие-либо ошибки, поправьте меня.
grep
ing дляNVME_IOCTL_SUBMIT_IO
: данный запрос ioctl обрабатывается в drivers/nvme/host/core.c. - person Tsyvarev   schedule 14.12.2017case NVME_IOCTL_SUBMIT_IO: return nvme_submit_io(ns, (void __user *)arg);
Я не знаю, работает ли это. На самом деле я не понял, как функцияioctl()
вызываетnvme_ioctl()
Я не знаю, глупый ли это вопрос, но, поскольку я новичок в этом, я не понял. - person Arjun G S   schedule 14.12.2017nvme_ioctl()
назначается блочному устройству, дескриптор которого вы передаетеioctl()
вызову в пользовательском пространстве. Подробное описание читайте о блочных устройствах в ядре linux и написании драйверов для них. Если вы просто хотите добавить поддержку нового типа запроса ioctl, просто сделайте это в функцииnvme_ioctl
. - person Tsyvarev   schedule 14.12.2017