裸驱想要发送ufs的write6命令,怎么配置scsi_cmd结构体
时间: 2024-03-03 11:53:39 浏览: 112
首先,需要创建一个 `scsi_cmnd` 结构体的实例。然后,需要设置该结构体的各个成员变量,具体如下:
1. `cmnd[0]` 设置为 `WRITE_6`,即命令码为 0x0A。
2. `device->lun` 设置为需要访问的逻辑单元号。
3. `cmnd[1]` 置为 0,用于表示写入的数据是按照块来计算的。
4. `cmnd[2]`、`cmnd[3]`、`cmnd[4]`、`cmnd[5]` 分别设置为待写入数据所在的逻辑块地址。
5. `cmnd[7]` 设置为待写入数据的块数,即要写入的数据长度(大端模式)。
具体实现代码可以参考如下示例:
```c
struct scsi_cmnd *cmd; // cmd 为已经分配好的 scsi_cmnd 实例
// 设置命令码和逻辑单元号
cmd->cmnd[0] = WRITE_6;
cmd->device->lun = 0;
// 设置块寻址
cmd->cmnd[1] = 0;
cmd->cmnd[2] = (start_block >> 16) & 0xFF;
cmd->cmnd[3] = (start_block >> 8) & 0xFF;
cmd->cmnd[4] = start_block & 0xFF;
// 设置写入块数
cmd->cmnd[7] = (num_blocks >> 8) & 0xFF;
cmd->cmnd[8] = num_blocks & 0xFF;
```
其中,`start_block` 表示待写入数据的起始逻辑块地址,`num_blocks` 表示待写入数据的块数。
阅读全文