[syslinux] Syslinux search for config file
Gert Hulselmans
hulselmansgert at gmail.com
Thu Aug 30 01:16:55 PDT 2012
2012/8/30 Tomas M <tomas at slax.org>:
>>> I also tested 4.05, and it did NOT search the install directory if such
>>> directory is not in the "expected" list. Tomas also got the same result (as
>>> he wrote in a previous email in this same thread).
>>
>> He stated such but without more data, I can't be certain he's not
>> encountering something that's already been resolved.
>
> I see symptoms as described by Ady Ady
> I install syslinux from windows, using syslinux.exe (32bit binary),
> which I got from syslinux 4.05 source distribution (there is the
> binary precompiled).
> # syslinux.exe -maf -d \slax\boot F:
>
I guess it is a bug in the windows version of the Syslinux installer:
In win/syslinux.c, the directory path will replace all / characters with \
(so -d /boot/blabla works the same as -d \boot\blabla):
================================================
/* Move the file to the desired location */
if (opt.directory) {
char new_ldlinux_name[strlen(opt.directory) + 16];
char *cp = new_ldlinux_name + 3;
const char *sd;
int slash = 1;
new_ldlinux_name[0] = opt.device[0];
new_ldlinux_name[1] = ':';
new_ldlinux_name[2] = '\\';
for (sd = opt.directory; *sd; sd++) {
char c = *sd;
if (c == '/' || c == '\\') {
if (slash)
continue;
c = '\\';
slash = 1;
} else {
slash = 0;
}
*cp++ = c;
}
================================================
In the syslinux_patch function of libinstaller/syslxmod.c:
================================================
/* Poke in the base directory path */
if (subdir) {
int sublen = strlen(subdir) + 1;
if (get_16_sl(&epa->dirlen) < sublen) {
fprintf(stderr, "Subdirectory path too long... aborting
install!\n");
exit(1);
}
memcpy_to_sl(ptr(boot_image, &epa->diroffset), subdir, sublen);
}
================================================
The subdir name that is written to the extended patch area dir offset
(epa->diroffset)
contains always backslashes, when you run the Windows syslinux installer.
Probably Syslinux can't handle backslashes, when booted (in the configuration
files you also need to use forward slashes).
Run bootinfoscript: http://sourceforge.net/projects/bootinfoscript/
When you install Syslinux from linux, you will see something like this:
sdb1: __________________________________________________________________________
File system: vfat
Boot sector type: SYSLINUX 4.05 2011-12-09
Boot sector info: Syslinux looks at sector 952269 of /dev/sdb1 for its
second stage. SYSLINUX is installed in the
/boot/syslinux2 directory. No errors found in the Boot
Parameter Block.
When you install Syslinux from Windows, I expect that you will see
something like this:
sdb1: __________________________________________________________________________
File system: vfat
Boot sector type: SYSLINUX 4.05 2011-12-09
Boot sector info: Syslinux looks at sector 952269 of /dev/sdb1 for its
second stage. SYSLINUX is installed in the
\boot\syslinux2 directory. No errors found in the Boot
Parameter Block.
> Probably you have some syslinux.cfg file or similar somewhere in the
> common paths. Please try with blank sdb media and only one directory
> "b" in the root
I installed Syslinux to a different directory in the past (from linux)
and it worked fine. I tried directories with dots and spaces.
- Gert Hulselmans
More information about the Syslinux
mailing list