Развертывание SD-карты PetaLinux через usbipd-win в WSL2
Развертывание SD-карты PetaLinux через usbipd-win в WSL2
Содержание
- 1. Общие сведения
- 2. Windows 11
- 2.1. Параметры тестового стенда
- 2.2. Настройка Windows 11 (PowerShell от имени Администратора)
- 2.3. Настройка и подключение в WSL2 (Ubuntu)
- 2.4. Разметка MBR и форматирование под PetaLinux
- 2.5. Автомонтирование через /etc/fstab
- 2.6. Запись образов PetaLinux и безопасное отключение
- 2.7. Безопасное извлечение картридера
- 3. Windows 10
- 3.1. Окружение
- 3.2. Подключение USB-кардридера к WSL
- 3.3. Определение SD-карты
- 3.4. Создание точек монтирования
- 3.5. Определение UUID разделов
- 3.6. Настройка /etc/fstab
- 3.7. Проверка /etc/fstab
- 3.8. Монтирование SD-карты пользователем petalinux
- 3.9. Работа с PetaLinux
- 3.10. Правильное размонтирование
- 3.11. Если umount сообщает target is busy
- 3.12. Отключение USB-кардридера от WSL
- 3.13. Повторное подключение SD-карты
- 3.14. Полный рабочий цикл
- 3.15. Что делать при следующем запуске WSL
- 3.16. Схема подключения
- 3.17. Важные правила безопасности
- 3.18. Итоговая конфигурация
1. Общие сведения
Документ описывает работу с SD-картой PetaLinux через usbipd-win в WSL 2. Порядок действий зависит от версии Windows:
- Windows 11 — полный цикл развёртывания SD-карты: настройка usbipd-win и драйвера VBoxUsbMon, проброс картридера, разметка MBR, форматирование, автомонтирование и запись образов PetaLinux.
- Windows 10 — подключение уже подготовленной SD-карты к WSL 2 и работа с её разделами BOOT и rootfs (монтирование,
/etc/fstab, безопасное отключение).
Общая часть в обоих случаях — проброс USB-картридера из Windows в WSL 2 средствами usbipd-win.
2. Windows 11
2.1. Параметры тестового стенда
- Хост (Windows 11 Pro): IP
192.168.11.20, сборка26200(ядро10.0.26200). - Гостевая система (WSL2 Ubuntu): IP
192.168.11.21. - Устройство: USB-картридер Genesys Logic (
VID:PID 05e3:0747, шина5-1). - SD-карта: 32 ГБ, схема разделов MBR (DOS).
- Раздел 1 (
/mnt/sd_boot): FAT32 (2 ГБ), флаг bootable. - Раздел 2 (
/mnt/sd_rootfs): ext4 (~27 ГБ), под распаковкуrootfs.tar.gz.
2.2. Настройка Windows 11 (PowerShell от имени Администратора)
2.2.1. Установка пакета usbipd-win
winget install dorssel.usbipd-win
Каталог установки по умолчанию: C:\Program Files\usbipd-win\.
2.2.2. Регистрация и запуск драйвера ядра VBoxUsbMon
Регистрация драйвера в диспетчере служб и перевод в автозапуск исключают ошибку Win32Exception (2): CreateFile.
Проверка наличия драйвера:
PS C:\Program Files\usbipd-win\Drivers> Get-ChildItem -Filter "*usbmon*.sys"
Вывод Windows:
Каталог: C:\Program Files\usbipd-win\Drivers
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 05.10.2025 20:07 196704 VBoxUSBMon.sys
Регистрация службы драйвера ядра:
PS C:\Program Files\usbipd-win\Drivers> sc.exe create VBoxUsbMon type= kernel start= demand binPath= "C:\Program Files\usbipd-win\Drivers\VBoxUSBMon.sys"
Вывод Windows:
[SC] CreateService: успех
Запуск службы драйвера ядра:
PS C:\Program Files\usbipd-win\Drivers> sc.exe start VBoxUsbMon
Вывод Windows:
Имя_службы: VBoxUsbMon
Тип : 1 KERNEL_DRIVER
Состояние : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
Код_выхода_Win32 : 0 (0x0)
Код_выхода_службы : 0 (0x0)
Контрольная_точка : 0x0
Ожидание : 0x0
ID_процесса : 0
Флаги :
Проверка состояния службы драйвера ядра:
PS C:\Program Files\usbipd-win\Drivers> sc.exe query VBoxUsbMon
Вывод Windows:
Имя_службы: VBoxUsbMon
Тип : 1 KERNEL_DRIVER
Состояние : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
Код_выхода_Win32 : 0 (0x0)
Код_выхода_службы : 0 (0x0)
Контрольная_точка : 0x0
Ожидание : 0x0
Перевод драйвера ядра в режим автозагрузки:
PS C:\Program Files\usbipd-win\Drivers> sc.exe config VBoxUsbMon start= auto
Вывод Windows:
[SC] ChangeServiceConfig: успех
2.2.3. Настройка автозапуска службы usbipd
Настройка типа запуска службы:
PS C:\Users\admin> sc.exe config usbipd start= auto
Вывод Windows:
[SC] ChangeServiceConfig: успех
Запуск службы:
PS C:\Users\admin> Start-Service -Name usbipd
Команда выполняется без вывода в консоль при успешном запуске.
Проверка статуса службы:
PS C:\Users\admin> Get-Service -Name usbipd
Вывод Windows:
Status Name DisplayName
------ ---- -----------
Running usbipd USBIP Device Host
2.2.4. Привязка USB-картридера (Shared)
Проверка списка подключённых устройств:
PS C:\Users\admin> usbipd list
Вывод Windows:
Connected:
BUSID VID:PID DEVICE STATE
2-3 10c4:ea60 Silicon Labs CP210x USB to UART Bridge (COM3) Not shared
2-4 1d6b:a4a7 POROSVOC, USB-устройство ввода Not shared
2-5 8087:0029 Intel(R) Wireless Bluetooth(R) Not shared
4-1 03fd:0013 Xilinx Platform Cable USB II Firmware Loader Not shared
5-1 05e3:0747 Запоминающее устройство для USB Shared
8-1 046d:c31c USB-устройство ввода Not shared
8-3 046d:c05a USB-устройство ввода Not shared
Persisted:
GUID DEVICE
b1f7a009-ebdd-4f21-b403-d2964c66bf6e Запоминающее устройство для USB
Примечание: если статус устройства
Not shared, выполнитеusbipd bind --busid 5-1.
2.3. Настройка и подключение в WSL2 (Ubuntu)
Все действия выполняются под пользователем root.
2.3.1. Установка пакетов ядра
apt-get update
apt-get install -y linux-tools-generic hwdata parted dosfstools e2fsprogs
2.3.2. Захват USB-устройства с хоста 192.168.11.20
Подключение картридера по сети:
root@wsl:~# usbip attach -r 192.168.11.20 -b 5-1
При успешном выполнении команда завершается с кодом возврата 0 без вывода текста.
Проверка появления блочного устройства в Linux:
root@wsl:~# lsblk
Вывод консоли:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 364.8M 1 disk
sdb 8:16 0 144.5M 1 disk
sdc 8:32 0 12G 0 disk [SWAP]
sdd 8:48 0 1T 0 disk /mnt/wslg/distro
/
sde 8:64 1 29.3G 0 disk
└─sde1 8:65 1 29.3G 0 part
2.4. Разметка MBR и форматирование под PetaLinux
2.4.1. Очистка и создание разделов
umount /dev/sde* 2>/dev/null
wipefs -a /dev/sde
parted --script /dev/sde \
mklabel msdos \
mkpart primary fat32 4MiB 2048MiB \
set 1 boot on \
mkpart primary ext4 2048MiB 100%
partprobe /dev/sde
Проверка геометрии разделов:
root@wsl:~# lsblk /dev/sde
Вывод консоли:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sde 8:64 1 29.3G 0 disk
├─sde1 8:65 1 2G 0 part
└─sde2 8:66 1 27.3G 0 part
2.4.2. Форматирование файловых систем
mkfs.vfat -F 32 -n "BOOT" /dev/sde1
mkfs.ext4 -F -L "rootfs" -O ^64bit,^metadata_csum /dev/sde2
2.4.3. Получение постоянных идентификаторов UUID
root@wsl:~# blkid /dev/sde1 /dev/sde2
Вывод консоли:
/dev/sde1: LABEL_FATBOOT="BOOT" LABEL="BOOT" UUID="DBB7-8096" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="4f7f33da-01"
/dev/sde2: LABEL="rootfs" UUID="5a5d8fc7-8fe6-469c-827d-a9caa85f17dc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="4f7f33da-02"
2.5. Автомонтирование через /etc/fstab
2.5.1. Создание каталогов монтирования
mkdir -p /mnt/sd_boot /mnt/sd_rootfs
2.5.2. Добавление конфигурации в /etc/fstab
Флаг nofail обязателен, чтобы гостевая ОС не уходила в emergency mode, если USB-устройство не проброшено.
cat << 'EOF' >> /etc/fstab
UUID=DBB7-8096 /mnt/sd_boot vfat defaults,nofail,umask=000,uid=1000,gid=1000 0 0
UUID=5a5d8fc7-8fe6-469c-827d-a9caa85f17dc /mnt/sd_rootfs ext4 defaults,nofail,noatime 0 2
EOF
2.5.3. Применение и проверка состояния
mount -a
Проверка смонтированных файловых систем:
root@wsl:~# df -h | grep /mnt/sd
Вывод консоли:
/dev/sde1 2.0G 4.0K 2.0G 1% /mnt/sd_boot
/dev/sde2 27G 24K 26G 1% /mnt/sd_rootfs
2.6. Запись образов PetaLinux и безопасное отключение
2.6.1. Развертывание артефактов сборки
Перейдите в каталог проекта PetaLinux с готовыми бинарными файлами (<petalinux_project>/images/linux/):
cp BOOT.BIN boot.scr image.ub /mnt/sd_boot/
tar -pxf rootfs.tar.gz -C /mnt/sd_rootfs/
2.6.2. Сброс кэша и корректное отключение картридера
Перед извлечением карты сбросьте буферы ввода-вывода и освободите виртуальный порт:
sync
umount /mnt/sd_boot /mnt/sd_rootfs
usbip detach -p 00
2.6.3. Готовые алиасы автоматизации для ~/.bashrc
Добавьте следующие макросы в конфигурационный файл оболочки для выполнения рутинных операций одной командой:
cat << 'EOF' >> ~/.bashrc
alias sd-mount='usbip attach -r 192.168.11.20 -b 5-1 && mount -a && df -h | grep /mnt/sd'
alias sd-umount='sync && umount /mnt/sd_boot /mnt/sd_rootfs && usbip detach -p 00'
EOF
source ~/.bashrc
sd-mount подключает устройство с хоста 192.168.11.20, монтирует разделы по UUID и проверяет их доступность.
sd-umount гарантирует целостность файловой системы перед переносом SD-карты в слот целевой платы.
2.7. Безопасное извлечение картридера
Важно: физически вынимать картридер нельзя, пока он не отмонтирован в WSL. Поскольку разделы были смонтированы, в оперативной памяти Linux остаётся кэш записи. Если выдернуть устройство сейчас, повредится суперблок ext4 или таблица FAT32.
Выполните процедуру безопасного отключения в WSL перед извлечением.
2.7.1. Сброс дискового кэша и отмонтирование разделов
В терминале WSL сбросьте буферы записи и отключите разделы:
sync
umount /mnt/sd_boot /mnt/sd_rootfs
Проверка: выполните lsblk /dev/sde — в столбце MOUNTPOINTS должно стать пусто.
2.7.2. Освобождение виртуального USB-порта
В терминале WSL отключите устройство:
usbip detach -p 00
Проверка: выполните lsblk — диск /dev/sde должен полностью исчезнуть из системы.
Как только команда usbip detach -p 00 выполнена, картридер можно безопасно извлекать из USB-порта компьютера.
3. Windows 10
3.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
3.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.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-картой.
3.4. Создание точек монтирования
Создать каталоги:
sudo mkdir -p /mnt/sd_boot
sudo mkdir -p /mnt/sd_rootfs
Получаем:
/mnt/sd_boot
/mnt/sd_rootfs
3.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-устройства.
3.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.
3.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
3.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
3.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-карте.
3.10. Правильное размонтирование
Перед размонтированием необходимо выйти из каталогов SD-карты:
cd ~
Сначала размонтировать rootfs:
umount /mnt/sd_rootfs
Затем раздел BOOT:
umount /mnt/sd_boot
Проверить:
mount | grep '/mnt/sd_'
Если команда ничего не вывела, оба раздела размонтированы.
3.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
3.12. Отключение USB-кардридера от WSL
После успешного размонтирования обоих разделов перейти в Windows PowerShell:
usbipd detach --busid 7-4
После этого USB-кардридер можно физически отключить.
3.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_'
3.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
3.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
3.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 │
└──────────────────────────────┘
3.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
3.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