[ONE Original Android Development] nkk71:
MultiROM boot menu not showing happens for a couple of reasons, to make things clearer, here's the boot sequence (obviously on an injected boot.img):

Kernel boots, and supposedly starts init

due to injection init is actually trampoline

.

trampoline (<- this is the "injection") starts

.

trampoline tries to mount /data partition

.

once /data is mounted, trampoline starts multirom (<- that would include the boot menu)

multirom shows boot menu

.

upon user selection, multirom prepares things

.

and finally runs the real init, which will boot the ROM

Note:

trampoline is located in the ramdisk, but the rest of multirom is actually located at /data/meda/[0]/multirom

This is mainly to keep the boot.img changes as small as possible. Depending on the size of the boot partition, one could actually have everything in the ramdisk, but that also doesn't make *too* much sense, as the settings and ROMs are stored in the /data partition.

(Some experimental exceptions to this applies ;) )

So the boot menu not showing is caused by

multirom is crashing in step 4/5 of the boot sequence, common causes are:

graphics issues,

something not properly initialized in mr_init_devices.c)

.

trampoline is unable to mount the /data partition (step 3 in the boot sequence), common causes:

/data is encrypted with default_password and decryption is failing (if a PIN/Pattern is set at boot, then trampoline would actually ask for it)

a badly formatted fstab

Those are some of the common reasons, but obviously not an exhaustive list.

To find out exactly what is happening you can pull a last_kmsg / ramoops, and check what is happening.

Here's an example with some information:

[B][U][I]Trampoline starts:[/I][/U][/B]
[ 1.776214] c2 1 trampoline: Running trampoline v27
[ 1.776300] c2 1 trampoline: Initializing devices...
[ 1.780652] c2 1 trampoline: Done initializing
[ 1.780679] c2 1 trampoline: Loading fstab "/mrom.fstab"...
[ 1.780836] c2 1 trampoline: Waiting for /dev/block/platform/msm_sdcc.1/by-name/userdata
[B][I]... trampoline is waiting for /data partition to mount[/I][/B]

[B][U][I]Data partition is mounted, now trampoline runs multirom[/I][/U][/B]
[ 2.058742] c1 1 trampoline: Starting adbd
[ 2.059957] c1 1 trampoline: Running multirom
[ 2.070733] c3 264 multirom: Running MultiROM v33a-RC2
[ 2.075487] c3 264 multirom: Loading MultiROM status...
[ 2.077841] c3 264 multirom: Loading fstab "/mrom.fstab"...
[ 2.083909] c3 264 multirom: Adding ROM HTC_One_M8_GPE_5.07.1700.1
[ 2.089272] c3 264 multirom: /proc/config.gz is not available!
[ 2.096766] c3 264 multirom: Adding ROM Internal
[ 2.098936] c3 264 multirom: Adding ROM HTC_One_M8_GPE_5.07.1700.2
[ 2.101698] c3 264 multirom: Dumping multirom status:
[ 2.101709] c3 264 multirom: is_second_boot=0
[ 2.101719] c3 264 multirom: is_running_in_primary_rom=1
[ 2.101728] c3 264 multirom: current_rom=HTC_One_M8_GPE_5.07.1700.1
[ 2.101736] c3 264 multirom: colors_v2=0
[ 2.101746] c3 264 multirom: brightness=50
[ 2.101755] c3 264 multirom: enable_adb=0
[ 2.101763] c3 264 multirom: enable_kmsg_logging=1
[ 2.101772] c3 264 multirom: rotation=0
[ 2.101781] c3 264 multirom: force_generic_fb=0
[ 2.101800] c3 264 multirom: anim_duration_coef=1.000000
[ 2.101810] c3 264 multirom: hide_internal=0
[ 2.101819] c3 264 multirom: int_display_name=Internal
[ 2.101827] c3 264 multirom: auto_boot_seconds=5
[ 2.101836] c3 264 multirom: auto_boot_rom=Internal
[ 2.101845] c3 264 multirom: auto_boot_type=0
[ 2.101853] c3 264 multirom: curr_rom_part=NULL
[ 2.101861] c3 264 multirom:
[ 2.101870] c3 264 multirom: ROM: Internal
[ 2.101879] c3 264 multirom: base_path: /realdata/media/0/multirom/roms/Internal
[ 2.101888] c3 264 multirom: icon_path: /realdata/media/0/multirom/icons/romic_android.png
[ 2.101897] c3 264 multirom: type: 0
[ 2.101906] c3 264 multirom: has_bootimg: 0
[ 2.101914] c3 264 multirom: ROM: HTC_One_M8_GPE_5.07.1700.1
[ 2.101923] c3 264 multirom: base_path: /realdata/media/0/multirom/roms/HTC_One_M8_GPE_5.07.1700.1
[ 2.101933] c3 264 multirom: icon_path: /realdata/media/0/multirom/icons/romic_default.png
[ 2.101942] c3 264 multirom: type: 1
[ 2.101950] c3 264 multirom: has_bootimg: 1
[ 2.101959] c3 264 multirom: ROM: HTC_One_M8_GPE_5.07.1700.2
[ 2.101968] c3 264 multirom: base_path: /realdata/media/0/multirom/roms/HTC_One_M8_GPE_5.07.1700.2
[ 2.101977] c3 264 multirom: icon_path: /realdata/media/0/multirom/icons/romic_default.png
[ 2.101986] c3 264 multirom: type: 1
[ 2.101994] c3 264 multirom: has_bootimg: 1
[ 2.131754] c3 264 mdss_fb_open: fb0 (ref=0)
[ 2.131887] c1 264 multirom: Pixel format: 1080x1920 @ 32bpp
[ 2.131898] c1 264 multirom: Pixel format: RGBX_8888
[ 2.169042] c1 264 multirom: Framebuffer implementation: Generic
[ 2.188472] c0 264 multirom: Using universal theme (-1)
[I][B]... Boot menu show up[/B][/I]

