|
如果你只是想启动图里面的那两个系统,我可以说一下方法。
PhoenixOS 是基于 android-x86 的,通过 kernel 命令行参数 iso-scan/filename=${iso_path} 传递 ISO 路径
你找到 ISO 里面的 grub/isolinux 菜单,把上面的命令行抄一下,例如 (仅供参考,实际可能不一样,不通用)
- androidboot.selinux=permissive androidboot.hardware=android_x86
复制代码
然后,和 kernel 的路径,ISO路径参数组合一下就可以了
- menuentry "android-x86" {
- loopback loop ($dev)$iso_path
- linux (loop)/kernel iso-scan/filename=${iso_path} androidboot.selinux=permissive androidboot.hardware=android_x86
- initrd (loop)/initrd.img
- }
复制代码
UOS 是基于 Debian 的,通过 kernel 命令行参数 findiso=${iso_path} 传递 ISO 路径
方法类似。
- menuentry "UOS" {
- loopback loop ($dev)$iso_path
- linux (loop)/live/vmlinuz findiso=${iso_path} locales=zh_CN.UTF-8 boot=live config username=user
- initrd (loop)/live/initrd.img
- }
复制代码
注意,linux 命令加载的 kernel 路径,initrd 命令加载的 initrd 路径,还有启动参数命令要自己从 ISO 里面找,然后加上特殊的 ISO 路径参数。
ISO 路径前面是不带盘符的,因为 Linux 不认 GRUB 盘符。
另外一种方法比较通用,但是使用条件比较苛刻。
要求:ISO 必须位于可写 U 盘上,文件必须连续 (无碎片),必须是 MBR 分区表,第四分区 (hdx,4) 不能被占用。
这样就可以改写分区表,伪造Linux能认的假分区来启动绝大多数 ISO。
示例:
- menuentry "Boot Linux ISO" {
- stat --set=frag -c -q (hd0,1)/xxx/xxx.iso
- if [ "${frag}" != "1" ];
- then
- echo "ERROR: File is non-contiguous. (${frag} fragments)"
- sleep 3
- else
- partnew --type=0x00 --file=(hd0,1)/xxx/xxx.iso hd0 4
- map (hd0,1)/xxx/xxx.iso
- boot
- fi
- }
复制代码 |
|