Skip to main content

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:3042
  • 1b21: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

Постоянно записать внешнюю 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.

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;
  • может использоваться для обязательного резервного копирования перед записью.

asm3042-fw permanent-write-internal <firmware.bin> [--bdf ...]

  • извлекает permanent payload из ASMedia .bin;
  • по умолчанию делает backup текущего SPI ROM;
  • записывает firmware во встроенный SPI ROM без внешнего программатора;
  • по умолчанию выполняет readback verification;
  • после записи требует 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

Та же операция без автоматического 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-internal running firmware может оставаться прежней до полного холодного перезапуска.
  • Если 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asm3042_flasher-0.3.0.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

asm3042_flasher-0.3.0-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file asm3042_flasher-0.3.0.tar.gz.

File metadata

  • Download URL: asm3042_flasher-0.3.0.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for asm3042_flasher-0.3.0.tar.gz
Algorithm Hash digest
SHA256 ca048404d4bf47cb106e84fdd235f4f03989fa262c85f851a2158ad88a3c78c2
MD5 95ee567675e6996b6367d28a9dc587ec
BLAKE2b-256 b9dbcc7cbff349de52e704c4057d3c0ec7d94219926dca779793ffff85ed5653

See more details on using hashes here.

File details

Details for the file asm3042_flasher-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for asm3042_flasher-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8f9b27b400c73d1a58985184bb669bc203c1295dcfb221342c3366ef6f18916
MD5 c37158a2e1103cd8e65cbd79086b6c50
BLAKE2b-256 1cda3241d360bb95c92b90d23b859a0f56b841ece612858b9c1cda98ee2e06da

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page