CLI-утилита для загрузки firmware в контроллеры ASMedia ASM3042 и ASM3142 под Linux
Project description
asm3042-flasher
asm3042-flasher это Python-пакет с CLI-утилитой для Linux, предназначенной для загрузки firmware в PCIe-контроллеры ASMedia ASM3042 и ASM3142 через PCI configuration space и BAR0 MMIO.
Пакет ориентирован на сценарий, когда у платы есть рабочий бинарный образ firmware в формате .bin, а загрузку нужно выполнить напрямую из Linux без сторонних графических утилит.
Статус проекта
Текущий статус: alpha.
Инструмент поддерживает два разных сценария:
upload: runtime-загрузка firmware в SRAM контроллера;permanent-write: постоянная запись во внешний SPI flash через внешний программатор иflashrom.
Для internal ASMedia PCIe-пути это важно:
- пакет загружает firmware в работающий контроллер;
- internal PCIe-путь не реализует подтверждённую постоянную запись во внешний SPI ROM;
- после выключения питания или полного reboot загрузку, скорее всего, придётся повторить;
- для постоянной прошивки нужен внешний SPI-программатор.
Возможности
- поиск ASMedia xHCI-устройств через
/sys/bus/pci/devices; - чтение текущей версии firmware через mailbox-регистры контроллера;
- проверка и разбор заголовков firmware-файла;
- загрузка firmware в SRAM по documented ASMedia upload sequence;
- чтение и запись внешней SPI flash через
flashrom; - автоматический
unbindиbindPCI-драйвера на время загрузки.
Требования
- Linux;
- Python 3.10 или новее;
- права
rootдля командversionиupload; - установленный
flashromи внешний SPI-программатор дляpermanent-readиpermanent-write; - PCIe-плата на базе ASMedia ASM3042, ASM3142 или совместимого контроллера, для которого вы отдельно подтвердили совместимость.
Установка
После публикации в PyPI:
python -m pip install asm3042-flasher
Установка из исходников:
python -m pip install .
Локальный запуск тестов из репозитория:
PYTHONPATH=src python -m pytest
Быстрый старт
Найти подходящие устройства:
asm3042-fw discover
Проверить firmware-файл:
asm3042-fw inspect /path/to/firmware.bin
Прочитать текущую версию firmware контроллера:
sudo asm3042-fw version --bdf 0000:03:00.0
Загрузить firmware:
sudo asm3042-fw upload /path/to/firmware.bin --bdf 0000:03:00.0
Считать резервную копию внешней SPI flash через flashrom:
asm3042-fw permanent-read backup.bin --programmer ch341a_spi
Постоянно записать firmware через внешний программатор:
asm3042-fw permanent-write /path/to/firmware.bin --programmer ch341a_spi
Если в системе найден ровно один ASMedia xHCI-контроллер, параметр --bdf можно не указывать.
Команды
asm3042-fw discover
- выводит список подходящих PCIe-устройств;
- показывает
BDF,vendor,device, текущий драйвер и признакknown-protocol.
asm3042-fw inspect <firmware.bin>
- показывает источник файла;
- показывает размер образа;
- извлекает распознанные header tags, например
2214A_RCFGи2214A_FW.
asm3042-fw version [--bdf ...]
- читает версию firmware из контроллера;
- требует
root; - по умолчанию работает только с устройствами из allowlist.
asm3042-fw upload <firmware.bin> [--bdf ...]
- загружает образ в SRAM контроллера;
- требует
root; - отказывается перезаписывать уже загруженный runtime-образ без флага
--force-running-firmware; - по умолчанию временно отвязывает драйвер, если не указан
--keep-driver-bound.
asm3042-fw permanent-read <backup.bin> --programmer ...
- вызывает
flashrom -rчерез внешний SPI-программатор; - предназначена для чтения внешней flash-памяти и создания резервной копии;
- не зависит от runtime-состояния xHCI-драйвера.
asm3042-fw permanent-write <firmware.bin> --programmer ...
- вызывает
flashrom -wчерез внешний SPI-программатор; - по умолчанию сначала читает обязательный backup внешней flash-памяти;
- является рекомендованным режимом для постоянной прошивки.
Ограничения и меры предосторожности
- Утилита рассчитана только на Linux.
- На время
unbind/bindвсе устройства за этим USB-контроллером будут временно отключены. permanent-writeпредполагает внешний SPI-программатор, напримерch341a_spiилиserprog.- Перед загрузкой firmware нужно убедиться, что бинарный файл соответствует вашей ревизии платы.
- Пример файла
AQAIC1-USB31-A2.binсодержит теги2214A_RCFGи2214A_FW; это повод отдельно проверить совместимость перед прошивкой. - Если устройство не входит в текущий allowlist, пакет потребует явный
--force-device.
Публикация пакета
Сборка дистрибутивов:
python -m build
Проверка метаданных и рендеринга README:
python -m twine check dist/*
Публикация в PyPI:
python -m twine upload dist/*
Основание реализации
Реализация основана на публично доступных источниках:
- ASMedia ASM3042 product page: https://www.asmedia.com.tw/product/jn8yQ5s8t8TP0o6o/9A2YQ78xZ0UR5Q5y
- Linux ASMedia xHCI firmware loader reference implementation: https://raw.githubusercontent.com/AsahiLinux/linux/asahi/drivers/usb/host/xhci-pci-asmedia.c
- Upstream Linux PCI device IDs and xHCI quirks: https://raw.githubusercontent.com/torvalds/linux/master/drivers/usb/host/xhci-pci.c
- flashrom README: https://www.flashrom.org/
- flashrom supported programmers: https://flashrom.org/supported_hw/supported_prog/index.html
Лицензия
Проект распространяется под лицензией 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 Distribution
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.2.0.tar.gz.
File metadata
- Download URL: asm3042_flasher-0.2.0.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02b0c5ccb31aa0e0b0a247f64317a8927e1f1bbfb45b8befdf1fd03d05c88d88
|
|
| MD5 |
e7f25f9b1ab7f85b17d3459337f26bdc
|
|
| BLAKE2b-256 |
d8fc8c49ac6a2f74fee150dab30afa579a1a45f202960118a37d16d762397d85
|
File details
Details for the file asm3042_flasher-0.2.0-py3-none-any.whl.
File metadata
- Download URL: asm3042_flasher-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.0 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 |
0ad44a3ff0106c3142e23cef894dd3ed30b93a11bb9f0d1ab93843db177eb480
|
|
| MD5 |
159805fcb4d865a620b40e23d2a50282
|
|
| BLAKE2b-256 |
83a84b9f1c79b1eed35a01ef58493952866d59f24eaf175356e162bdeb968d4b
|