# 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): ```sh sudo apt install aarch64-linux-gnu ``` 2. Clone the repository: ```sh git clone https://github.com/ivoszbg/uniLoader ``` 3. Navigate to the project directory: ```sh cd uniLoader ``` 4. Place your kernel and device tree blobs under the `blob/` directory. ### Make Syntax ```sh make ARCH= CROSS_COMPILE= ``` ### Building Example ```sh 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 ```sh 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.