Подключение SD-карты к WSL 2 через USB-кардридер
1. Окружение
Используется:
- Windows 10.0.19045.6456
- WSL 2.7.14.0
- ядро WSL
6.18.33.2-2 - дистрибутив
Ubuntu-22.04 usbipd 5.3.0- пользователь WSL:
petalinux - WSL работает в режиме
networkingMode=bridged - IP Windows-адаптера
vEthernet (WSL-Bridge):192.168.70.20
Конфигурация WSL:
[wsl2]
memory=24GB
swap=16GB
processors=12
networkingMode=bridged
vmSwitch=WSL-Bridge
dhcp=true
USB-кардридер:
VID:PID = 05e3:0747
BUSID = 7-4
SD-карта содержит два раздела:
/dev/sde
├── /dev/sde1 2 GB vfat BOOT
└── /dev/sde2 27.3 GB ext4 rootfs
2. Подключение USB-кардридера к WSL
В Windows PowerShell определить устройство:
usbipd list
В списке должно быть примерно:
BUSID VID:PID DEVICE
7-4 05e3:0747 Запоминающее устройство для USB
Обычная команда:
usbipd attach --wsl --busid 7-4
При networkingMode=bridged она может завершиться ошибкой:
usbipd: error: Networking mode 'bridged' is not supported.
Поэтому используется IP Windows-хоста:
usbipd attach --wsl --busid 7-4 --host-ip 192.168.70.20
После успешного подключения в WSL проверить USB:
lsusb
Должно появиться:
Bus 001 Device 002: ID 05e3:0747 Genesys Logic, Inc. USB Storage
3. Определение SD-карты
В WSL выполнить:
lsblk -o NAME,SIZE,FSTYPE,LABEL,MOUNTPOINTS,MODEL,TRAN
SD-карта должна определиться примерно так:
sde 29.3G STORAGE DEVICE usb
├─sde1 2G vfat BOOT
└─sde2 27.3G ext4 rootfs
Дополнительно проверить:
sudo fdisk -l /dev/sde
Результат:
Disk /dev/sde: 29.3 GiB, 31457280000 bytes
Disk model: STORAGE DEVICE
Disklabel type: dos
Device Boot Start End Sectors Size Id Type
/dev/sde1 2048 4196351 4194304 2G c W95 FAT32 (LBA)
/dev/sde2 4196352 61439999 57243648 27.3G 83 Linux
Важно: перед монтированием необходимо убедиться, что
/dev/sdeдействительно является SD-картой.
4. Создание точек монтирования
Создать каталоги:
sudo mkdir -p /mnt/sd_boot
sudo mkdir -p /mnt/sd_rootfs
Получаем:
/mnt/sd_boot
/mnt/sd_rootfs
5. Определение UUID разделов
Выполнить:
sudo blkid /dev/sde1 /dev/sde2
Для данной SD-карты:
/dev/sde1: LABEL_FATBOOT="BOOT" LABEL="BOOT" UUID="5A09-1803" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="f5144c79-01"
/dev/sde2: LABEL="rootfs" UUID="e4528724-63c6-4b9a-a5f0-8c122b3c168e" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f5144c79-02"
Использовать именно UUID, а не /dev/sde1 и /dev/sde2.
Причина: имя устройства /dev/sde может измениться при следующем подключении USB-устройства.
6. Настройка /etc/fstab
Открыть:
sudo nano /etc/fstab
Добавить следующие две строки:
UUID=5A09-1803 /mnt/sd_boot vfat defaults,user,noauto 0 0
UUID=e4528724-63c6-4b9a-a5f0-8c122b3c168e /mnt/sd_rootfs ext4 defaults,user,noauto 0 0
Здесь:
UUID=...— идентификатор раздела;/mnt/sd_boot— точка монтирования раздела BOOT;/mnt/sd_rootfs— точка монтирования rootfs;vfat— файловая система первого раздела;ext4— файловая система второго раздела;user— разрешает обычному пользователю монтировать и размонтировать раздел;noauto— не монтировать автоматически при запуске WSL.
7. Проверка /etc/fstab
Проверить, что строки записаны правильно:
grep -E '/mnt/sd_(boot|rootfs)' /etc/fstab
Ожидается:
UUID=5A09-1803 /mnt/sd_boot vfat defaults,user,noauto 0 0
UUID=e4528724-63c6-4b9a-a5f0-8c122b3c168e /mnt/sd_rootfs ext4 defaults,user,noauto 0 0
8. Монтирование SD-карты пользователем petalinux
Перейти в домашний каталог:
cd ~
Монтировать раздел BOOT:
mount /mnt/sd_boot
Монтировать rootfs:
mount /mnt/sd_rootfs
Проверить:
mount | grep '/mnt/sd_'
Должно быть примерно:
/dev/sde1 on /mnt/sd_boot type vfat (...)
/dev/sde2 on /mnt/sd_rootfs type ext4 (...)
Проверить содержимое:
ls -la /mnt/sd_boot
ls -la /mnt/sd_rootfs
Теперь SD-карта доступна:
/mnt/sd_boot
/mnt/sd_rootfs
9. Работа с PetaLinux
Раздел BOOT:
cd /mnt/sd_boot
Раздел Linux rootfs:
cd /mnt/sd_rootfs
Например:
ls -la /mnt/sd_boot
ls -la /mnt/sd_rootfs/etc
Можно работать с файлами PetaLinux непосредственно на SD-карте.
10. Правильное размонтирование
Перед размонтированием необходимо выйти из каталогов SD-карты:
cd ~
Сначала размонтировать rootfs:
umount /mnt/sd_rootfs
Затем раздел BOOT:
umount /mnt/sd_boot
Проверить:
mount | grep '/mnt/sd_'
Если команда ничего не вывела, оба раздела размонтированы.
11. Если umount сообщает target is busy
Если появляется:
umount: /mnt/sd_rootfs: target is busy
Найти процесс, использующий раздел:
fuser -vm /mnt/sd_rootfs
или:
lsof +D /mnt/sd_rootfs
Закрыть найденные программы и терминалы.
Обязательно выйти из каталога:
cd ~
Затем повторить:
umount /mnt/sd_rootfs
umount /mnt/sd_boot
Не использовать без необходимости:
umount -f
12. Отключение USB-кардридера от WSL
После успешного размонтирования обоих разделов перейти в Windows PowerShell:
usbipd detach --busid 7-4
После этого USB-кардридер можно физически отключить.
13. Повторное подключение SD-карты
При следующем подключении SD-карты к Windows.
Windows PowerShell — проверить устройство:
usbipd list
Найти:
7-4 05e3:0747 Запоминающее устройство для USB
Подключить:
usbipd attach --wsl --busid 7-4 --host-ip 192.168.70.20
WSL — проверить:
lsblk
После определения SD-карты смонтировать:
mount /mnt/sd_boot
mount /mnt/sd_rootfs
Проверить:
mount | grep '/mnt/sd_'
14. Полный рабочий цикл
Windows PowerShell:
usbipd list
usbipd attach --wsl --busid 7-4 --host-ip 192.168.70.20
WSL:
lsusb
lsblk
mount /mnt/sd_boot
mount /mnt/sd_rootfs
Работа с SD-картой:
ls -la /mnt/sd_boot
ls -la /mnt/sd_rootfs
Завершение работы:
cd ~
umount /mnt/sd_rootfs
umount /mnt/sd_boot
Проверка:
mount | grep '/mnt/sd_'
Windows PowerShell:
usbipd detach --busid 7-4
15. Что делать при следующем запуске WSL
После перезапуска Windows или WSL запись в /etc/fstab сохраняется.
Повторно выполнять настройку /etc/fstab не требуется.
Нужно только:
- подключить USB-кардридер к Windows;
- выполнить
usbipd attach; - в WSL выполнить
mount; - после работы выполнить
umount; - выполнить
usbipd detach.
То есть обычный рабочий цикл состоит всего из следующих команд.
Windows:
usbipd attach --wsl --busid 7-4 --host-ip 192.168.70.20
WSL:
mount /mnt/sd_boot
mount /mnt/sd_rootfs
После работы:
cd ~
umount /mnt/sd_rootfs
umount /mnt/sd_boot
Windows:
usbipd detach --busid 7-4
16. Схема подключения
┌──────────────────────────────┐
│ Windows │
│ │
│ vEthernet (WSL-Bridge) │
│ 192.168.70.20 │
└──────────────┬───────────────┘
│
│ USB / usbipd
│
┌──────────────▼───────────────┐
│ USB Card Reader │
│ VID:PID 05e3:0747 │
│ BUSID 7-4 │
└──────────────┬───────────────┘
│
│
┌──────────────▼───────────────┐
│ WSL 2 │
│ │
│ /dev/sde │
│ │ │
│ ┌──────┴──────┐ │
│ │ │ │
│ /dev/sde1 /dev/sde2 │
│ vfat ext4 │
│ BOOT rootfs │
│ │ │ │
│ ▼ ▼ │
│ /mnt/sd_boot /mnt/sd_rootfs │
└──────────────────────────────┘
17. Важные правила безопасности
Для обычного подключения и отключения SD-карты не требуется выполнять:
fdisk
mkfs
dd
parted
и другие команды изменения разметки или файловой системы.
Команды:
mount
umount
не изменяют структуру разделов SD-карты.
Перед отключением USB-кардридера необходимо:
- закрыть файлы на SD-карте;
- выйти из
/mnt/sd_bootи/mnt/sd_rootfs; - выполнить
umountобоих разделов; - убедиться, что
mount | grep '/mnt/sd_'ничего не выводит; - только после этого выполнить в Windows:
usbipd detach --busid 7-4
18. Итоговая конфигурация
SD-карта:
/dev/sde
├── /dev/sde1
│ ├── filesystem: vfat
│ ├── label: BOOT
│ ├── UUID: 5A09-1803
│ └── mount: /mnt/sd_boot
│
└── /dev/sde2
├── filesystem: ext4
├── label: rootfs
├── UUID: e4528724-63c6-4b9a-a5f0-8c122b3c168e
└── mount: /mnt/sd_rootfs
Конфигурация /etc/fstab:
UUID=5A09-1803 /mnt/sd_boot vfat defaults,user,noauto 0 0
UUID=e4528724-63c6-4b9a-a5f0-8c122b3c168e /mnt/sd_rootfs ext4 defaults,user,noauto 0 0
Основной принцип работы:
Windows
│
├── usbipd attach
│
▼
USB Card Reader
│
▼
WSL 2
│
▼
/dev/sde
├── sde1 → /mnt/sd_boot
└── sde2 → /mnt/sd_rootfs
Для отключения:
WSL
│
├── umount /mnt/sd_rootfs
├── umount /mnt/sd_boot
│
▼
Windows
│
└── usbipd detach --busid 7-4