SYSLINUX 中文简介(怎样使用) 1


什么是syslinux?

本文来自于SYSLINUX Wiki

由于本人才疏学浅,其中难免错误,烦请各位多多指正。

欢迎转载本文,但请注明出处。

简单一点来说,是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。

它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。

 

syslinux的相关选项(Options)

以下常用的选项(参数),适用于syslinux的所有版本

  • -s

  • Safe, solw, stupid:这个参数可以提高syslinux的引导兼容性。此参数可以让syslinux工作在一些非常规的BOIS上,有些机器上-s的选项(参数)是必需的,也就是说这是一个安全的选项(参数),建议一般要用上这个选项(参数)。

  • -f

  • Force installing:强制写入syslinux的引导代码,这是一个可选的选项(参数),如果你发现不能写入syslinux时,就可以使用这个选项(参数),但一般建议:写入本地磁盘时加上这个选项(参数)。

  • -r

  • Raid mode:RAID 模式。这是一个可选的选项(参数),如果启动失败,告诉BIOS启动顺序(通常是下一个硬盘),而不是给出错误信息后停止,这个一个RAID模式的选项(参数),一般来说可以不使用。


 

 

以下常用的选项(参数),只适用于Windows的版本

  • -m

  • MBR:将syslinux引导代码写入到驱动器的MBR启动扇区。这是一个可选的选项(参数),建议使用此选项(参数),如果之前有将GURB4DOS写入磁盘的MBR中,那么你必须使用-m选项(参数),否则将写入失败。

之前笔者就是因为有将“grub for dos”写入过MBR,而之后将syslinux引导代码写入MBR时,又没有使用-m选项(参数),所以一直不能将syslinux引导代码写入MBR。

示例:syslinux.exe -s -f -m -a -d /boot/syslinux x:
(x: 为盘符)

  • -a

  • Active:激活指定分区为活动分区,这是一个可选的选项(参数),当你不确定你所指定的分区是否是活动分区时可以加上这个选项(参数),实际上,就算你所指定的分区已经是活动的主分区了,也可以加上这个选项(参数)。(=bootable)


 

 

以下常用的选项(参数),只适用于Linux的版本

  • -o

  • 指定文件系统映像文件中的字节偏移量,它必须是一个可使用的磁盘映像文件。


 

 

创建启动磁盘

安装syslinux的磁盘将改变磁盘上的引导扇区,并复制ldlinux.sys文件到其根目录(或者复制到指定的目录)下。

注意:SYSLINUX不支持NTFS文件系统,所以磁盘必须是FAT(FAT16/FAT32)文件系统。


 

 

NT/2K/XP

  • 语法:

  • syslinux.exe [-sfmar][-d directory] <drive>: [bootsecfile]

例如:

Floppy:(a:为软驱)

syslinux.exe a:

硬盘/可移动磁盘等:(z:为盘符)

syslinux.exe -m -a -d /boot/syslinux z:

【将引导文件复制到其分区的/boot/syslinux目录下,注意:/boot/syslinux目录必须事先建好。

*上例中的启动菜单配置文件(syslinux.cfg)要在/boot/syslinux目录下。
*注意:在NT/2K中你可能会收到错误的信息,你只要选择"Ignore"(忽略)就可以正确完成命令了。

 

DOS

  • 语法:

  • syslinux.exe [-sfmar][-d directory] <drive>: [bootsecfile]


 

 

Linux

  • 语法:

  • syslinux [-sfr][-d directory][-o offset] <DeviceOrImage>

例如:

syslinux /dev/fd0

syslinux /设备/第一个软驱

【将syslinux的引导代码写入第一个软驱】


 

怎么配置我的syslinux?

所有的syslinux默认配置都可以在一个名为syslinux.cfg的文件里面更改。

syslinux会在下列位置搜索syslinux.cfg配置文件:
/boot/syslinux/syslinux.cfg
/syslinux/syslinux.cfg
/syslinux.cfg

syslinux.cfg文件必须是UNIX或DOS格式的文本文件。

下面是一个简单的例子,我们来看一下syslinux.cfg文件怎样引导一个linux内核:

 

DEFAULT linux
LABEL linux
SAY Now booting the kernel from SYSLINUX...
KERNEL vmlinuz.img
APPEND ro root=/dev/sda1 initrd=initrd.img

SYSLINUX与LILO是不同的,下面是一个LILO的例子:

p_w_picpath = mykernel
label = mylabel
append = "myoptions"

而SYSLINUX是这样写的:

