Pour qu’un bootloader passe la main à un autre disque (chainload), j’avais en tête plusieurs syntaxes selon mes lectures :
LOCALBOOT 0x80
ou bien :
COM32 chain.c32
APPEND hd0
ou encore :
KERNEL chain.c32
APPEND hd0
Sur un syslinux moderne (5.x, 6.x), les trois fonctionnent. Sur syslinux 3.31 (figé sur le flash interne d’un NAS de 2010), seul le dernier est reconnu.
Mes erreurs successives sur la console série
SYSLINUX 3.31 v1.07
Unknown keyword in syslinux.cfg.
Could not find kernel image: sata
Erreur 1 : LOCALBOOT 0x80 → Unknown keyword. Sur syslinux 3.x, LOCALBOOT n’est implémenté que dans pxelinux, pas dans syslinux ou isolinux.
Erreur 2 : COM32 chain.c32 → Unknown keyword. La directive COM32 n’existe que depuis syslinux 4.0+.
Solution : KERNEL chain.c32. Syslinux détecte automatiquement l’extension .c32 et traite le fichier comme un module COMBOOT.
LABEL sata
KERNEL chain.c32
APPEND hd0
Référence syslinux 3.x
| Directive | Usage |
|---|---|
LOCALBOOT type | PXELINUX uniquement (pas syslinux/isolinux) |
KERNEL <file> | Charge un kernel Linux ou un module COMBOOT (.c32 / .com / .cbt) |
LINUX <file> | Spécifiquement un kernel Linux (équivalent à KERNEL pour bzImage) |
BOOT <image> | Charge un boot sector |
COM32 / COMBOOT | N’existe pas en syslinux 3.x, ajouté en 4.x |
Lessons learned
- La syntaxe syslinux a évolué entre v3 et v4. Beaucoup de tutoriels modernes assument syslinux ≥ 4 et ne marchent pas sur du firmware embedded ancien.
- Le mot-clé universel pour syslinux 3.x est
KERNEL— il accepte kernels Linux ET modules COMBOOT (.c32) selon l’extension. - Toujours vérifier la version :
cat /flash/ldlinux.sys | strings | headpeut aider à identifier la version syslinux. Unknown keywordest silencieux mais fatal : la ligne est ignorée et le label finit par échouer avec « Could not find kernel image » — message trompeur.