Generating a "official" kernel image with modded dtb is key.
I met the same problem as reported in this thread on my wdr4900v2 modded with a 16MiB rom, and I managed to achieve above goal by making use of both image builder and the source tree:
- Modify the dts file for the target. (It had better be made a local commit in its own branch, as it can be cherry-picked upon future revisions)
- Build a minimalist custom build for the target (which is unlikely to fail, as it is minimalist), to build all the prerequests. The resulted image could even be flashed, in order to confirm the modified device tree works well.
- Replace the stripped
vmlinux
file generated in step 2 (e.g.${OPENWRT_SRC}/build_dir/target-mips_24kc_musl/linux-ath79_generic/vmlinux
) with the one shipped with image builder (${IMGBUILDER}/build_dir/target-mips_24kc_musl/linux-ath79_generic/vmlinux
). - Invoke
cd ${OPENWRT_SRC}; make target/install
or evenmake -C ${OPENWRT_SRC} target/install
, letting the build system to generate a valid kernel.bin upon the "official" kernel shipped with image builder. - Use image builder to build the flashable image as described above with kernel.bin generated in step 4 ( use
${OPENWRT_SRC}/bin/targets/ath79/generic/openwrt-ath79-generic-tplink_tl-wdr4900-v2-initramfs-kernel.bin
to replace${IMGBUILDER}/build_dir/target-mips_24kc_musl/linux-ath79_generic/tplink_tl-wdr4900-v2-kernel.bin
in my case )
This method should be less error-prone, for it uses the original build system to generate kernel.bin, rather than by hand.