imx 0.1.3

Creator: bradpython12

Last updated:

0 purchases

TODO
Add to Cart

Description:

imx 0.1.3

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)
SRK Table API

Embedded tools:

imxim
- a tool for manipulation with *.imx boot image
imxsd
- a tool to download and execute code on i.MX 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.
bincopy - Python package for
parsing S-Record, Intel HEX and TI-TXT files.
easy_enum - User friendly
implementation of documented Enum type for Python language.
cryptography - Provides
cryptographic recipes and primitives to Python developers
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:

Run with sudo to install pyIMX and dependencies globally
Specify the --user option to install locally into your home
directory (export “~/.local/bin” into PATH variable if haven’t).
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:
from imx import img

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

# Create DCD segment instance
dcd = img.SegDCD()

# Create Write Data command and append values with addresses
cmd = img.CmdWriteData(4, 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(img.CmdCheckData(4, 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 = 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 = 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:
from imx import sdp

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

if devs:
# Print list of connected devices
for i, dev in enumerate(devs):
print("{}) {}".format(i, dev.usbd.info()))

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

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

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

# Other commands
# ...

# 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

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.