label mylabel
kernel mykernel
append myoptions


 

下面我们一起看一下SYSLINUX中的选项:

注:以下所有选项适用于PXELINUX,ISOLINUX和EXTLINUX以及SYSLINUX,除非另有说明。

# comment
注释行,#后面的空格是必须的。

INCLUDE filename
在此处插入其他文件的内容。

LABEL command【标签命令】
标签命令,主要是用于描述syslinu.cfg文件中的命令的,自己看得懂就可以了,因为这个标签是不会在启动菜单中看到的。

MENU LABEL【菜单标签】
这个是在启动菜单中看到的标题项,所这个一定要写个有意义的描述

例如:
LABEL maxdos
MENU LABEL [01] -- Run MaxDos
kernel /boot/syslinux/memdisk
append initrd=/boot/imgs/maxdos.img

KERNEL file【内核文件】
这个就是SYSLINUX指向的启动文件,这个“kernel”不一定是Linux kernel【Linux内核】,它可以是启动扇区,或者COMBOOT文件。

 

以下所列出的为公认的文件扩展名(不区分大小写):

 

extensionsexplain
none or otherLinux kernel p_w_picpath
.0PXE bootstrap program (NBP) [PXELINUX only]
.bin"CD boot sector" [ISOLINUX only]
.bsBoot sector [SYSLINUX only]
.bssBoot sector, DOS superblock will be patched in [SYSLINUX only]
.c32COM32 p_w_picpath (32-bit COMBOOT)
.cbtCOMBOOT p_w_picpath (not runnable from DOS)
.comCOMBOOT p_w_picpath (runnable from DOS)
.imgDisk p_w_picpath [ISOLINUX only]
.imaFloppy p_w_picpath [ISOLINUX only]


 

扩展名说明
没有或其它Linux内核映像
.0PXE 启动引导程序(NBP)【只用于PXELINUX】
.bin“光盘引导扇区”【只用于ISOLINUX】
.bs“磁盘引导扇区”【只用于SYSLINUX】,例如:bsf,
.bss“磁盘引导扇区”, 用在DOS superblock上,【只用于SYSLINUX】
.c32COM32映像文件【32-bit COMBOOT】
.cbtCOMBOOT映像文件【不能运行于DOS】
.comCOMBOOT映像文件【可运行于DOS】
.img磁盘映像文件【实际上可用于ISOLINUX、SYSLINUX、PXELINUX】
.ima软盘映像文件【实际上可用于ISOLINUX、SYSLINUX、PXELINUX】

使用这些关键字之一而不KERNEL强制文件类型,与文件名无关。

 

  • LINUX p_w_picpath

  • 你可以直接使用这个,而不是使用KERNEL file来启动一个Linux kernel p_w_picpath【Linux内核映像】。

 

  • BOOT p_w_picpath

  • 启动引导程序(.bs,.bsf,.bin)

 

  • BSS p_w_picpath

  • BSS映像启动引导程序(.bss)

 

  • PXE p_w_picpath

  • PXE网络启动引导程序(.0)

 

  • FDIMAGE p_w_picpath

  • 软盘映像(.img,.ima)

 

  • COMBOOT p_w_picpath

  • COMBOOT程序(.com,.cbt)

 

  • COM32 p_w_picpath

  • COM32程序(.c32)

 

  • CONFIG p_w_picpath

  • CONFIG将重新启动引导程序而使用不同的配置文件


 

APPEND options...【附加选项】

添加一个或多个选项(参数)到 kernel 命令行中,这些选项(参数)可以是手动或者是自动的。该选项(参数)是添加在 kernel 命令行的开始处,通常允许输入的选项覆盖。
这点与LILO的“append”选项(参数)是相同的。


 

APPEND-

简单点说,不附加任何命令,可用于覆盖全局的APPEND。


 

IPAPPEND flag_val 【只适用于PXELINUX】

这个IPAPPEND选项(参数)只适用于PXELINUX,这个“flag_val”为下列选项(参数):

1、下列的选项(参数)将以如下格式添加到内核命令行:

ip=<client-ip>:<boot-server-ip>:<gw-ip>:<netmask>

……以上基于DHCP/BOOTP或者PXE的启动服务器。

但不推荐使用此选项(参数),使用IP=DHCP的内核命令行更为合适。

2、下列的选项(参数)将以如下格式添加到内核命令行:

BOOTIF=<hardware-address-of-boot-interface>

这在PXELINUX的文档中有相关的介绍,这将决定临时文件系统程序将从哪一个Interface【端口】启动系统。

