Grub2 中的字符串操作

Grub2 中的字符串操作

Grub2 的新功能之一是脚本化。我在工作中使用它效果很好。然而,我最近发现了一个严重的缺点。它不支持任何字符串操作或算术运算。

我的具体问题:我需要在启动之前弄乱 PCI 设备。在setpci和之间,write_dword我可以轻松写入所需的值。我从中获取基地址寄存器setpci,并将 0x18 写入其中,然后将所需的值写入该地址。

我在实验时在脑子里做了计算,但现在我不知道如何让 Grub2 在启动时做同样的计算。

更糟糕的是,PCI 地址总是以 000 结尾。所以理论上我可以用“18”这也行得通。Grub2 再次让我失望,不支持字符串操作。

有没有办法在 Grub2 脚本中获取子字符串?
有没有办法在 Grub2 脚本中执行算术运算?

答案1

如果你想要 Grub2 中的脚本功能,你需要lua 支持,它不是发布版本的一部分。它是grub-extras,你可以得到来源:bazaar 仓库。您需要从源代码重建 Grub2。我认为除了源代码之外没有任何文档,不过您可以在grub-devel邮件列表。祝你好运。

答案2

regexp命令可用于执行有限的字符串操作。

https://www.gnu.org/software/grub/manual/grub/grub.html#regexp

未经测试的示例:

regexp --set base "(....)00" "$reg"
if [ "$base" != "" ]; then
    setpci "${base}18" ...
fi

相关内容