无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: hilsonma
打印 上一主题 下一主题

[分享] 我的启动U盘(uefi+bios+wepe骨版,独剑三分区脚本简化制作)

    [复制链接]
1#
发表于 2019-11-21 19:41:49 | 显示全部楼层

不清楚楼主构建的grub2有没有带gfxmenu等相关模块。
假设模块齐全。
加载字体,字体自己找
loadfont /boot/grub/fonts/unicode.pf2
设置翻译文件路径
set locale_dir=/boot/grub/locale
设置语言
set lang=zh_CN
设置分辨率
set gfxmode=auto
切换为图形显示终端
terminal_output gfxterm
设置背景图像 支持png, jpg, tga
background_image /xxx.png
回复

使用道具 举报

2#
发表于 2019-11-21 20:16:48 | 显示全部楼层
本帖最后由 wintoflash 于 2019-11-21 20:24 编辑
hilsonma 发表于 2019-11-21 19:57
我构建的是不带这些模块的。
如果要使用这些模块需要重新构建,带上相关模块。
或者将相关模块文件放到我 ...

不推荐第二种方法.
除非自己是开发者,否则不要这么做.出了问题都不知道怎么解决
回复

使用道具 举报

3#
发表于 2020-3-14 21:28:10 | 显示全部楼层

机器人?
回复

使用道具 举报

4#
发表于 2020-6-19 09:14:27 | 显示全部楼层
hilsonma 发表于 2020-6-17 17:06
采用手动制作,自动菜单,然后将启动凤凰系统和uos的两个配置文件放到diy文件夹中

启动凤凰系统和uos ...

直接 map ISO 当然不行。
无论是 Windows 安装镜像/有外置的 PE/有外置squashfs的 Linux 都不能直接 map。

点评

我一直都是装别人的精简版呀优化版呀,都没有装过原版的安装镜像,用的PE也都是内置的,就算有外置也是附加外置是可选件,所以一直不懂这些引导,可不可以给我一些引导例子学习一下。  详情 回复 发表于 2020-6-19 10:27
回复

使用道具 举报

5#
发表于 2020-6-19 11:14:46 | 显示全部楼层
本帖最后由 wintoflash 于 2020-6-19 11:16 编辑
hilsonma 发表于 2020-6-19 10:27
我一直都是装别人的精简版呀优化版呀,都没有装过原版的安装镜像,用的PE也都是内置的,就算有外置也是附 ...

map 弄出来的虚拟光驱是固件(BIOS/UEFI)层面上的,只对 bootloader 有效,对 OS 无效。进 OS 之后虚拟光驱就不存在了,OS 就读不到光盘上的东西。
所以必须找到一个方法,把 ISO 的路径 "告诉" OS,让 OS 自己挂载 ISO。具体怎么 "告诉",每个系统都不一样,其中原理也不同,写出来就是长篇大论,我估计你也不想看。

我开发了那么长时间的 grub2-filemanager,还有 longpanda 开发 ventoy,都是费了那么多力气,就是要逐个研究。

点评

谢谢解惑。让我明白多一些。也对 grub2-filemanager 和 ventoy 有了更多了解。  详情 回复 发表于 2020-6-19 12:27
回复

使用道具 举报

6#
发表于 2020-6-19 11:39:48 | 显示全部楼层
如果你只是想启动图里面的那两个系统,我可以说一下方法。

PhoenixOS 是基于 android-x86 的,通过 kernel 命令行参数 iso-scan/filename=${iso_path} 传递 ISO 路径
你找到 ISO 里面的 grub/isolinux 菜单,把上面的命令行抄一下,例如 (仅供参考,实际可能不一样,不通用)
  1. androidboot.selinux=permissive androidboot.hardware=android_x86
复制代码

然后,和 kernel 的路径,ISO路径参数组合一下就可以了
  1. menuentry "android-x86" {
  2.     loopback loop ($dev)$iso_path
  3.     linux (loop)/kernel iso-scan/filename=${iso_path} androidboot.selinux=permissive androidboot.hardware=android_x86
  4.     initrd (loop)/initrd.img
  5. }
复制代码


UOS 是基于 Debian 的,通过 kernel 命令行参数 findiso=${iso_path} 传递 ISO 路径
方法类似。
  1. menuentry "UOS" {
  2.     loopback loop ($dev)$iso_path
  3.     linux (loop)/live/vmlinuz findiso=${iso_path} locales=zh_CN.UTF-8 boot=live config username=user
  4.     initrd (loop)/live/initrd.img
  5. }
复制代码


注意,linux 命令加载的 kernel 路径,initrd 命令加载的 initrd 路径,还有启动参数命令要自己从 ISO 里面找,然后加上特殊的 ISO 路径参数。
ISO 路径前面是不带盘符的,因为 Linux 不认 GRUB 盘符。

另外一种方法比较通用,但是使用条件比较苛刻。
要求:ISO 必须位于可写 U 盘上,文件必须连续 (无碎片),必须是 MBR 分区表,第四分区 (hdx,4) 不能被占用。
这样就可以改写分区表,伪造Linux能认的假分区来启动绝大多数 ISO。
示例:
  1. menuentry "Boot Linux ISO" {
  2.     stat --set=frag -c -q (hd0,1)/xxx/xxx.iso
  3.     if [ "${frag}" != "1" ];
  4.     then
  5.         echo "ERROR: File is non-contiguous. (${frag} fragments)"
  6.         sleep 3
  7.     else
  8.         partnew --type=0x00 --file=(hd0,1)/xxx/xxx.iso hd0 4
  9.         map (hd0,1)/xxx/xxx.iso
  10.         boot
  11.     fi
  12. }
复制代码

点评

很认真看了,讲解很详细,对小白我们长见识了,谢谢W大佬!  详情 回复 发表于 2023-3-27 17:12
谢谢。 kernel 命令行我有一些了解,知道要跟着iso里面的参数,每个实例都可能不一样的。只是很少想到外置和iso路径传递,我自己也少用。 你这几个例子对我很有参考意义,谢谢。  详情 回复 发表于 2020-6-19 12:45
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-16 06:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表