A minature bootloader that is called from the original kernel and boots custom one.
It consist from:
- small kernel module, for creating device for booting/controlling boot
- small userspace program, which give for module boot image and flags
- tiny bootloader making space for subsequent kernel boot (kexec like)
It's derived from collaborative work of yakk and dimichxp for creating bootloader for older Motorola phones (Freescale based), before their RSA signature protection have been bypassed.
As of 11/10/2012, czechop created a patch to keep Wrigley 3G modem working under the child kernel (when called at “sh hijack” time). Now the only issue on Motorola Milestone is sluggishness for cca. 10 - 20 minutes after the boot until the kernel suspends, after which it operates normally.
You will need UART debugging for development of hboot binary and kernel: Debugging
- Download Froyo kernel sources from Moto (Build number 5.26.0 (220.127.116.11 kernel))
- Install arm toolchain (you can use the one coming from Android)
- Compile "hbootmod" as a module for 18.104.22.168 kernel
- Compile "hboot" as a standalone binary
- Compile "hbootuser" as a normal Android application
Keep in mind that all parts have to have the same configuration. You can find all info about compilation of kernel and toolchain here
Yakk patched 2nd-boot to make it work on the Milestone, but his source code remains partly unpublished at this time. Status: boots another kernel, which Yakk has also patched to get serial output over the USB connector (using custom hardware to connect to it). Currently the booted kernel has some problems with USB and fails to initialize the phone's modem so it crashes. All current development of 2ndboot now going here When GSM is disabled this kexec module is able to boot the system with the recompiled kernel, but it is not really useful as a phone then. WiFi works fine, though. Yakk is now trying to use 2ndboot to start a patched version of mbm, which should be able to initialize the modem and then pass control to a custom Linux kernel. This is still under development, so don't get too excited. We'll keep you posted.
It works fine.
mount -t debugfs none_debugs /sys/kernel/debug cat /sys/kernel/debug/usbmon/1t