下一步 上一步 目录

5. 远程启动工具参考手册

本节详细介绍了我们在日内瓦大学 CUI 开发的用于此远程启动配置的工具的使用信息。

5.1 BpBatch、MrBatch 和 MrZip

这三个名称代表同一程序的三个变体,具有以下特点

命令行参数

所有程序都接受相同的参数语法。MrBatchMrZip 从命令行获取参数,而 BpBatch 在 BOOTP 选项 155(十进制)中查找它们。以下是参数的语法

        [-x] [-l] [-b] [-v] [-w] [-i] [script-basename]
其中script-basename 是可选的。如果提供,MrBatchBpBatch 加载扩展名为 .bpb 的文件,而 MrZip 加载扩展名为 .mrz 的文件。如果未提供,MrBatchMrZip 在交互模式下运行,而 BpBatch 加载与 BOOTP 引导文件具有相同基本名称且扩展名为 .bpb 的文件。

语法规则

BpBatch 解析输入行时,以下规则适用。

空行将被忽略。以井号 (#) 开头的行被视为注释,不会被解释。以冒号 (:) 开头的行被视为标签,不会被解释。

字符串表达式

字符串由开头和结尾的双引号分隔

        "Hello world"
要在字符串中包含双引号,请使用反斜杠引用它们
        "I said: \"Hello world\""
字符串可以后跟几个运算符。运算符可以通过一个接一个地后缀来链接。有关字符串长度和单词计数运算符的信息,请参见“数值表达式”下。

数值表达式

数值表达式适用于 32 位整数(从 -2,147,483,646 到 2,147,483,647)。不理解十六进制八进制和二进制数。每当需要数值表达式时,都会识别以下内容

持续时间

一些命令需要持续时间作为参数。持续时间以秒为单位测量,精度高达十分之一秒

        Delay 3                 waits for 3 seconds
        Delay 0.3               waits for 3/10 seconds

颜色

每当需要颜色时,您可以使用颜色的数值或其符号名称(不区分大小写)。以下颜色被识别

        Black           0
        Blue            1
        Green           2
        Cyan            3
        Red             4
        Magenta         5
        Brown           6
        LightGray       7
        DarkGray        8
        LightBlue       9
        LightGreen     10
        LightCyan      11
        LightRed       12
        LightMagenta   13
        Yellow         14
        White          15

文件引用

文件名是字符串。因此,它们必须始终用双引号括起来。文件名在区分大小写的文件系统上区分大小写,在不区分大小写的文件系统上不区分大小写。斜杠和反斜杠可以自由地相互替代使用。不要忘记双反斜杠,因为单反斜杠是转义字符。

有两种类型的文件引用

直接磁盘文件使用以下表示法引用

        "{disk:partition}/absolute/filename"
磁盘号可以省略,默认为零。例如,"{:1}/usr/bin" 指向 /usr/bin,假设第一个分区上存在这样的目录。直接文件 I/O 完全基于我们自己的文件访问例程(我们不使用操作系统)。

有两个特殊分区。分区零对应于硬盘主引导记录 (MBR),并具有一个伪文件系统,可让您访问引导代码。分区负一 (-1) 对应于缓存文件系统(见下文)。

在 BpBatch/MrBatch 下,当 BootProm 可用时,外部文件对应于 TFTP 服务器上的远程文件

        "help.bpb"           is the file help.bpb in the /tftpboot directory
        "gifs/MyImage.gif"   is a file in /tftpboot/gifs
可以引用其他 TFTP 服务器
        "198.76.54.32:help.bpb" 
如果其他服务器位于网关后面
        "198.70.0.1/198.76.54.31:help.bpb"
还可以为 TFTP 连接指定特定端口
        "198.76.54.32@89:getpasswd/smith"
一次只能打开一个远程文件。如果 BootProm 不可用,则使用操作系统文件 I/O 模拟远程文件,但相同的限制适用。

在 MrZip 下,外部文件对应于操作系统看到的文件。没有限制,外部文件可以在任何可以使用直接磁盘文件的地方使用。外部文件通常比直接磁盘文件更快,因为操作系统具有更多的缓冲区。如果操作系统支持,外部文件可以引用网络文件。

        "C:\\autoexec.bat"
        "C:/config.sys"
        "/mnt/net/usr"

缓存文件系统

为了减少网络负载并加快启动过程,磁盘存档、Linux 内核以及可能的其他文件缓存在硬盘上。此磁盘缓存位于硬盘末尾,在分区表中分配的最后一个柱面和磁盘的最后一个物理柱面之间(在任何已分配分区之外)。如果您希望缓存文件系统工作,则最后一个分区和磁盘末尾之间必须有空间。如果您想恢复磁盘映像,则缓存文件系统必须工作。

磁盘缓存以易失性、CRC 验证的文件系统组织:每个目录条目和每个 32 KB 数据块都通过 32 位 CRC 验证。每当目录条目或数据块意外更改时,该文件将自动从缓存中删除,并在下次请求时再次下载。

您可以使用特殊分区 "{:-1}" 上的直接磁盘访问,从 BpBatch、MrBatch 和 MrZip 中自由访问缓存文件系统。要查看缓存的内容,只需键入

        logdir "{:-1}"
如果缓存损坏并且未自动清除(这永远不应该发生),您可以键入
        clean -1
(在交互模式下)或在 BpBatch 首次访问缓存时按住两个 Shift 键。

特殊变量

某些变量最初已设置和/或具有特殊含义。其中一些变量存在于所有程序中,另一些变量仅在 MrZip 下可用,另一些变量仅在收到 BOOTP/DHCP 答复时可用。

通用变量

另请参见 BOOTP 变量和 MrZip 特定变量。

MrZip 特定变量

以下变量仅在 MrZip 中使用。

BOOTP 变量

只要收到 BOOTP/DHCP 答复(TCP/IP Bootprom 必须报告为已检测到),就会识别以下 BOOTP-... 和 DHCP-... 变量

        $BOOTP-Client-ID
        $BOOTP-Your-IP
        $BOOTP-Server-IP
        $BOOTP-Gateway-IP
        $BOOTP-Bootfile
        $BOOTP-Server-Name
        $BOOTP-Subnet-Mask
        $BOOTP-Time-Offset
        $BOOTP-Routers
        $BOOTP-Time-Servers
        $BOOTP-Name-Servers
        $BOOTP-Domain-name-Servers
        $BOOTP-BOOTP-Log-Servers
        $BOOTP-Cookie-Servers
        $BOOTP-Lpr-Servers
        $BOOTP-Impress-Servers
        $BOOTP-Resource-Location-Servers
        $BOOTP-Host-Name
        $BOOTP-Boot-Size
        $BOOTP-Merit-Dump
        $BOOTP-Domain-Name
        $BOOTP-Swap-Servers
        $BOOTP-Root-Path
        $BOOTP-Extensions-Path
        $BOOTP-IP-Forwarding
        $BOOTP-Interface-MTU
        $BOOTP-All-Subnets-Are-Local
        $BOOTP-Broadcast-Address
        $BOOTP-NIS-Domain
        $BOOTP-NIS-Servers
        $BOOTP-NTP-Servers
        $BOOTP-Font-Servers
        $BOOTP-X-Display-Manager
        $DHCP-IP-Address-Lease-Time
        $DHCP-Message-Type
        $DHCP-Server-Identifier
        $DHCP-Message
        $DHCP-Renewal-Time
        $DHCP-Rebinding-Time
        $BOOTP-NIS+-Domain
        $BOOTP-NIS+-Servers
        $BOOTP-Server-Name
        $BOOTP-Bootfile
        $BOOTP-Mobile-IP-Agent
        $BOOTP-SMTP-Servers
        $BOOTP-POP3-Servers
        $BOOTP-NNTP-Servers
        $BOOTP-WWW-Servers
        $BOOTP-Finger-Servers
        $BOOTP-IRC-Servers
        $BOOTP-StreetTalk-Servers
        $BOOTP-STDA-Servers

其他 BOOTP/DHCP 参数可以在名称下使用

        $BOOTP-Option-n
其中 n 是 BOOTP 选项号的十进制表示形式。

不要混淆 BOOTP-Gateway-IP,它是用于 TFTP 的网关,如果 TFTP 服务器在同一子网中,则应为 0.0.0.0,以及 BOOTP-Routers,它包含默认 IP 网关。TCP/IP Bootprom 有时似乎从 BOOTP-Routers 中的值设置 BOOTP-Gateway-IP 的值,导致每个 TFTP ack 数据包首先发送到路由器。为了避免这种行为,如果您的 TFTP 服务器与客户端在同一子网中,请强制将 BOOTP-Gateway-IP 设置为 0.0.0.0(感谢 Maciek Uhlig 指出此问题)。

监控命令

本节列出了用于监控系统状态的命令。可选参数列在括号之间(我本来更喜欢方括号,但 LaTeX 在此处不喜欢它们...)

Interact

显示日志并切换到交互模式,直到输入 QUIT 或 EXIT。如果您想避免在批处理执行期间干扰日志消息,请在退出之前键入 HideLog。

Help (topic)

加载在线帮助文件 (bpbatch.hlp) 并显示给定主题的描述。如果没有提供主题,或者主题未知,则显示帮助索引。

Log "text"

在日志上显示字符串。不会隐式添加返回/换行符。

Echo "text"

在日志上显示字符串并转到下一行。等效于

        Log "text\r\n".

LogVars ("pattern")

记录(即在日志上显示)与给定模式匹配的所有变量。模式可以包含通配符(?和 *)。

Example: LogVars "BOOTP-*"              list all BootP variables
LogDir "path/pattern"

记录(即在日志上显示)给定路径中与模式匹配的所有文件。模式可以包含通配符(?和 *)。

Example: LogDir "/usr/g*p"              list files names like g...p
LogTree "path"

记录以给定路径为根的目录树。

LogFile "filename"

记录文件的内容。该文件的大小不得超过 64 KB。

ShowLog

如果日志已隐藏,则使其可见。当按下 ESC 键且 "$AutoShowLog" == "ON" 并且进入交互模式时自动执行。

HideLog

阻止日志消息出现在屏幕上。当 BpBatch、MrBatch 和 MrZip 在脚本文件上启动时的默认状态。

CaptureLog

将所有日志输出记录到 64 KB 缓冲区,直到发出 EndCapture。如果日志输出超过 64 KB,则环绕缓冲区。此命令可用于创建具有任意内容的文本文件。EndCapture 必须在同一批处理文件中发生。

EndCapture ("filename")

结束日志的捕获。如果给定文件名,则将捕获的文本存储到文件中。否则,丢弃它。

Beep

发出声音。此命令等效于 Echo "\007"。

控制命令

本节列出了控制批处理执行的命令。可选参数列在括号之间。

Include "filename"

加载给定文件并启动其上的解析器。当包含文件处理完成时,返回到当前点。包含文件中 ASCII 127 以上字符的解释取决于包含文件时 $IsoLatin 的值。

OnExit command

设置一个退出处理程序,该处理程序将在当前批处理文件结束时自动评估。

Goto label

将执行光标移动到给定的标签(即以 :label 开头的行)

Eval "command"

对“command”执行所有替换,并在其上运行解析器。

If ...

  If (not) <expr1> (==|!=|<|>|>=|<=|=>|=<|<>) <expr2> <command>
  If (not) (ci) "str1" (==|!=|<|>|>=|<=|=>|=<|<>) "str2" <command>
  If (not) (ci) "str1" Match-Expr "pattern" <command>
  If (not) (ci) "str1" Match-Passwd "unix-passwd" <command>
  If (not) (ci) "str1" in "wordlist" <command>
  If (not) (ci) "str1" in-file "filename" <command>
  If (not) exist "filename" <command>
  If (not) valid <disk>:<partition> <command>

如果测试成功,这些命令将执行 command;。第一种形式比较两个数值表达式。第二种形式比较两个字符串,可选地不区分大小写。第三种形式测试 “str1” 是否与给定的模式匹配(允许使用通配符)。第四种形式测试明文密码 “str1” 是否与 Unix 加密密码匹配。第五种形式测试 “str1” 是否包含在单词列表中。第六种形式测试 “str1” 是否包含在单词文件中。第七种形式测试给定文件是否存在。第八种形式测试给定的分区是否有效(即已格式化)。此形式仅受 1999 年 2 月之后的 BpBatch 版本支持。

Set ...

  Set variable = "string-value"
  Set variable = <expr>

为给定变量设置一个值。如果给定的值是数值表达式,它将隐式转换为字符串。变量可以在任何地方使用,方法是将其称为 $variable 或 ${variable}。如果结果引用要解释为字符串,则应将其括在双引号之间:“$variable” 或 “${variable}”。

Delay duration

等待直到指定的持续时间(以秒为单位表示)到期。另请参见有关持续时间格式的段落。

GetTime variable, GetDate variable

获取 CMOS 时间并将其以 HH:MM:SS 格式存储到 variable 中。获取 CMOS 日期并将其以 YY/MM/DD 格式存储到 variable 中。这可用于根据一天中的时间或日期自定义引导脚本的行为。

SetTime "HH:MM:SS", SetDate "YY/MM/DD"

将计算机 CMOS 时间或日期设置为给定值。如果您有一个安全网关(我们的特殊 TFTP 服务器)正在运行,您可以通过评估以下命令在每次启动时自动调整客户端计算机的 CMOS 时间和日期

        include "$Security-Gateway:gettime"
如果您想了解此命令的作用,只需键入
        logfile "$Security-Gateway:gettime"

Poweroff

关闭计算机。此命令仅在计算机与高级电源管理 (APM) 兼容时才有效。

键盘相关命令

本节列出了让您监控键盘输入的命令。可选参数列在括号之间。另请参见国家语言支持下。

GetKey (variable)

无限期等待直到按下某个键,并将其存储在 variable 中。

WaitForKey duration (command)

等待直到在不超过 duration 秒的时间内按下某个键。如果在给定时间后未按下任何键,则评估 command。否则,将键留在键盘缓冲区中。另请参见有关持续时间格式的段落。

Input (variable (max-length))

从键盘读取回车符终止的字符串,并将结果字符串存储在 variable 中(不带终止回车符)。如果给定了 max-length,则不允许用户输入超过此字符数。

另请参见安全相关命令下的 GetPasswd

OnKey "c" command

设置一个按键处理程序,当按下键 “c” 时,它将自动评估给定的 command(除非通过 GetChar 或 Input 命令显式等待)。如果字符串 "default" 代替单个字符使用,则在按下任何其他键时执行该命令。

文本输出命令

本节列出了用于执行常规文本输出的命令。所有这些命令也可以在图形模式下使用,具有相同的行为(除了文本模式提供 80x25 个字符,而图形模式提供 100x37 个字符,因为图形模式字符的大小为 8x16)。可选参数列在括号之间。另请参见国家语言支持下。

Print "text"/expr

在当前光标位置使用当前文本属性打印指定的字符串/表达式,然后移动光标。在字符串末尾添加 "\r\n" 以转到下一行。

TextAttr fg-color bg-color

设置文本属性。也可以放置一个表示两种颜色的单个数值,定义为 16*bg-color+fg-color

如果您需要更多花哨的东西,可以使用 LoadFont。请参见国家语言支持下。

At line,col (command)

将光标位置移动到指定位置,并在提供时评估命令。

Example: At 10,20 Print "Gnats and rats !"
Clear (color (pattern-char (top,left,bottom,right)))

用给定的 pattern-char(字符串或十进制 ascii 代码)填充给定的文本区域。该区域默认为全屏,模式字符默认为全块(ASCII 十进制 219),颜色默认为黑色(清除屏幕)。将光标移动到清除区域的左上角。

BpMenu 向后兼容性命令

  .ATT (<attribute>)
  .CLS (<attribute>)
  .DEF <key> (<timeout_val>)
  .KEY <key> <filename>
  .POS ((<x>) <y>)
  .PWD <key> <cpasswd>
  .WLN (<text>)
  .WRT <text>

有关更多信息,请参见 InCom 手册。我们不久前编写了一个 程序 程序,用于使用此语法编辑菜单文件,但最好使用新的显式语法制作菜单。请注意,.PWD 命令未实现,因为我们现在不知道 InCom GmbH 使用的密码加密算法。

图形输出命令

本节列出了用于执行图形模式输出的命令。对于本节中列出的函数,坐标以像素为单位给出。您也可以在图形模式下使用所有文本输出命令(见上文)。可选参数列在括号之间。

请注意,只要使用图形命令,就会自动打开图形模式,除非变量 VESA 设置为 "OFF"

InitGraph ("mode")

打开 VESA 图形。原点在屏幕的左上角 (0 0)。VESA 图形可能会使某些 Windows 95 下的计算机挂起。运行 MrBatch 时使用 -v 选项以避免此类问题。

如果您使用参数 “mode”,则可以请求特定的视频模式。此参数是可选的:如果您未指定任何值,则视频模式将从 VESA-Modes 变量的第一个字段中获取。

有效模式为

VESA-Modes 变量列出了您的硬件支持的视频模式。

示例:InitGraph "640x480"

CloseGraph

关闭 VESA 图形模式并返回到文本模式。

DrawBar x-pos y-pos width height color

VESA 图形。绘制给定大小和颜色的填充条。

DrawWindow x-pos y-pos width height (bg-color (bar-color)) ("title" (title-color))

VESA 图形。绘制给定大小和颜色的窗口。背景颜色默认为 LightGray,标题栏颜色默认为 Blue。如果您包含标题字符串和颜色,则此文本将显示在标题栏中。

Drawtext x-pos y-pos "text" (fg-color)

VESA 图形。在给定位置绘制文本字符串,背景透明。颜色默认为文本前景色。

DrawGif "gif-filename" (x-pos y-pos (color-strategy))

VESA 图形。加载给定的 GIF-87a 文件并将其绘制在屏幕上。该文件可以是隔行扫描的,但必须是 GIF-87a(而不是 GIF-89a)。图像大小应适合所选视频模式。当您选择 640x480 模式时,您无法加载 1024x768 GIF 文件。GIF 位置默认为屏幕的左上角 (0 0)。

color-strategy 定义了当需要超过 256 种颜色时(例如,当同时显示两个 256 色 GIF 文件时)调色板中颜色的分配

默认策略为 Best-Colors

安全相关命令

本节列出了帮助您验证用户身份的命令。可选参数列在括号之间。

其中一些功能与安全网关配合使用,您应该首先安装该网关。有关更多信息,请参见有关特殊 TFTP 服务器的部分。

GetPasswd (variable (max-length))

与 Input 相同,但回显星号而不是键入的字符。

Crypt "text" "salt" variable

将 Unix crypt 函数应用于给定的 8 个字符的文本,并将生成的加密字符串存储到 variable 中。“salt” 通常是一个双字符字符串,它将作为加密字符串的前两个字符找到。

请注意,Unix crypt 是单向函数。无法解码加密字符串。只能尝试使用相同的 salt 加密另一个字符串并比较生成的加密字符串。

DESCrypt "text" "key" variable

使用给定的 8 个字符的密钥加密给定的文本,并将结果作为十六进制字符串存储在 variable 中。

DESDecrypt "hexcode" "key" variable

使用给定的 8 个字符的密钥解密给定的十六进制字符串,并将结果存储在 variable 中。

MD5 "text" variable

计算给定文本的 MD5 校验和,并将其作为十六进制字符串存储在 variable 中。可以用作 Unix crypt 函数的替代方法,以检查大于 8 个字符的密码。

CheckUser "user" "password" "domain"

连接到 $Security-Gateway 并检查给定用户是否存在于给定的 radius 域中,并使用指定的密码。如果域为 "Unix",请使用安全网关上的 Unix 用户/密码定义。对于任何其他域,请使用安全网关域定义文件来确定要检查的实际 Radius 或 NT 域。

将 $Security-Check 的值设置为 “PASSED” 或 “FAILED”。密码不会以明文形式在网络上传输。

磁盘相关命令

本节列出了用于准备硬盘的命令。可选参数列在括号之间。

GetPartitions variable (disk)

读取给定磁盘的分区表,并将其作为字符串存储到给定的 variable 中。结果字符串是以空格分隔的 Type:Size 列表,其中

有关分区的更多信息,请参阅 SetPartitions。

SetPartitions “分区” (磁盘)

将分区表设置为字符串的内容。使用的格式与 GetPartitions 相同。此命令还会重置所有引导标志(提示:使用 SetBootPart)。

主引导记录 (MBR) 中的主分区表只有四个条目。此外,DOS 和 Windows 只接受主分区表中的一个 FAT 分区(称为主分区 C:)。任何补充的 FAT 分区都应嵌套在扩展分区中(因此称为逻辑分区)。如果我们将 MBR 分区表中描述的分区编号为 1-4,并将第一个扩展分区中描述的分区编号为 5-8,则定义两个 FAT 分区的方案将通过将分区 1 定义为 FAT,分区 2 定义为 EXT,分区 5 定义为 FAT 来实现。分区 3、4、6、7 和 8 应标记为未使用。相同的方案可以递归地用于定义两个以上的 FAT 分区:在分区 6 中嵌套另一个扩展分区,并在分区 9 中添加一个逻辑 FAT 分区。

在对 DOS 规范最严格的解释中,这意味着分区表的条目 3 和 4 永远不会被使用。实际上,某些版本的 DOS 和其他一些操作系统能够在一个分区表中使用两个以上的分区,但没有明确的规则。在这方面,BpBatch 在其对分区表的解释方面相当灵活,它通常可以理解操作系统无法理解的内容。

一个普遍的规则是,每个分区表永远不应超过一个扩展分区,否则分区编号方案会崩溃。

如果您想尝试有趣的配置,请进行自己的实验,但如果操作系统无法识别您的分区,请不要抱怨。保证其工作的唯一方法是使用主分区来存储操作系统启动分区,并将所有其他分区一次一个地嵌套在扩展分区中。

扩展分区示例

        SetPartitions "BIGDOS:100 EXT:400 EMPTY EMPTY BIGDOS:400"

GetBootPart 变量 (磁盘)

获取引导标志已开启的分区号(DOS 称之为:激活的主分区),并将其存储到变量中。第一个分区编号为 1。如果没有分区开启引导标志,则返回零。

SetBootPart 分区 (磁盘)

将引导标志设置为给定的分区。引导标志让主引导记录 (MBR) 选择要从哪个分区启动。第一个分区编号为 1。

Blank 分区 (磁盘)

用零填充给定的分区。对于大型分区,可能需要相当长的时间。不要为任何操作系统格式化分区。另请参阅 Clean

Clean 分区 (磁盘) (“卷标”)

根据分区表中声明的类型快速格式化给定的分区。如果给出了卷标并且文件系统支持它,则设置分区卷标。对于偏执狂式的完整格式化,请先在分区上调用 Blank

Clean 支持 (FAT16) BIGDOS、FAT32、EXT、LINUX-EXT2 和 LINUX-SWAP 分区。要清理主引导记录 (MBR),请使用 Clean 0

Clean 应该用于数据分区和 MBR/EXT 分区。在使用 FullUnzip 在分区上解压缩文件系统之前清理分区是完全没用的。

FullUnzip “完整存档” 分区 (磁盘)

将完整磁盘存档解压缩到给定的分区,覆盖任何现有文件(动态清理)。

FullUnzip 支持 (FAT16) BIGDOS、FAT32 和 LINUX-EXT2。

除非 VESA 已被设置为 OFF,否则此命令会开启 VESA 图形以显示进度横幅。

IncrUnzip “增量存档” “目标路径”

将增量磁盘存档解压缩到给定的路径。存档中的文件替换目标路径上同名的文件,但其他文件不会被删除。

IncrUnzip 支持 (FAT16) BIGDOS、FAT32 和 LINUX-EXT2。此命令远不如 FullUnzip 有效,因为必须保留现有的文件系统结构。但是,它通过仅存储差异来避免增加不同磁盘映像的数量。

FileUnzip “源文件名” “目标文件名”

解压缩先前使用 MrZip FileZip 命令压缩的文件。该文件通过 32 位 CRC 校验。

Copy “源文件名” “目标文件名”

将源文件逐字节复制到目标文件。例如,可以在 FullUnzip 之后使用它来从服务器更新配置文件,而无需重建映像。对于大型且易于压缩的文件,最好使用 FileUnzip

Append “源文件名 1” “源文件名 2” “目标文件名”

先复制第一个文件,然后复制第二个文件到目标文件,逐字节复制。可以用于任意大的文件。目标文件不能是两个源文件之一。

Patch “源文件名” “目标文件名” (“前缀” (“后缀”))

读取源文件并在将其写入目标文件之前执行变量替换。ASCII 127 以上字符的解释取决于 $IsoLatin 的值。

默认情况下,当变量以“${”为前缀,以“}”为后缀时被识别。这可以更改为任何其他非空字符串。请记住,如果您想在前缀或后缀中使用美元符号,则必须对其进行转义,否则它将被宏评估。例如,如果您想显式使用默认前缀和后缀,请使用

        Patch "source-file" "dest-file" "\${" "}"

MkDir “路径”

从根目录递归创建目录到给定的完整路径。如果路径已存在,则此命令无效。

Delete “文件名”, Del “文件名”

删除给定的文件。文件必须存在。

DelTree “路径”

递归删除给定路径下的所有文件和目录,并删除目录本身。

引导命令

本节列出了用于继续引导过程的命令。可选参数列在括号之间。

HideBootProm

恢复引导程序分配的内存和中断向量。调用此命令后,所有进行 TFTP 传输的尝试都将失败。通常在 HdBoot 之前调用此命令是一个好主意,否则您可能会在 DOS/Windows 下内存不足。此命令由 FloppyBoot 隐式调用。

请注意,尽管此函数“正式”恢复了 BootProm 重新路由的所有向量,但似乎并没有恢复所有内容。但它对 DOS 和 Windows 来说已经足够好了。

LoadRamDisk “ramdisk-文件名”

将软盘磁盘映像加载到扩展内存中,并重定向 BIOS 磁盘服务,使软盘磁盘调用使用此映像代替。此命令隐式调用 HideBootProm。调用 FloppyBoot 以从您刚刚加载的 ramdisk 启动。

这种 ramdisk 可能不如您在使用 TFTPBoot 命令时获得的 ramdisk 那么健壮。唯一的优点是它只占用几百字节的常规内存,而不是 TCP/IP BootPROM 保留的 >64 KB。警告,没有任何东西可以保护 ramdisk 所在的扩展内存。没有办法卸载这样的 ramdisk。

LoadZRamDisk “ramdisk-文件名”

执行与 LoadRamDisk 相同的操作,但用于已使用 MrZip FileZip 命令压缩的映像。压缩的 ramdisk 通过字节计数和 32 位 CRC 来防止数据损坏(和不完整的下载)。

TFTPBoot “远程引导文件”

链接到另一个引导文件(例如使用 InCom 的 BpShell 程序制作的软盘映像)。请参阅文件引用约定以访问另一个 TFTP 服务器上的文件。

FloppyBoot

隐藏引导 ROM,加载软盘磁盘引导扇区并在其上启动。

HdBoot (磁盘)(:分区)

加载给定的引导扇区并从中启动。磁盘默认为零,即第一个硬盘,分区默认为零,即主引导记录。您可以从任何分区启动,但请注意,Windows 95 可能不允许您启动未设置为引导分区的分区(提示:使用 SetBootPart)。

此命令不会隐式调用 HideBootProm,因此您可能需要在之前调用它。

LinuxBoot “内核文件” (“命令行” (“ramdisk-文件”))

将给定的内核和 ramdisk 加载到高位内存中,设置命令行并引导内核。最好至少放置一个包含根文件系统位置的最小命令行(例如 “root=dev/hda1”/)。如果您使用的 Linux 系统严重依赖 lilo(如 RedHat Linux 5.1),则可能需要在命令行中添加类似 BOOT_IMAGE=linux 的内容。请注意,内核可以通过 TFTP 加载(自动缓存在硬盘上),也可以直接从目标根分区加载。

此命令适用于小型和大型内核(zImagebzImage)。

国家语言支持

本节列出了与国家语言支持相关的命令。可选参数列在括号之间。

RemapKeys “原始按键” “重新映射的按键”

国家键盘支持。将给定的按键重新映射到其他字符。例如,要交换 Y 和 Z 键,请使用

        Remapkeys "yzYZ" "zyZY"
当使用未包含在最小 ASCII 字符集中的字符时,最好使用带引号的八进制表示法,以避免对 iso-latin 模式设置的依赖。

对于国际键盘,有两个按键在未重新映射(美国)模式下产生反斜杠。由于 BpBatch 将其中一个键视为回答 ASCII 代码 252(八进制)或 ASCII 代码 335(八进制)的键(在按下 Shift 键时),因此可以独立地重新映射它们中的每一个。

如果您向我发送一个为您的国家键盘进行键盘映射的示例脚本,我将使其在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/sample-scripts 下可用。为了帮助您制作自己的键盘映射,我建议在不重新映射键盘的情况下按下所有特殊按键,并写下它们产生的字符。这些将是 原始按键重新映射的按键 只是您希望看到的按键,顺序相同。如果某些按键(无论是原始按键还是重新映射的按键)产生 ASCII 十进制 127 以上的字符,请使用带引号的八进制表示法。例如,您可以通过查看 HelpPC 的 ASCII 表(HelpPC 是 David Jurgens 的共享软件超文本在线帮助程序)轻松获得任何给定字符的八进制代码。

RemapAltkeys “原始按键” “重新映射的按键”

国家键盘支持。当按下 ALT 键时,重新映射给定的按键。例如,要将 Alt-2 映射到 & 符号,请使用

        RemapAltKeys "2" "@"
请注意,不支持死键。

LoadCodePage “cpxxx.bin”

加载并激活给定的二进制代码页文件。代码页用于将 Unicode 字符(例如 VFAT 卷上的字符)转换为 8 位字符。如果您没有加载正确的代码页,则在访问文件系统时遇到特殊字符时,您将收到 FAT 警告。

所有二进制代码页文件都可以在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/codepage.zip 获取

默认代码页是 850,它是 ISO-Latin-1 的重新排序超集。如果您加载更奇特的代码页,您通常应该将变量 $IsoLatin 设置为 “off”,否则您可能会得到无意义的隐式转换。此外,如果您想显示奇特的字符,您还应该加载正确的屏幕字体(使用 “LoadFont”)。

LoadFont “字体文件”

在文本和图形模式下加载并激活 VGA/VESA 字体。字体文件必须是 16 字节/字符(8x16 位图)的二进制文件。此命令可用于国家语言支持以及幻想支持。

包含多种幻想字体的存档文件可在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/fonts.zip 获取。此存档文件还包含一个程序,用于从 DOS .CPI 文件中提取您的代码页的字体。

MrZip 特有的命令

Source...

  Source (i)archive "filename"
  Source path "path"

将存档操作的源设置为给定的(增量)存档文件或磁盘路径。

Dest...

  Dest (i)archive "filename"
  Dest (i)dump
  Dest path "path"

将存档操作的目标设置为给定的(增量)存档文件、转储或磁盘路径。要控制转储期间显示的数据量,请使用 $DumpFormat 特殊变量。

FileZip “源文件名” “目标文件名”

压缩文件以供进一步使用 FileUnzip 解压缩或用作 ZRamDisk。该文件通过 32 位 CRC 校验。

Filter...

  Filter -"pattern"
  Filter +"pattern"

避免/允许与给定模式(允许使用通配符)匹配的文件和目录包含在存档中。模式与完整路径名匹配。默认情况下,所有文件都包含在映像中。您只需要显式允许被过滤器取消的文件。每个否定过滤器都有其自己的肯定过滤器(允许)子列表。

对于 DOS/Windows 映像,您通常会使用

        Filter -"*.swp"
        Filter -"temp/*"
对于 Unix 映像,您通常会使用
        Filter -"var/log/*"
        Filter -"tmp/*"

CopyArchive

根据源、目标和过滤器设置启动存档操作。除非在少数情况下,否则您可能会使用下面的快捷方式来代替显式调用 CopyArchive。您将显式使用 CopyArchive 的一种情况是当您想要更改映像的碎片时,如下所示

        set FragmentSize="30 MB"
        Source archive "original.imz"
        Dest archive "refragmented.imz"
        CopyArchive

FullZip “路径” “完整存档”

CopyArchive 的快捷方式为

                Source path "path"
                Dest archive "full-archive"
                CopyArchive
您通常应该首先设置过滤器。

IncrZip “路径” “增量存档”

CopyArchive 的快捷方式为

                Source path "path"
                Dest iarchive "incr-archive"
                CopyArchive

FullDump “完整存档”

CopyArchive 的快捷方式为

                Source archive "full-archive"
                Dest dump
                CopyArchive

IncrDump “增量存档”

CopyArchive 的快捷方式为

                Source iarchive "incr-archive"
                Dest dump
                CopyArchive

XCopy “源路径” “目标路径”

CopyArchive 的快捷方式为

                Source path "srcpath"
                Dest path "dstpath"
                CopyArchive

5.2 NoBreak.sys

Nobreak.sys 是一个非常小的驱动程序(只有大约 350 字节),您将其包含在 config.sys 的开头。其目标是保护引导过程,直到用户登录。DOS 为此提供了一个设置(即 BREAK=OFF),但这不够彻底,并且在 autoexec.bat 中几乎没有效果。我们的驱动程序通过直接在 BIOS 级别修改请求中断时按下的键的扫描码来工作。这样,在再次启用中断之前,任何程序都无法接收到中断。

驱动程序必须从 config.sys 加载(或使用 Undocumented DOS 中的 devlod 程序)。之后,可以通过向 NOBRK 伪设备发送 Yes 来启用中断,并通过发送 No 再次禁用中断(实际上,只有第一个字符 YN 是有意义的)。

由于此驱动程序依赖于 BIOS,因此它仅适用于 DOS 和 Windows 3.1。Windows 95 有其自己的低级键盘处理例程。

汇编源代码 可用


下一步 上一步 目录