You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下SD卡卸载/弹出机制及相关异常问题的技术问询

Ubuntu下SD卡卸载/弹出机制及相关异常问题的技术问询

我正在研究Ubuntu系统里SD卡卸载/弹出的具体工作机制,目的是调试一个相关问题。目前我梳理出了大致的流程链:
kernel/linux → sysfs → udev → udisks2 → GVolumeMonitor → 桌面管理器(通常和文件管理器是同一个)
其中udisks2是第一个通过DBUS提供API的守护进程。

现在我有两个核心疑问想请教:

一、命令行eject工具的异常行为

不管/dev/mmcblk0p1分区是否处于挂载状态,我执行eject /dev/mmcblk0都会返回错误码1。我用strace跟踪了这个命令,关键输出如下:

openat(AT_FDCWD, "/dev/mmcblk0", O_RDWR|O_EXCL|O_NONBLOCK) = 3
ioctl(3, CDROM_LOCKDOOR, 0)             = -1 EINVAL (Invalid argument)
ioctl(3, SG_GET_VERSION_NUM, 0x7ffd53f9b2e8) = -1 EINVAL (Invalid argument)
ioctl(3, FDEJECT, 0x55874d4359d0)       = -1 EINVAL (Invalid argument)
ioctl(3, MTIOCTOP, 0x7ffd53f9b320)      = -1 EINVAL (Invalid argument)
write(2, "eject: ", 7eject: )                  = 7
write(2, "unable to eject", 15unable to eject)         = 15

我想知道:是不是只有CDROM这类既能物理弹出又支持编程触发弹出的设备,eject命令才会返回0?另外,Gnome相关服务是怎么解读这个命令的输出结果的?

二、udevadm monitor日志中的异常现象

我用udevadm monitor记录了SD卡整个生命周期的事件,重点是以下三个场景:

1. 卡片插入时的日志

KERNEL[49421.254375] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
KERNEL[49421.255242] add      /devices/virtual/bdi/179:0 (bdi)
UDEV  [49421.256281] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
UDEV  [49421.256354] add      /devices/virtual/bdi/179:0 (bdi)
KERNEL[49421.264022] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
KERNEL[49421.264062] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
KERNEL[49421.264093] bind     /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
UDEV  [49421.321281] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
UDEV  [49421.409280] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
UDEV  [49421.413271] bind     /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)

2. 在Gnome中点击弹出按钮后的日志

KERNEL[49428.212348] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
KERNEL[49428.213105] change   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
KERNEL[49428.213189] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
UDEV  [49428.215677] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
UDEV  [49428.242018] change   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
UDEV  [49428.310305] add      /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)

这里我最困惑的是:点击弹出按钮后,内核为什么会重新添加设备(日志第3行)?

3. 物理移除卡片时的日志

KERNEL[49432.237855] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
KERNEL[49432.238271] remove   /devices/virtual/bdi/179:0 (bdi)
KERNEL[49432.238678] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
UDEV  [49432.241920] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0/mmcblk0p1 (block)
UDEV  [49432.242568] remove   /devices/virtual/bdi/179:0 (bdi)
UDEV  [49432.245293] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa/block/mmcblk0 (block)
KERNEL[49432.269966] unbind   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
KERNEL[49432.270065] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
UDEV  [49432.271890] unbind   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)
UDEV  [49432.273292] remove   /devices/pci0000:00/0000:00:1d.0/0000:72:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:aaaa (mmc)

备注:内容来源于stack exchange,提问作者nusch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:49:31