安全删除 eMMC 卡 (BLKSECDISCARD returns EOPNOTSUPP)
Secure Delete of eMMC Card (BLKSECDISCARD returns EOPNOTSUPP)
我需要在嵌入式系统中安全擦除 MMC 卡。但是,我的 ioctl(BLKSECDISCARD)
returns EOPNOTSUPP
(BLKDISCARD
)。
MMC驱动通过读取内核代码,在kernel/linux/drivers/mmc/card/queue.c mmc_queue_setup_discard()
中设置QUEUE_FLAG_DISCARD
启用DISCARD,调用如下:
if (mmc_can_erase(card))
mmc_queue_setup_discard(mq->queue, card);
其中 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;
}
满足mmc_can_erase()
中的条件需要什么?
它是卡、控制器、驱动程序、内核构建方式还是其他原因的特性?
理想情况下,我想启用 BLKSECDISCARD
功能,但我不确定我需要做什么,或者即使它在我的嵌入式系统上是可能的。可以吗?
card->host->caps
描述了主机控制器的能力。设置的位置(假设支持)取决于您使用的控制器,例如,对于 SDHCI 控制器,其设置在 sdhci_setup_host()
.
card->csd.cmdclass
从卡的 CSD 中读取(Card/Device 特定数据),并指示卡支持哪些 classes 命令。在这种情况下,代码正在检查命令的擦除 class。参见 mmc_decode_csd()
。
card->erase_size
也从卡的 CSD(或扩展 CSD,如果卡有的话)中读取,并在 mmc_set_erase_size()
.
中设置
None 其中取决于内核的构建方式,但取决于硬件的功能。要找出哪些阻止您使用安全擦除,您需要向内核添加一些工具以打印这些字段的值。
我需要在嵌入式系统中安全擦除 MMC 卡。但是,我的 ioctl(BLKSECDISCARD)
returns EOPNOTSUPP
(BLKDISCARD
)。
MMC驱动通过读取内核代码,在kernel/linux/drivers/mmc/card/queue.c mmc_queue_setup_discard()
中设置QUEUE_FLAG_DISCARD
启用DISCARD,调用如下:
if (mmc_can_erase(card))
mmc_queue_setup_discard(mq->queue, card);
其中 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;
}
满足mmc_can_erase()
中的条件需要什么?
它是卡、控制器、驱动程序、内核构建方式还是其他原因的特性?
理想情况下,我想启用 BLKSECDISCARD
功能,但我不确定我需要做什么,或者即使它在我的嵌入式系统上是可能的。可以吗?
card->host->caps
描述了主机控制器的能力。设置的位置(假设支持)取决于您使用的控制器,例如,对于 SDHCI 控制器,其设置在 sdhci_setup_host()
.
card->csd.cmdclass
从卡的 CSD 中读取(Card/Device 特定数据),并指示卡支持哪些 classes 命令。在这种情况下,代码正在检查命令的擦除 class。参见 mmc_decode_csd()
。
card->erase_size
也从卡的 CSD(或扩展 CSD,如果卡有的话)中读取,并在 mmc_set_erase_size()
.
None 其中取决于内核的构建方式,但取决于硬件的功能。要找出哪些阻止您使用安全擦除,您需要向内核添加一些工具以打印这些字段的值。