LABEL label KERNEL p_w_picpath APPEND options... IPAPPEND flag_val 【只适用于PXELINUX】


……以上表明,如果“LABEL”作为内核启动,其引导 的“p_w_picpath”和指定的 APPEND 和 IPAPPEND 选项将取代配置文件中的全局(在第一个LABEL命令之前)命令。“p_w_picpath”默认值与“label”相同,而且如果没有定义 APPEND,则使用全局命令(如果存在)。


 

LOCALBOOT type【ISOLINUX,PXELINUX】

在PXELINUX,指定“LOCALBOOT 0”代替一个“KERNEL”选项(参数),这个意味着调用此特定LABEL将会引导本地磁盘,而不是一个“KERNEL”。

参数0表示执行正常启动,参数4将执行一个本地启动和通用网络驱动器接口(UNDI)——常驻内存。

最后,参数5将执行一个本地启动与整个PXE的堆栈,包括UNDI驱动器,也是常驻内存。

所有其它的值都是未定义的。

如果你不知道什么是UNDI和PXE堆栈,不要紧——你只要指定参数0就可以了。


 

INITRD initrd_file

从3.71版本开始,一个initrd可以指定一个单独的语句,(INITRD)而不是作为APPEND语句的一部分;这个功能添加“initrd=initrd_file”到内核命令行中。

它支持以逗号分隔的多个文件名,这主要是有益于initramfs【一个新的initial RAM disks模型】,它可以支持多个单独的cpio或cpio.gz压缩文件。

 

  • cpio简介【摘自:维基百科】

  • CPIO是Linux下的一种新的内核启动镜像所附带的虚拟磁盘格式。他与传统的Image格式比较而言有一些改进,主要体现在打包速度和启动引导方式上。

    cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。归档包可以是磁盘上的 其他文件, 也可以是磁带或管道。


Note: all files except the last one are zero-padded to a 4K page boundary. This should not affect initramfs.


 

DEFAULT command【默认命令】

SYSLINUX启动时默认执行的命令项——当用户没有进行选择时。

如果没有配置文件存在,或在配置文件没有设置默认项时,默认是启动名为“linux”的内核,不会添加其它的选项(参数)。

例如:可以用于设置所要加载的菜单模块
default vesamenu.c32


 

UI module options【用户界面模块选项(参数)】

用于设置菜单模块(通常是“menu.c32”或“vesamenu.c32”),也就是说这是一个命令行界面(菜单指令),它可以覆盖DEFAULT和PROMPT指令。


 

PROMPT flag_val

如果flag_val为0,启动将显示:“提示符”只有在Shift或Alt键被按下,或Caps Lock键或Scroll lock键设置(这是默认值)。如果flag_val是1,启动时将始终:“提示符”。


 

NOESCAPE flag_val

如果flag_val设置为1,那么将忽略Shift/Alt/Caps Lock/Scroll Lock退出,将强制使用此默认选择项目启动(也同时忽略PROMPT 0)。


 

NOCOMPLETE flag_val

如果flag_val设置为1,那么启动时将不会在显示标签中提示Tab键。


 

IMPLICIT flag_val

如果flag_val为设置为0,将不会加载的kernel p_w_picpath【内核映像】,除非它已在LABEL声明中明确指定。The default is 1【默认值为1】。


 

ALLOWOPTIONS flag_val

如果flag_val为0,用户将不能指定内核命令行的任何选项(参数)。唯一可用是在APPEND声明中所指定的选项。The default is 1。


 

TIMEOUT timeout【超时】

在执行默认启动菜单项前的等待时间。

如果设置为0,那么将将完全禁用timeout(始终等待用户选择),这也是默认的设置。

其单位为:1/10秒。

以下timeout为30秒:

timeout 300

注:最大的值为35996,建议设置为小于一小时。


 

TOTALTIMEOUT timeout

不会被用户的输入取消,用于处理串口故障或类似 "用户离开" 的状况。

默认值是 0。

# 等待5s除非用户输入,但15m后一定启动

TIMEOUT 50
TOTALTIMEOUT 9000


 

ONTIMEOUT kernel options...

timeout 后调用的命令。一般与 DEFAULT 调用相同。如果指定,DEFAULT只适用于用户按<Enter>启动时。


 

ONERROR kernel options...

如果一个内核映像没有找到(不存在或设置了IMPLICIT),运行指定的命令。

如果ONERROR指令为:

ONERROR xyzzy plugh

并且用户输入的命令行是:

foo bar baz

那么SYSLINUX将执行:

