Mat*_*dge 3 security sd-card erase linux-device-driver
我需要安全地擦除嵌入式系统中的 MMC 卡。然而,我的ioctl(BLKSECDISCARD)回报EOPNOTSUPP,(也是如此BLKDISCARD)。
MMC驱动通过读取内核代码,通过设置使能DISCARD QUEUE_FLAG_DISCARD,kernel/linux/drivers/mmc/card/queue.c mmc_queue_setup_discard()调用如下:
if (mmc_can_erase(card))
mmc_queue_setup_discard(mq->queue, card);
Run Code Online (Sandbox Code Playgroud)
其中mmc_can_erase()定义kernel/linux/drivers/mmc/core/core.c为:
int mmc_can_erase(struct mmc_card *card)
{
if ((card->host->caps & MMC_CAP_ERASE) &&
(card->csd.cmdclass & CCC_ERASE) && card->erase_size)
return 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
mmc_can_erase()需要满足什么条件?
是卡的特性、控制器、驱动程序、内核的构建方式还是其他什么?
理想情况下,我想启用该BLKSECDISCARD功能,但不确定我需要做什么,或者即使它可以在我的嵌入式系统上实现。能做到吗?
card->host->caps描述主机控制器的功能。设置的位置(假设支持)取决于您使用的控制器,例如 SDHCI 控制器在sdhci_setup_host().
card->csd.cmdclass从卡的 CSD(卡/设备特定数据)中读取,并指示卡支持哪些命令类别。在本例中,代码正在检查命令的擦除类。看mmc_decode_csd()。
card->erase_size也从卡的 CSD(或扩展 CSD,如果卡有的话)读取,并设置在 中mmc_set_erase_size()。
这些都不取决于内核的构建方式,而是取决于硬件的功能。要找出哪些字段阻止您使用安全擦除,您需要向内核添加一些工具来打印这些字段的值。
| 归档时间: |
|
| 查看次数: |
1775 次 |
| 最近记录: |