Go to file
Ivaylo Ivanov 3b517ba95a lib: debug: Introduce loglevels + many minor changes
Implement 8 loglevels to use with printk:

While at it, separate the font in a new "video" directory, which
also makes space for a proper video probing implementation. Fill
in the font from 32 to 256. Scale the font to render twice as big.
Implement dynamic line length detection. Change a few things here
and there to follow the linux kernel code style. Add a nice logo.

Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
2024-10-10 16:24:20 +03:00
arch lib: unic: Optimize memcpy and memset for aarch64 2024-10-09 18:49:23 +03:00
blob EXPERIMENTAL: Partially implement NewLib 2023-07-19 19:37:17 +03:00
board uniLoader: Mass rework 2024-10-08 21:22:21 +03:00
configs board: Add support for gta4xl (Samsung Galaxy Tab S6 Lite) 2024-09-15 09:53:37 +03:00
Documentation/kbuild uniLoader: Migrate to kconfig based configurations 2022-06-14 18:02:47 +03:00
drivers uniLoader: Mass rework 2024-10-08 21:22:21 +03:00
include lib: debug: Introduce loglevels + many minor changes 2024-10-10 16:24:20 +03:00
lib lib: debug: Introduce loglevels + many minor changes 2024-10-10 16:24:20 +03:00
main lib: debug: Introduce loglevels + many minor changes 2024-10-10 16:24:20 +03:00
scripts uniLoader: Migrate to kconfig based configurations 2022-06-14 18:02:47 +03:00
soc soc: Add basic support for Exynos9610 2024-09-15 09:53:36 +03:00
.gitignore uniLoader: Mass rework 2024-10-08 21:22:21 +03:00
.gitmodules lib: Replace the broken newlib implementation with neatlibc 2024-08-06 13:25:07 +03:00
Kconfig lib: debug: Introduce loglevels + many minor changes 2024-10-10 16:24:20 +03:00
LICENSE .: Initiate the project 2022-06-12 17:09:32 +03:00
Makefile lib: unic: Optimize memcpy and memset for aarch64 2024-10-09 18:49:23 +03:00
README.md README: Rework it according to the totally-recent build changes 2024-08-06 10:33:38 +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 and device tree 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
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4 dreamlte_defconfig
make ARCH=arm64 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.