xyzzy plugh foo bar baz


 

SERIAL port 【[baudrate] flowcontrol】

开启一个串口作为控制台,“port【端口】”是一个数字(0 = /dev/ttyS0 = COM1,etc。)或者I/O端口地址(例如:0x3F8);如果省略“baudrate【波特率】”,波特率默认为9600 bps。串行的硬编码是 8 bits,无奇偶校验,1个停止位。

下列为“flowcontrol【流控制】”的 bits 组合:

0x001 - Assert DTR
0x002 - Assert RTS
0x010 - Wait for CTS assertion
0x020 - Wait for DSR assertion
0x040 - Wait for RI assertion
0x080 - Wait for DCD assertion
0x100 - Ignore input unless CTS asserted
0x200 - Ignore input unless DSR asserted
0x400 - Ignore input unless RI asserted
0x800 - Ignore input unless DCD asserted

所有其它的 bits 给予保留。

典型值为:

0 - No flow control (default)
0x303 - Null modem cable detect
0x013 - RTS/CTS flow control
0x813 - RTS/CTS flow control,modem input
0x023 - DTR/DSR flow control
0x083 - DTR/DCD flow control

作为SERIA【串口】指令,它必须保证工作正常,它在配置文件中应该是“First”指令。


 

CONSOLE flag_val

如果flag_val为0,禁止输出到普通视频终端。

如果flag_val为1,允许输出到视频终端(默认值)。

有些BIOS因为这个选项(参数)会令视频终端出现异常。

所以该选项(参数)允许你在这些系统上禁用视频控制台。


 

FONT filename

在显示任何输出之前,装载.psf格式的字体(除了版权行,ldlinux.sys本身被加载里就输出这些)。SYSLINUX只装载字体到显卡。忽略.psf文件包含的Unicode表。并且只工作于EGA和VGA显示卡。

注:.psf格式的字体不支持中文。


 

KBDMAP keymap

装载一个简单的键盘映射。该重映射使用很简单(由于这个重映射是基于BIOS的,所以只有标准的美式键盘布局才能被映射),不过这至少可以帮助使用QWERTZ和AZERTY键盘布局的人(这两个特殊字符大量用于Linux内核命令行)。

syslinux的还附带一个名为“kbdmap.c32”的comboot模块文件,它允许动态地改变键盘映射,这样就可以在syslinux的配置文件中增加一个键盘选择菜单或键盘选择标签【keyboard-selection menu and/or keyboard-selection labels】。


 

SAY message

在屏幕上打印Message【信息】。


 

DISPLAY filename

启动时在屏幕上显示指定文件(如果显示:则在启动前:“提示符”显示内容)。

请参阅下面一节的“DISPLAY file”。

注:如果指定的文件未找到,那么此选项(参数)将被完全忽略。


 

F[1-12] filename【F1功能键到F12功能键】

基本书写格式:

F1 filename
F2 filename
...etc【等等】...
F9 filename
F10 filename
F11 filename
F12 filename
在启动时按下相应的【F1-F12】功能键,将在屏幕上显示指定的文件。这个可用于实现开机前在线帮助。

请参阅下面一节的“DISPLAY file”。

在使用serial console【串行控制台】时,可以按<Ctrl+F1-F12>转到帮助屏幕:

 


<Ctrl-F><1>to get the F1 screen【转到“F1”屏幕/以下类似】
<Ctrl-F><2>to get the F2 screen
...etc【等等】...
<Ctrl-F><9>to get the F9 screen
<Ctrl-F><A>【or <Ctrl-F><0>】to get the F10 screen
<Ctrl-F><B>to get the F11 screen
<Ctrl-F><B>to get the F11 screen
<Ctrl-F><C>to get the F12 screen

在配置文件中空行和注释行【#号空格后的内容】将被忽略。


 

Can SYSLINUX Handle Large Kernels?【SYSLINUX能处理大内核吗?】

这个版本的SYSLINUX(syslinux 3.83)已经支持大内核了(bzp_w_picpath 格式),取消了对bzp_w_picpath格式内核的500K大小限制。能自动检测和透明处理用户的bzp_w_picpath格式内核。

这个版本的SYSLINUX还支持启动时加载RAMDISK(initrd),initrd是从DOS文件加载的,其选项(参数)这:“initrd=filename”(这里的filename为initrd的映像文件名,并且这个文件必须在启动磁盘的根目录下。)

例如(EXTLINUX):

append ro root=/dev/hda1 initrd=/boot/initrd.img

