sys_write
SCSI デバイス上の がどのように機能するかを理解したいです。したがって、簡単なテスト プログラムをissue
作成し、デバイス ドライバーの関数にデバッグprintk()
を追加して、ata_queued_cmd->scsicmd->cmnd
.
int main() {
int w;
char buffer[512] = "test string with 512 byte";
// OPEN
int fd = open("/dev/sdd", O_WRONLY | O_SYNC);
// WRITE
w = write(fd,buffer,sizeof(buffer));
return 0;
}
では/var/log/messages
、次の発行されたコマンドを確認できます。
scsicmd->cmnd
------------------------------
0x28 | READ(10)
0x2A | WRITE(10)
0x35 | SYNCHRONIZE CACHE (10)
書き込みたい 512 バイトがブロックサイズである必要があります。これは私がこの値を取得する方法です:
root$ blockdev --getsize /dev/sdd # returns size in sectors
488397168
root$ blockdev --getsize64 /dev/sdd # returns size in sectors
250059350016
root$ python -c "print 250059350016.0/488397168"
512.0
データが電源障害に安全に書き込まれていることは、私にとって非常に重要です。それが私が帰りを待ちたい理由ですO_SYNC
。今、私はいくつかの質問があります:
READ
の前にがあるのはなぜWRITE
ですか?SYNCHRONIZE CACHE
データがドライブの内部キャッシュにある場合、保証されますか? または、安全な書き込みを行うためにできることは他にありますか?
どうもありがとうございました :)