如何在启动过程中等待 USB 驱动器被识别/安装以启动自己的服务?

如何在启动过程中等待 USB 驱动器被识别/安装以启动自己的服务?

我有一个自定义的 buildroot 构建,其中包含用于 RPi 和 busybox 的简约内核作为 init 和 shell。在启动过程结束时,我启动自己的服务来尝试访问 USB 驱动器。然而此时USB驱动程序仍在初始化包括USB驱动器在内的USB设备。内核启动大约需要 4 秒,USB 设备识别还需要 4-5 秒。所以实际上我想知道如何在启动过程中自动安装 USB 驱动器,并且只有在这种情况下才启动我的服务。我还可以在启动服务之前挂载磁盘,但这里它也以某种方式知道 USB 磁盘是否已被识别并且 /dev/sda1 是否已创建。

答案1

如果您构建的内核inotify支持您最好使用 inotify 来等待设备创建。如果没有,您可以将此代码放在 busybox init 系统启动服务之前的位置:

# Waiting for device creation
while true                    
do                                                
    test -e /dev/yournode         
    if [ $? -eq 0 ]; then
            echo "Device created";            
            break;       
    else                          
            echo "Waiting for device";        
            sleep 1;     
    fi                                
done

相关内容