This repository documents the process of gaining low-level control over the Gradiente Neo Flip GFP-105A and provides a foundation for developing custom firmware or a minimal operating system for the device.
It is intended for experimentation, reverse engineering, and bare-metal development on the MediaTek MT6261 platform.
This is not a complete development environment. It is a starting point.
This project focuses on:
- Understanding the device boot process
- Reverse engineering firmware structure
- Flashing custom binaries to NOR memory
- Executing user-defined code on the device
- Providing a base for firmware and OS development
- Device: Gradiente Neo Flip GFP-105A
- SoC: MediaTek MT6261
- CPU Architecture: ARMv5
- Storage: NOR Flash
This is a constrained embedded environment. There is no operating system, no memory protection, and no abstraction layer once execution is under your control.
Working at this level carries risk.
- The device can be permanently bricked
- Invalid firmware images may prevent boot
- Recovery may require hardware-level access
Proceed only if you are comfortable working without safety mechanisms.
At a high level, the MT6261 boot process follows this sequence:
- Internal Boot ROM executes
- Firmware is read from NOR flash starting at address
0x00000000 - A header is validated
- The payload is copied to RAM
- Execution jumps to the defined entry point
Controlling the contents at the beginning of flash allows full control over execution.
Firmware images for this device begin with a GRH header. This structure is required for the bootloader to accept and execute the image.
struct GRH {
char magic[4];
uint32_t length;
uint32_t load_addr;
uint32_t entry_point;
uint32_t checksum;
};- magic: Identifies the image format
- length: Total size of the firmware image
- load_addr: RAM destination address
- entry_point: Execution start address
- checksum: Integrity validation
Incorrect values will prevent execution.
- Base address:
0x00000000 - Firmware entry location:
0x000000
- Typical load address:
0x10000000
[GRH header][payload]stored in flash- Bootloader validates header
- Payload copied to RAM
- Execution jumps to entry point
Minimum requirements:
- Valid GRH header
- ARM binary payload
- Safe entry point
- arm-none-eabi-gcc
- GNU ld
- Python (for packing)
ENTRY(_start)
SECTIONS {
. = 0x10000000;
.text : { *(.text*) }
.data : { *(.data*) }
.bss : { *(.bss*) }
}ok
Allows:
- Memory inspection
- Low-level execution
- Hardware testing
flash_tool write openphone-stage1-final.bin @0x000000
Use with caution.
- Achieve stable execution
- Implement UART output
- Validate memory
- Build runtime
- Expand functionality
Useful contributions include:
- GRH documentation improvements
- Memory mapping
- Peripheral documentation
- Tooling
This project is about understanding and control at the lowest level.

