Skip to main content

Open Source library for easy development with i.MX platform

Project description

Build Status Coverage Status PyPI Status Python Version

This repository collects a useful tools and python module targeted for i.MX Applications Processors.

What is implemented:

  • DCD (Device Configuration Data) API

  • Boot Image v2 (i.MX6 and i.MX7) API

  • Boot Image v3 (i.MX8QM-A0 and i.MX8QXP-A0) API

  • SDP (Serial Download Protocol) API - only USB interface

  • HAB-Log parser (only i.MX6 and i.MX7 yet)

Embedded tools:

  • imxim - a tool for manipulation with *.imx boot image

  • imxsd - a tool to download and execute code on i.MX/Vibrid SoCs through the Serial Download Protocol (SDP)

    This project is still in developing phase. Please, test it and report founded issues.

Dependencies

  • Python - Python 3.x interpreter

  • Click - Python package for creating beautiful command line interface.

  • pyYAML - YAML parser and emitter for the Python programming language.

  • PyUSB - Python package to access USB devices in Linux OS.

  • PyWinUSB - Python package that simplifies USB-HID communications on Windows OS.

Installation

$ pip install imx

To install the latest version from master branch execute in shell following commands:

$ pip install -r https://raw.githubusercontent.com/molejar/pyIMX/master/requirements.txt
$ pip install -U https://github.com/molejar/pyIMX/archive/master.zip

In case of development, install pyIMX from sources:

$ git clone https://github.com/molejar/pyIMX.git
$ cd pyIMX
$ pip install -r requirements.txt
$ pip install -U -e .

You may run into a permissions issues running these commands. Here are a few options how to fix it:

  1. Run with sudo to install pyIMX and dependencies globally

  2. Specify the --user option to install locally into your home directory (export “~/.local/bin” into PATH variable if haven’t).

  3. Run the command in a virtualenv local to a specific project working set.

Usage

In following example is demonstrated the simplicity of usage i.MX boot image API covered by imx.img module:

import imx

# --------------------------------------------------------------------------------
# Create new U-Boot i.MX6/7 image
# --------------------------------------------------------------------------------

# Create DCD segnent instance
dcd = imx.img.SegDCD()

# Create Write Data command and append values with addresses
cmd = imx.img.CmdWriteData(4, imx.img.EnumWriteOps.WRITE_VALUE)
cmd.append(0x30340004, 0x4F400005)
cmd.append(0x30391000, 0x00000002)
cmd.append(0x307A0000, 0x01040001)
...

# Append commands into DCD segment
dcd.append(cmd)
dcd.append(imx.img.CmdCheckData(4, imx.img.EnumCheckOps.ANY_CLEAR, 0x307900C4, 0x00000001))

# Open U-Boot raw image
with open('u-boot.img', 'rb') as f:
    app = f.read()

# Create IMX U-Boot image with DCD segment
image = imx.img.BootImg2(0x877FF000, app, dcd)

# Print image info
print(image)

# Save IMX U-Boot image
with open('u-boot.imx', 'wb') as f:
    f.write(image.export())

# --------------------------------------------------------------------------------
# Extract DCD from existing U-Boot i.MX6/7 image
# --------------------------------------------------------------------------------

# Open U-Boot IMX image
with open('u-boot.imx', 'rb') as f:
    data = f.read()

# Parse U-Boot IMX image
image = imx.img.BootImg2.parse(data)

# Extract DCD from U-Boot IMX image
dcd = image.dcd

# Print extracted DCD info
print(dcd)

# Save extracted DCD content as raw image
with open('dcd.img', 'wb') as f:
    f.write(dcd.export())

# Save extracted DCD content as readable text file
with open('dcd.txt', 'w') as f:
    f.write(dcd.store())

Second example demonstrate usage of i.MX serial downloader protocol API covered by imx.sdp module:

    import imx

    # scan for connected USB devs
    devs = imx.sdp.scan_usb()

    if devs:
        i = 0
        for dev in devs:
            print("{}) {}".format(i, dev.usbd.info))
            i += 1

        # Connect to first i.MX device
        flasher = devs[0]
        flasher.open()

        # Read data from IMX Device (i.MX7D OCRAM)
        data = flasher.read(0x910000, 100, 8)

        # Write boot image data into IMX Device (i.MX7D OCRAM)
        flasher.write_file(0x910000, data)

        ...

        # Disconnect IMX Device
        flasher.close()

For running ``imx.sdp`` module without root privileges in Linux OS
copy attached udev rules
`90-imx-sdp.rules <https://github.com/molejar/pyIMX/blob/master/udev/90-imx-sdp.rules>`__
into ``/etc/udev/rules.d`` directory and reload it with command:
``sudo udevadm control --reload-rules``.

TODO

  • Add serial interface support for imx.sdp module

  • Add image security features (sign and encryption)

  • Add eFuses read, write and validation functionality

  • Add HAB-log parser for i.MX-RT and i.MX8 devices

  • Add support for QSPI Flash image

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

imx-0.1.1.tar.gz (44.6 kB view details)

Uploaded Source

Built Distribution

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

imx-0.1.1-py3-none-any.whl (50.0 kB view details)

Uploaded Python 3

File details

Details for the file imx-0.1.1.tar.gz.

File metadata

  • Download URL: imx-0.1.1.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.9.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.5.6

File hashes

Hashes for imx-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8546f3331a263260376444455939b86f0e37339fc5d3477cb2f405077bec3658
MD5 e85bb2a7d4ba522dbba7d07714f3577a
BLAKE2b-256 6ec7424b4744ffda6369f5778bc53a111af66abf05d90e6d3c3bfcb36578efe6

See more details on using hashes here.

File details

Details for the file imx-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: imx-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 50.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.9.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.5.6

File hashes

Hashes for imx-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0ec390fef9ee4ce187c858fabb3125ee840062538baa687e20cca3b3c088befd
MD5 bce2f1367e2bfadeaeb103c80b286b8c
BLAKE2b-256 b14d4e6bf793be6c3b4f9d3d64b29c7dcdc7ad2347d28e6a0fec2fbdac72e058

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