-
Notifications
You must be signed in to change notification settings - Fork 1
Firmware Notes
Jonathan Neuschäfer edited this page Nov 12, 2022
·
4 revisions
partition | load address |
---|---|
booloader |
0x9e800000 (raw from offset 0 to 0x10000) |
demo |
0x80008000 (decompressed) |
img |
0x80200000 (decompressed) |
av_cpu |
0x83e10000 (decompressed) |
- Compress MIPS code with LZMA (format "alone"/"lzma")
- Make sure the "uncompressed size" field is set (unforuntately some tools/libraries don't do this)
- Write LZMA stream somewhere
- Adjust offset/size of "demo" partition
The av_cpu
image consists of a 16-byte header followed by LZMA-Compressed
data.
offset | example | value | description |
---|---|---|---|
0 | 4a 72 04 00 |
291402 | size of partition minus 12 |
4 | 00 00 e1 83 |
0x83e10000 | load target? |
8 | 00 00 e1 83 |
0x83e10000 | jump target |
12 | 00 04 72 46 |
291398 | size of compressed data |
16 | 5d 00 00... |
compressed data |
The resource
partition contains strings used in the user interface, in UTF-16.
The partition is LZMA compressed, like the demo
partition.
The uncompressed content is stored in a buffer of 0x113000 bytes (a little over 1 MiB).
For every allocated chunk at address p, we have the following structure:
address | type | description |
---|---|---|
p - 8 | u32 | allocation size |
p - 4 | u32 | flags |
- send 0x00
- receive 0x52 'R'
- send RAM image; the first 4 bytes are
bf 9c 7d 5a
- 32 bit @ 0x00: 0x5a7d9cbf
- 32 bit @ 0x14: image size minus 0x300
- loaded at 0x9e800000
- entry point at 0x400 bytes offset
The boot1 stage in files named btinit...
uses the following cache operations to establish a clean cache:
- from 0x9e800000 to 0x9e810000:
- load from every location
- from 0x9e800000 to 0x9e804000:
- set ITagLo (TagLo.0) to 0
- cache 0b01000 (I$, index store tag)
- cache 0b10100 (I$, fill from address)
- cache 0b01000 (I$, index store tag)
- from 0x9e800000 to 0x9e804000:
- set DTagLo (TagLo.2) to 0
- cache 0b01001 (D$, index store tag)
- load from to location
- cache 0b01001 (D$, index store tag)
- The main action happens in
data_manager_v2.c
- Partitions are identified by their 8-bit ID, such as 0x93 for the logo partition and 0x8c for the resource partition.
- parse-parttable.py script to list and extract flash partitions
- patch.py script to patch flash partitions
Overview:
Basics:
Peripherals:
Hardware:
Misc: