Problem :
I have been using the latest version of loadlin.exe
(version 1.6e). It works on some machines but on others I get “no place after kernel for initrd”. The kernel is about 5MB in size (non-modular) and my initrd image (decompressed) is about 8MB. One route that I could take is to enable module support and offload some of the weight of the kernel into the initrd image but I’m not confident this will rectify the issue. Are there any alternatives to loadlin.exe
that are capable of loading Linux from a booted DOS session? I basically have a series of DOS tools that I’d like to run one after another and then boot into Linux, which loadlin.exe
seems to be working very well for except on some machines.
Solution :
If it is still of interest:
Try to start Linux with the linld.com
command. It can handle big kernel images (>4 MB) and a big initrd
(>10 MB).
In my system, I use the following command:
c:loadlinmandrakelinld image=C:loadlinmandrakelinuz263.889 initrd=c:loadlinmandrakeinit-263.889 "cl=root=/dev/sdc14 ro video=1024x768"
linld.com
can be downloaded from here.
In the end, I had to cut the size of the kernel down. When you run loadlin.exe
without any arguments it prints out the amount of memory available (this is the amount of memory that DOS sees and not the amount of memory installed in the machine). On some machines, only 16MB is available, and on others, 64MB is available. I guess it could be any value really.
loadlin.exe
assumes that the kernel has a 1:2 compression ratio, and because Linux is loaded at address 0x00100000
(1MB), then you need to ensure that:
kernel_size * 2 + initrd_size < available_ram - 0x00100000
If you have a modular kernel, offloading kernel modules into initrd rather than building them into the kernel may help. Choosing a different kernel compression may also help.
Try with Syslinux instead, it tends to work better for me.