CLI-утилита для чтения, runtime-загрузки и постоянной прошивки firmware ASMedia ASM3042 и ASM3142 под Linux
Project description
asm3042-flasher
asm3042-flasher это Python-пакет с CLI-утилитой для Linux, предназначенной для работы с firmware PCIe-контроллеров ASMedia ASM3042 и ASM3142.
Пакет поддерживает три режима работы:
upload: runtime-загрузка firmware в SRAM контроллера;permanent-write-internal: постоянная запись во встроенный SPI ROM через внутренний ASMedia PCIe-протокол;permanent-write: постоянная запись черезflashromи внешний SPI-программатор.
Статус проекта
Текущий статус: alpha.
Internal permanent-flash путь реализован по reverse-engineering Windows-пакета ASMTxHCI_MPTool и предназначен для Linux-систем, где нужно получить поведение, близкое к фирменной Windows-утилите, без внешнего программатора.
Возможности
- поиск ASMedia xHCI-устройств через
/sys/bus/pci/devices; - чтение текущей версии running firmware через mailbox-регистры;
- разбор
.bin-файла и извлечение permanent payload из ASMedia-образов с тегами*_RCFGи*_FW; - runtime-загрузка firmware в SRAM;
- чтение встроенного SPI ROM через внутренний PCIe-протокол;
- постоянная запись встроенного SPI ROM через внутренний PCIe-протокол;
- резервное копирование SPI ROM перед постоянной записью;
- альтернативная работа через
flashromи внешний SPI-программатор.
Поддерживаемые устройства
Подтверждённый safe allowlist пакета:
1b21:30421b21:3142
Для других ASMedia xHCI-устройств доступен --force-device, но использовать его нужно только после отдельной проверки совместимости.
Требования
- Linux;
- Python 3.10 или новее;
- права
rootдляversion,upload,permanent-read-internalиpermanent-write-internal; - установленный
flashromи внешний SPI-программатор, если используется внешний путьpermanent-readилиpermanent-write; - корректный firmware-файл
.bin, совместимый с вашей платой и ревизией контроллера.
Установка
Установка из PyPI:
python -m pip install asm3042-flasher
Установка из исходников:
python -m pip install .
Запуск тестов в репозитории:
PYTHONPATH=src python -m pytest -q
Быстрый старт
Найти поддерживаемые устройства:
asm3042-fw discover
Посмотреть структуру firmware-файла:
asm3042-fw inspect /path/to/firmware.bin
Прочитать текущую running firmware version:
sudo asm3042-fw version --bdf 0000:03:00.0
Сделать backup встроенного SPI ROM через внутренний ASMedia-протокол:
sudo asm3042-fw permanent-read-internal asm3142-backup.bin --bdf 0000:03:00.0
Постоянно записать встроенный SPI ROM без внешнего программатора:
sudo asm3042-fw permanent-write-internal /path/to/firmware.bin --bdf 0000:03:00.0
Постоянно записать встроенный SPI ROM с Windows-совместимыми overrides из ASMTxHCIMPTool.ini:
sudo asm3042-fw permanent-write-internal /path/to/firmware.bin \
--ini /path/to/ASMTxHCIMPTool.ini \
--bdf 0000:03:00.0
Постоянно записать внешнюю flash-память через flashrom:
asm3042-fw permanent-write /path/to/firmware.bin --programmer ch341a_spi
Команды
asm3042-fw discover
- выводит список найденных ASMedia xHCI-устройств;
- показывает
BDF,vendor,device, текущий драйвер и статусknown-protocol.
asm3042-fw inspect <firmware.bin>
- показывает источник и размер файла;
- извлекает
family-tagиheader-tags; - для поддерживаемых ASMedia-образов показывает
permanent-raw-sizeиpermanent-rom-size.
asm3042-fw version [--bdf ...]
- читает running firmware version из контроллера;
- требует
root; - по умолчанию работает только с устройствами из allowlist.
asm3042-fw upload <firmware.bin> [--bdf ...]
- загружает firmware во внутреннюю SRAM;
- не меняет содержимое SPI ROM;
- требует
root; - по умолчанию временно отвязывает PCI-драйвер.
asm3042-fw permanent-read-internal <backup.bin> [--bdf ...]
- читает встроенный SPI ROM через внутренний ASMedia PCIe-протокол;
- требует
root; - по умолчанию читает весь обнаруженный SPI ROM;
- если устройство осталось в состоянии
driver=-, сначала пытается автоматически восстановитьxhci_hcdчерезbind,resetиremove/rescan; - может использоваться для обязательного резервного копирования перед записью.
asm3042-fw permanent-write-internal <firmware.bin> [--ini ASMTxHCIMPTool.ini] [--bdf ...]
- собирает финальный ROM-образ по Windows-логике
CREATE_ROM, а не шьёт только raw payload; - может применить
SSID/SVID/PCIe speedoverrides изASMTxHCIMPTool.ini; - по умолчанию делает backup текущего SPI ROM;
- записывает firmware во встроенный SPI ROM без внешнего программатора;
- по умолчанию выполняет readback verification;
- если устройство осталось в состоянии
driver=-, сначала пытается автоматически восстановитьxhci_hcdчерезbind,resetиremove/rescan; - после записи требует cold reboot или power cycle для проверки нового образа.
asm3042-fw permanent-read <backup.bin> --programmer ...
- читает SPI flash через
flashromи внешний программатор.
asm3042-fw permanent-write <firmware.bin> --programmer ...
- пишет SPI flash через
flashromи внешний программатор; - остаётся полезным fallback-режимом, если internal PCIe-путь не подходит.
Примеры
Постоянная запись встроенной flash-памяти без внешнего программатора:
sudo asm3042-fw permanent-write-internal \
/software/firmware_collection/expansion_board/AQAIC1-USB31-A2.bin \
--bdf 0000:01:00.0
Та же операция с Windows MPTool .ini, например для crossflash 3142 -> 3042:
sudo asm3042-fw permanent-write-internal \
/software/firmware_collection/expansion_board/AQAIC1-USB31-A2.bin \
--ini /home/ivan/Документы/ASMTxHCI_MPToolv1430/ASMTxHCIMPTool.ini \
--bdf 0000:01:00.0
Та же операция без автоматического backup:
sudo asm3042-fw permanent-write-internal \
/software/firmware_collection/expansion_board/AQAIC1-USB31-A2.bin \
--bdf 0000:01:00.0 \
--skip-backup
Backup только первых 0x10000 байт:
sudo asm3042-fw permanent-read-internal partial-backup.bin --bdf 0000:01:00.0 --size 0x10000
Ограничения и меры предосторожности
- Internal permanent path основан на reverse-engineering Windows-утилиты ASMedia, а не на официально опубликованной документации.
- Для безопасной записи нужно использовать только firmware, совместимую с конкретной платой и ревизией контроллера.
- На время
unbind/bindвсе USB-устройства за этим контроллером будут временно отключены. - После
permanent-write-internalrunning firmware может оставаться прежней до полного холодного перезапуска. - Если контроллер после неудачной операции завис в состоянии
driver=-, пакет сначала попробуетbind, затем PCIreset, затемremove/rescan; если и это не помогает, нужен cold reboot. - Если backup уже существует, пакет по умолчанию не перезапишет его без
--overwrite-backup. - Если устройство не входит в allowlist, пакет потребует явный
--force-device.
Публикация пакета
Сборка:
python -m build
Проверка README и метаданных:
python -m twine check dist/*
Публикация в PyPI:
python -m twine upload dist/*
Основание реализации
Проект использует два источника протокола:
- публично доступную Linux-реализацию runtime firmware loader для ASMedia xHCI;
- reverse-engineering Windows-пакета
ASMTxHCI_MPTool, включаяASMTxHCI_MPTool.exe,ASMxHCICtlDLL.dllиASMxHCICtl64.sys.
Лицензия
Проект распространяется под лицензией MIT. Полный текст находится в файле LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asm3042_flasher-0.4.5-py3-none-any.whl.
File metadata
- Download URL: asm3042_flasher-0.4.5-py3-none-any.whl
- Upload date:
- Size: 27.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e9d142ac330d113d7db6463abd43bff54d373c2b3a4c31bd475d451a14c5d4b
|
|
| MD5 |
b0d9ddb5215a566c1a5bbd1b4b432261
|
|
| BLAKE2b-256 |
414a4138072df0bdb177a274bb8dbb7b3a93db750fad394c79ec01ce7e8adac5
|