1. Build kernel with option: CONFIG_INITRAMFS_SOURCE="" to disable the embedded initramfs, i.e., to disable stage1 init. 2. Extract the current boot and recovery initrds from a working CM9 boot.img: eval `grep -Fam 1 -A 1 BOOT_IMAGE_OFFSETS boot.img | tail -n 1` dd if=boot.img of=boot.cpio.gz bs=512 skip="$boot_offset" count="$boot_len" dd if=boot.img of=recovery.cpio.gz bs=512 skip="$recovery_offset" count="$recovery_len" for i in boot recovery; do mkdir "$i"; cd "$i"; zcat "../$i.cpio.gz" | cpio -idmv; cd ..; done which will create "boot" and "recovery" directories. 3. Update boot/recovery modules and rcs as necessary. 4. Create new boot.cpio.gz and recovery.cpio.gz initrds: for i in boot recovery; do cd "$i"; find . -print0 | cpio -o0vH newc | gzip -9 > "../$i.cpio.gz"; cd ..; done 5. Push zImage, boot.cpio.gz, and recovery.cpio.gz along with boot_zImage_with_boot.zip and boot_zImage_with_recovery.zip to /sdcard. 6. To "normal boot" CM9, apply "boot_zImage_with_boot.zip". Alternatively, to boot CM9 recovery, apply "boot_zImage_with_recovery.zip". 7. New kernel builds should only require pushing a new zImage. You may want to update boot.cpio.gz and recovery.cpio.gz after CM9 ROM builds, or if you change any kernel modules.