nvme-cli (c로 작성되었으며 Linux에서 실행할 수 있음) 용 테스트 도구로 작업 중입니다. SSD 검증 목적 ioctl()이 드라이버 코드를 호출하는 방법
, 내가 실제로ioctl()
기능을 읽기
을 (두 데이터가 동일 할 경우 비교 마지막으로 작성하고 다음 같은를 읽고, 예를 들어 I/O 명령의) 사용자 정의 명령을 찾고 있었다 아래 코드와 같이 사용됩니다.
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()에 익숙하지 않으므로 실수가 있으면 저를 수정하십시오.
'NVME_IOCTL_SUBMIT_IO'에 대한 간단한'grep ': 주어진 ioctl 요청은 [drivers/nvme/host/core.c]에서 처리됩니다 (https://elixir.free-electrons.com/linux/latest/source/drivers). /nvme/host/core.c#L1042). 나는 그것이 작동하는지 몰라요'; \t \t 반환 nvme_submit_io (NS, (무효 __user *) 인수) : – Tsyvarev
@Tsyvarev는, 내가 대신'의 경우 NVME_IOCTL_SUBMIT_IO의 NVME_IOCTL_WRITE_AND_COMPARE_IO라는 케이스를 추가하여 새 명령을 가질 수 있다는 것입니다. 사실''ioctl()'함수가'nvme_ioctl()'을 어떻게 호출하는지 이해하지 못했습니다. 바보 같은 질문인지는 모르겠지만,이 글을 처음 접한 이래로 나는 이해하지 못했습니다. –
간단히 말해,'nvme_ioctl()'이 블록 장치에 할당되어 있습니다.이 장치는 사용자 공간에서'ioctl()'호출로 전달됩니다. 자세한 내용은 Linux 커널의 블록 장치 및 해당 장치의 writting 드라이버를 참조하십시오. 새로운 유형의 ioctl 요청에 대한 지원을 추가하기 원한다면 간단히'nvme_ioctl' 함수에서 지원하십시오. – Tsyvarev