[B][U][I]I've selected a secondary ROM, so multirom has to go for second boot[/I][/U][/B]
[ 6.198207] c0 264 multirom: No run-on-boot scripts for ROM HTC_One_M8_GPE_5.07.1700.2
[ 6.525290] c2 264 multirom: No need to update trampoline.
[ 6.614779] c2 264 multirom: Loading kexec:
[ 6.614791] c2 264 multirom: /realdata/media/0/multirom/kexec
[ 6.614801] c2 264 multirom: --mem-min=0x03200000
[ 6.614809] c2 264 multirom: --boardname=m8
[ 7.330957] c1 264 multirom: Saving multirom status
[ 7.357496] c1 264 multirom (264:264) triggered SysRq
[I][B]... multirom now reboots, so it can boot a secondary rom[/B][/I]

[B][U][I]On second boot (no boot menu will be visible):[/I][/U][/B]
[ 6.177372] c3 270 multirom: Dumping multirom status:
[ 6.177382] c3 270 multirom: is_second_boot=1
[B][ 6.209819] c3 270 multirom: Skipping ROM selection, is_second_boot=1, auto_boot_type=0x0
[ 6.209857] c3 270 multirom: No run-on-boot scripts for ROM HTC_One_M8_GPE_5.07.1700.2[/B]
[B][I]...multirom prepares things[/I][/B]
[ 6.265884] c3 270 multirom: Modifying fstab: fstab.qcom
[ 6.265992] c3 270 multirom: Failed to disable partition /system, couldn't find it in fstab!
[ 6.272074] c3 270 multirom: Making media dir: api 23, media_new 1, /realdata/media to /data/media
[ 6.276675] c3 270 multirom: Injecting /file_contexts
[ 6.304952] c3 270 multirom: Saving multirom status

[B][U][I]And finally runs the ROM's init so that the ROM can boot[/I][/U][/B]
[ 6.434658] c3 1 trampoline: Running main_init
[ 6.434701] c3 1 trampoline: Fixing up symlink '/sbin/ueventd' -> '../main_init' to '/sbin/ueventd' -> '../init')
[ 6.434791] c3 1 trampoline: Fixing up symlink '/sbin/watchdogd' -> '../main_init' to '/sbin/watchdogd' -> '../init')

[B][ 6.436205] c0 1 init: init started![/B]