Go to file
Ivaylo Ivanov bf49d01793 board: samsung: introduce herolte
Decon is a bit different from newer exynoses.
2025-08-26 11:20:25 +03:00
arch aarch64: guard reloc's linux header with CONFIG_LINUX_KRNL_HEADER_IMG 2025-07-23 10:45:03 +03:00
blob blob: Uncache blob files 2025-02-24 10:19:17 +02:00
board board: samsung: introduce herolte 2025-08-26 11:20:25 +03:00
configs board: samsung: introduce herolte 2025-08-26 11:20:25 +03:00
Documentation/kbuild uniLoader: Migrate to kconfig based configurations 2022-06-14 18:02:47 +03:00
drivers drivers: samsung: Introduce exynos-acpm 2025-02-24 10:20:05 +02:00
include lib: simplefb: calculate font scaling factor dynamically 2025-08-07 13:13:05 +03:00
lib lib: simplefb: calculate font scaling factor dynamically 2025-08-07 13:13:05 +03:00
main main: set printk log levels to meaningful values 2025-07-11 13:45:58 +03:00
scripts check-lxdialog: Fix lxdialog check on new compilers 2025-01-15 21:04:44 +01:00
soc board: samsung: introduce herolte 2025-08-26 11:20:25 +03:00
.gitignore Makefile: set compiler optimizations for armv8-a and provide uniLoader as gzip 2025-07-23 10:18:30 +03:00
.gitmodules lib: Completely drop neatlibc 2024-10-10 16:38:42 +03:00
Kconfig aarch64: introduce early relocation of the bootloader 2025-07-10 15:58:45 +03:00
LICENSE .: Initiate the project 2022-06-12 17:09:32 +03:00
Makefile Makefile: set compiler optimizations for armv8-a and provide uniLoader as gzip 2025-07-23 10:18:30 +03:00
README.md README: change arm64 build example to aarch64 2025-07-12 13:04:32 +03:00

uniLoader

A secondary bootloader that is capable of loading the upstream Linux kernel for Android and iOS-based devices.

The purpose behind it is to provide a small shim for avoiding vendor bootloader quirks.

(ex.: some newer Exynos phones leave decon framebuffer refreshing disabled right before jumping to kernel, which makes initial debugging efforts when bringing up the platform to upstream linux hard)
The currently supported architectures are ARMV7 and AARCH64.

Preparation

  1. Install a toolchain that matches your target architecture (ex. AArch64 cross-toolchain):
    sudo apt install aarch64-linux-gnu
    
  2. Clone the repository:
    git clone https://github.com/ivoszbg/uniLoader
    
  3. Navigate to the project directory:
    cd uniLoader
    
  4. Place your kernel, device tree and ramdisk blobs under the blob/ directory.

Make Syntax

make ARCH=<arch> CROSS_COMPILE=<toolchain>

Building Example

sudo apt install aarch64-linux-gnu
git clone https://github.com/ivoszbg/uniLoader
cd uniLoader
cp /home/user/linux/arch/arm64/boot/Image blob/Image
cp /home/user/linux/arch/arm64/boot/dts/exynos/exynos8895-dreamlte.dtb blob/dtb
cp /home/user/ramdisk.gz blob/ramdisk
make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- -j4 dreamlte_defconfig
make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- -j4

Usage

For Apple devices: Load the generated uniLoader binary via PongoOS.
For Android devices: Replace the Linux kernel in your boot.img with the uniLoader binary.

TODO LIST

  1. [C] Allow loading instead of PongoOS for Apple devices;
  2. [C] Fix/replace the libc implementation;
  3. [M] Implement a serial library and make the debug lib less hacky;
  4. [M] Implement more features:

    New devices
    Boot menu with countdown timer and selectable items via GPIO volume keys
    Threaded execution

[C] = Critical for overall ease of use and functionality
[M] = Nice to have :)

License

This project is licensed under GPL2.