Как 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, который вы хотите отправить на ваше устройство. Согласно стандарту, у вас есть отдельные команды (коды операций) для чтения, записи и сравнения. Вы можете либо отправить эти команды отдельно, либо добавить команду конкретного поставщика, чтобы рассчитать то, что вам нужно.

Другие вопросы по тегам