我需要安全地擦除嵌入式系统中的 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功能,但不确定我需要做什么,或者即使它可以在我的嵌入式系统上实现。能做到吗?