동료, 내가 ATA에 대한 지원을 구현하고 있습니다ATA 신뢰할 수있는 명령은
는 자체 암호화 드라이브를 지원하는 명령
0x5C, TRUSTED RECEIVE,
0x5D, TRUSTED RECEIVE DMA,
0x5E, TRUSTED SEND
0x5F, TRUSTED SEND DMA,
Linux 용
(두 호스트, 페도라 12, 14)을 믿었습니다. 이 페이지의 코드 http://www.jukie.net/bart/blog/ata-via-scsi을 기본 코드로 사용했습니다. 받을 신뢰를 들어 (이 층에는 0xEC를 식별하기 위해 동일) :
sg_io.interface_id = 'S';
sg_io.cmdp = cdb;
sg_io.cmd_len = sizeof(cdb);
sg_io.dxferp = data_in_buffer;
sg_io.dxfer_len = data_in_length; // multiple of 512
sg_io.dxfer_direction = SG_DXFER_FROM_DEV;
sg_io.sbp = sense;
sg_io.mx_sb_len = sizeof(sense);
sg_io.timeout = 5000; // 5 seconds
cdb[0] = 0x85; // pass-through ATA16 command (no translation)
cdb[1] = (4 << 1); // data-in
cdb[2] = 0x2e; // data-in
cdb[4] = feature_id; // ATA feature ID
cdb[6] = 1; // number of sectors
cdb[7] = lba_low >> 8;
cdb[8] = lba_low;
cdb[9] = lba_mid >> 8;
cdb[10] = lba_mid;
cdb[11] = lba_high >> 8;
cdb[12] = lba_high;
cdb[14] = 0x5C; // TRUSTED RECEIVE
rc = ioctl (fd, SG_IO, &sg_io);
그것은 신뢰할 수있는 명령에 대해 확인하고 다른 모든 명령에 대해 완벽하게 작동,하지만. 프로토콜 분석기를 연결하면 이러한 명령이 SATA 버스로 전송되지 않습니다. 그들은 Windows에서 (내 코드가 아닌,하지만 난 ATA_PASS_THROUGH를 사용하는 것 같아) 괜찮아오고 있기 때문에 어댑터는 그들을 보낼 수 있습니다. 그리고 네, 저는이 코드를 루트로 실행하고 있습니다.
무엇 lba_low, lba_mid 및 lba_high .. 어떻게 이러한 변수를 설정하는 방법에 대한 정보를 찾을 수 있습니까? – Nick