Skip to content

Latest commit

 

History

History
93 lines (86 loc) · 4.05 KB

File metadata and controls

93 lines (86 loc) · 4.05 KB

分区参数迷你语言

和其他常见的分区工具不同,ampart是完全非互动式的,这意味着你应该把所有你想干的事都通过命令行参数提交给它

因为这一特别的的使用需求,我特别定义了一门迷你语言,以让每一个分区操作(定义,编辑)都能用一个参数来描述,并且复杂的操作可以在一次命令行操作中实现。这么语言很直白地叫做 (ampart) 分区参数迷你语言,下文中将使用parg作为简称来指代它

基本语法

一个parg是能用单一的Linux命令行参数表示的由空字节作为结尾的字符串,由以下这些形式,由明显的 : 来分割其中多个部分

  • {名称}:{偏移}:{大小}:{掩码}
    • 叫做定义器parg,同一格式也可以用在调整器上,不过它们各自的自参数由不同要求*
  • ^{选择器}{操作符}({操作符后缀})
    • 叫做修改器parg

注意:上述内容中,由符号{}框起来的是需要用户填写的子参数,结果parg中不应包含{}符号本身;符号:和^应该原模原样输入;符号()框起来的是可选的子参数,如果不需要的话可以省去

定义器

语法

  • {名称}:{偏移}:{大小}:{掩码}

例子

  • bootloader:0:4M:0
    • 一个bootloader分区,放置在0偏移处,大小4MiB,掩码0
  • data:::
    • 一个data分区,作为最后一个分区。根据具体模式,紧跟着上一个分区,或是隔着8MiB,占用所有空余空间,自动掩码
  • system:+8M:2G:2
    • 一个system分区,作为最后一个分区。前面和上一个分区之间留8MiB空隙,大小2GiB,掩码2

修改器

语法

  • ^{选择器}{操作符}({操作符后缀})

选择器

  • {名称} 名称选择器
    • 现存的具体分区名
  • {相对值} 相对选择器
    • 非负值从开头到结尾选择(0选择第一个)
    • 负值从结尾到开头选择(-1选择最后一个)

例子

  • userdata
    • 选择一个名为userdata的分区
    • 例子parg: ^userdata?
  • 4
    • 选择第五个分区
    • 例子parg: ^4:my::+1G:
  • -2
    • 选择倒数第二个分区
    • 例子parg: ^-2%Cloned

操作符

  • ? 删除操作符
    • 删除分区,其后分区向前各移动一位
    • 无后缀
  • % 克隆操作符
    • 克隆分区,把新的克隆出来的分区作为最后一个分区
    • 后缀:{名称} 克隆器
      • 克隆器应该包含一个目前未使用的名字
    • 例子:
      • %CE_STORAGE
        • 克隆分区为CE_STORAGE
        • 例子parg: ^-1%CE_STORAGE
  • @ 移位操作符
    • 把一个分区移位
    • 后缀:{移位器}
      • {相对}{非负数} 相对移位器
        • +{非负数}
          • 向右移动*
        • -{非负数}
          • 向左移动*
      • (=){数字} 绝对移位器
        • ={负数} 自右向左放置,-1为最后一位
        • (=){非负数} 自左向右放置,0作为第一位
    • 例子:
      • @-2
        • 把分区向左移动两个位置,穿过的两个分区各向右移动一个位置
        • 例子parg: ^-1@-2
      • @+3
        • 把分区向右移动三个位置,穿过的三个分区各向左移动一个位置
        • 例子parg: ^roms@+3
      • @7或@=+7
        • 把分区移动为第八个分区。如果向左移动,穿过的分区各向右移动一位;如果向右移动,穿过的分区各向左移动一位;如果没有移动,无事发生
        • 例子parg: ^system@7, ^system@=+7
      • @=-4
        • 把分区移动为倒数第四个分区(前面应该有3个其他分区),和上一个逻辑一样
        • 例子parg: ^logo@=-7
  • : Adjust Operator
    • 后缀:{调整器}
      • {名称}:{偏移}:{大小}:{掩码}
        • 定义器的子部分相同
    • 例子:
      • :bootleg::-1G:
        • 把分区改名为bootleg,大小缩小1G
        • 例子parg: ^boot:bootleg::-1G:
      • ::+2G:+1G:4
        • 把分区的偏移增加2G,大小增加1G,掩码改为4
        • 例子parg: ^factory::+2G:+1G:4