I know that rockedge has developed a huge puppy kernel, which keeps initrd in a skeleton state and 00modules & 01fm can be put outside the intrd. But when I booted with it, my screen display showed improper resolution. This lead me to think that puppy's kernel + modules may not work on some hardware, especially when you try to weedog-boot new or weird distros.
In this case, I think it's probably better to use that distro's built-in vmlinuz and modules, but the process of decompressing/recompressing weedog initrd is kind of annoying. So I have been thinking, is it possible to use that distro's own vmlinuz and modules folder, while at the same time keeping the modules outside of initrd?
I came to re-read wiak's initrd init and w_init scripts.
I noticed that the modprobe procedure (many modules!) is done quite early in the init script (except another modprobe later in w_init to get overlayfs module). Trying to load so many modules in an early stage means you have to squeeze a big module folder in initrd (with all the decompressing/recompressing rigamarole), since we are talking about using distro's vmlinuz instead of a huge puppy vmlinuz now.
So, is it possible to separate the modprobe procedure into two parts? First part is only to add those absolutely needed modules for reading and mounting and overlaying file systems. Second stage happens after all the layers are merged, so that an external full modules folder can be probed to drive other hardware parts, such as graphics, audio, etc.
The purpose is to let the initrd contain a minimal modules folder, only enough for mounting and overlaying files. Other modules can simply reside externally in the 00-modules folder. And the initrd can stay unchanged from distro to distro. For each new distro, we only have to copy the vmlinuz and modules to the weedog-xxx directory.
This means the init and w_init scripts need to be re-written to split modprobe into an early stage and a later stage, which I think is viable. But I'm not sure whether it is practical to build a minimal module folder into initrd which would work with all distros' vmlinuz.