为了兼容bzp_w_picpath和最近的zp_w_picpath内核,SYSLINUX 1.30和更高的的版本确定使用ID byte 0x31,PXELINUX识别使用ID byte 0x32,ISOLINUX using ID byte 0x33,and EXTLINUX using ID byte 0x34,ID byte 0x35-0x3f是预留给SYSLINUX之后版本的衍生工具使用。


 

What is the DISPLAY File Format?【什么是DISPLAY文件格式?】

DISPLAY 和功能键帮助文件是DOS或者UNIX格式的文本文件。
此处,以下特殊代码将会被解释:


 

Clear the screen, home the cursor【清屏,重置光标】:

<FF>
<FF> = <Ctrl-L> = ASCII 12

注意:屏幕将被当前显示色所填充。


 

Set the display colors to the specified background and foreground colors【设置显示颜色为指定的背景色和前景色】:

<SI><bg><fg>
<SI> = <Ctrl-0> = ASCII 15

这里的<bg>和<fg>为十六进制数,对于标准的PC显示属性为:

 


0 = black【黑色】8 = dark grey【深灰色】
1 = dark blue【深蓝色】9 = bright blue【亮蓝色】
2 = dark green【深绿色】a = bright green【亮绿色】
3 = dark cyan【暗青色】b = bright cyan【亮青色】
4 = dark red【暗红色】c = bright red【鲜红色】
5 = dark purple【暗紫色】d = bright purple【亮紫色】
6 = brown【褐色】e = yellow【黄色】
7 = light grey【浅灰色】f = white【白色】

选择亮色(8-f)为背景色,将导致前景中相应的暗色(0-7)闪烁。

在串行控制台中颜色不可见。

例如:color.txt 文件:

在蓝色背景上闪烁黄色

^O9eBlinking Yellow on Blue Background

 


# xxd color.txt
0000000: 0f39 6542 6c69 6e6b 696e 6720 5965 6c6c.9eBlinking Yell
0000010: 6f77 206f 6e20 426c 7565 2042 6163 6b67ow on Blue Backg
0000020: 726f 756e 640around.


 

Display graphic form filename【显示图像文件名】:

<CAN>filename<newline>

<CAN> = <Ctrl-X> = ASCII 24

如果当前是VGA显示,进入图形模式并显示指定的图形文件。该文件格式为ad hoc格式,称为LSS16;所包含的Perl程序“ppmtolss16”可用于生成这样的图片。

该图像文件将被显示为640x480 16色模式,一旦进入图形模式,显示属性(由<SI>代码序列设置)稍有不同,背景色会被忽略,前景色是图像文件中指定的16种颜色。因此,ppmtolss16允许你指定颜色索引。注意:颜色索引0和7应该注意选择:0是背景色,7是SYSLINUX自身打印文字的颜色。


 

Return to text mode【返回到文本模式】:

<EM>

<EM> <Ctrl-Y> = ASCII 25

如果当前是图形模式,则返回到文本模式。

选择哪一种模式打印消息的一部分:

<DLE>..<ETB>

<Ctrl-P>..<Ctrl-W> = ASCII 16-23

这些代码可用于选择那种模式会打印到消息文件的某个部分。任一控制字符选择特定的实际输出模式 (文本屏幕、图形屏幕、串口)。

 


Character【字符】Text【文本】Graph【图像】Serial【串口】
---------------------------------------------------------------------------------------------------
<DLE> = <Ctrl-P> = ASCII 16NoNoNo
<DC1> = <Ctrl-Q> = ASCII 17YesNoNo
<DC2> = <Ctrl-R> = ASCII 18NoYesNo
<DC3> = <Ctrl-S> = ASCII 19YesYesNo
<DC4> = <Ctrl-T> = ASCII 20NoNoYes
<NAK> = <Ctrl-U> = ASCII 21YesNoYes
<SYN> = <Ctrl-V> = ASCII 22NoYesYes
<ETB> = <Ctrl-W> = ASCII 23YesYesYes

示例:

<DC1>Text mode<DC2>Graphics mode<DC4>Serial port<ETB>

将以控制台输入模式输出。


 

End of file文件终止:

<SUB>

<SUB> = <Ctrl-Z> = ASCII 26

文件终止(DOS 惯例)


 

Beep提示音:

<BEL>

<BEL> = <Ctrl-G> = ASCII 7

扬声器提示音。


 

引导文件(命令)解释

以下为SYSLINUX【ISOLINUX、PXELINUX、EXTLINUX也类似】主要文件的作用及说明:

 


待续……