1
我完全是Linux内核的新手,所以我可能会混淆。但任何意见将帮助我;)使用SATA硬盘作为块设备
我有一个SATA硬盘通过PCIe SATA卡连接,我尝试使用read
和write
就像一个块设备。我还希望在硬盘上保存数据电源停电 - 不要缓存。最后,我必须分析在每个linux堆栈层中我会浪费多少时间。但一次只能一步。
此刻我试着open
带* O_DIRECT *的设备。但我真的不明白我在哪里可以找到该设备。它显示为/dev/sdd
,我创建了一个分区/dev/sdd1
。
open
和read
上的分区/dev/sdd1
的作品。write
失败* O_DIRECT *(但我相信我有正确的块大小)open
read
和write
调用/dev/sdd
完全失败。/dev/
中是否有另一个文件代表我的设备在块图层上?- 我的错误和错误的假设是什么?
这是我目前的测试代码
int main() {
int w,r,s;
char buffer[512] = "test string mit 512 byte";
printf("test\n");
// OPEN
int fd = open("/dev/sdd", O_DIRECT | O_RDWR | O_SYNC);
printf("fd = %d\n",fd);
// WRITE
printf("try to write %d byte : %s\n",sizeof(buffer),buffer);
w = write(fd,buffer,sizeof(buffer));
if(w == -1) printf("write failed\n");
else printf("write ok\n");
// RESET BUFFER
memset(buffer,0,sizeof(buffer));
// SEEK
s = lseek(fd,0,SEEK_SET);
if(s == -1) printf("seek failed\n");
else printf("seek ok\n");
// READ
r = read(fd,buffer,sizeof(buffer));
if(r == -1) printf("read failed\n");
else printf("read ok\n");
// PRINT BUFFER
printf("buffer = %s\n",buffer);
return 0;
}
编辑: 我在电源架构与内核3.2的工作 - 如果这是非常重要的。
非常感谢您的宝贵时间, 费边