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.
Инструмент реализует подтверждённую последовательность runtime-загрузки firmware в SRAM контроллера. Это важно:
- пакет загружает firmware в работающий контроллер;
- пакет не реализует подтверждённую постоянную запись во внешний SPI ROM;
- после выключения питания или полного reboot загрузку, скорее всего, придётся повторить;
- для постоянной прошивки нужен отдельно подтверждённый SPI write-протокол или внешний SPI-программатор.
Возможности
- поиск ASMedia xHCI-устройств через
/sys/bus/pci/devices; - чтение текущей версии firmware через mailbox-регистры контроллера;
- проверка и разбор заголовков firmware-файла;
- загрузка firmware в SRAM по documented ASMedia upload sequence;
- автоматический
unbindиbindPCI-драйвера на время загрузки.
Требования
- Linux;
- Python 3.10 или новее;
- права
rootдля командversionиupload; - 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
Если в системе найден ровно один 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.
Ограничения и меры предосторожности
- Утилита рассчитана только на Linux.
- На время
unbind/bindвсе устройства за этим USB-контроллером будут временно отключены. - Перед загрузкой 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
Лицензия
Проект распространяется под лицензией 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.1.1.tar.gz.
File metadata
- Download URL: asm3042_flasher-0.1.1.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52e91dc50ba9206e176fc36ad7590776985b309048e6983e34de79b1c3b0d8ad
|
|
| MD5 |
2f5f4150a93ac10da669c447f3e9bd8a
|
|
| BLAKE2b-256 |
76f22f4a8beab6eba13b74bec97a3735bf328abb27846ccd4495104bc360f446
|
File details
Details for the file asm3042_flasher-0.1.1-py3-none-any.whl.
File metadata
- Download URL: asm3042_flasher-0.1.1-py3-none-any.whl
- Upload date:
- Size: 12.8 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 |
b2ad854f3a1f2809abc5383008479de76d5b05c8ff766fdb050fac0e57f624bf
|
|
| MD5 |
3c00351601621c60ff778526f34a20cf
|
|
| BLAKE2b-256 |
5ba33460b22f654cde28f76e036375232333bcf682c88b60e93892f9dd18edef
|