請選擇 進入手機版 | 繼續訪問電腦版

NoName Team 電腦資訊討論區

 找回密碼
 我要註冊
搜索
查看: 1933|回復: 27

[討論] grub4dos-for_UEFI 設定討論

[複製鏈接]
發表於 2021-3-26 15:38:47 | 顯示全部樓層 |閱讀模式
本帖最後由 ss9696 於 2021-3-26 15:55 編輯

因應現在電腦BIOS 開機部分都偏向於UEFI開機,所以製作一個能UEFI開機的隨身碟或硬碟是未來的方向

目前現況 有XorBoot,grub2... 等等工具都可以製作UEFI的開機選單使用

今年 grub4dos 也有釋出更新 UEFI的開機程式碼

想問在這邊的版大們是否有測試過 grub4dos for uefi的相關經驗呢?

在尋找各版 都有發現一些相關問題 下面是他們提供原版的樣本
# 这是一个样品 menu.lst 文件。你应该对它做些改动。
# 它必须是 UTF-8 编码,以支持多种语言。
# 字体应该是 unifont.hex 格式。



#设置倒计时(秒)
timeout 30

#设置第一项为默认值
default 1

#设置字符颜色(高32位是背景色,低32位是前景色。在命令行执行:echo -rrggbb,可查看对应的颜色。)
#color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00

#设置图形模式(可使用 graphicsmode 探测系统支持的图形模式)
#graphicsmode -1 800(水平像素)
#加载背景图
splashimage /efi/grub/splashimage.jpg
#加载unifont字体(如果不是 16*16 字体,需增加参数,如 --font-high=24)
font /efi/grub/unifont.hex.gz

#设置菜单框
#setmenu --box x=4 w=60 y=6 h=9 l=2
#设置中文菜单按键帮助
#setmenu --lang=zh
#设置自动菜单编号
#setmenu --auto-num-on
#设置字符串信息
#setmenu --string=x=y=颜色="字符串"
#设置日期时间
#setmenu --string=x=y=颜色="date&time=yyyy-MM-dd  HH:mm:ss"
#设置倒计时
#setmenu --timeout=x=y=颜色
#更多菜单编辑功能、动画、图像菜单等等,可参考http://bbs.wuyou.net/forum.php?m ... 9720&extra=page%3D3

title 启动 efi 文件
chainloader /efi/boot/grub2x64.efi

title 启动 windows
chainloader /efi/microsoft/boot/bootmgfw.efi

title 启动虚拟光盘
find --set-root /cdrom.iso
map /cdrom.iso (0xff)
chainloader (0xff)

title 启动虚拟光盘(加载到内存)
find --set-root /cdrom.iso
map --mem /cdrom.iso (0xff)
chainloader (0xff)

title 启动存在的光盘(cd0)
chainloader (cd0)

title 启动虚拟硬盘
find --set-root /boot/hdd.img
map /boot/hdd.img (hd)
chainloader (hd-1)

title 启动虚拟硬盘(加载到内存)
find --set-root /boot/hdd.img
map --mem /boot/hdd.img (hd)
chainloader (hd-1)

title 启动存在的硬盘(hd0)
chainloader (hd0)

title 启动其他菜单
configfile /efi/grub/menu2.lst

title 启动 Linux Porteus 5.0 x86_64 openbox
kernel /porteus/vmlinuz copy2ram
initrd /porteus/initrd.xz

#使用外部命令ntloader
#假设 WIM 或 VHD 位于 (hdx,y),路径为 /path/to/winpe.wim
title 启动 Windows WIM/VHD
uuid (hdx,y)
kernel /ntloader uuid=%?_UUID% file=/path/to/winpe.wim
initrd /initrd.lz1

#使用外部命令ntloader
#假设系统文件夹位于 (hdx,y)
title 启动 Windows 系统
uuid (hdx,y)
kernel /ntloader uuid=%?_UUID%
initrd /initrd.lz1

title 命令行
commandline

title 退出grub4dos
exit_g4d

title 重启
reboot

title 关机
halt

如果直接使用原版的燒入隨身碟,使用虛擬環境開機的時候會發現 會進入到下面的狀況

有些人會碰到 載入的核心版本有問題

或者有亂碼的狀況

所以想問這邊有測試過經驗的版大們是否能提供些建議 排除 問題更好入手呢  感謝
發表於 2021-4-22 15:13:03 | 顯示全部樓層
本帖最後由 阿達金田一 於 2021-4-22 15:16 編輯
ss9696 發表於 2021-4-21 16:18
想問一下 grub4dos  會去找NTFS的檔案,那windows的 uefi的開機會不會自己去 NTFS尋找 /efi/boot/BCD

還 ...

不會 ..win 的 uefi 其實就是 bootmgr ( BOOTMGFW.EFI )

uefi bootmgr 的原則大概是...

1. 先找同路徑下的 bcd
例如
FS0:\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI
會找 FS0:\EFI\MICROSOFT\BOOT\BCD
FS0:\EFI\BOOT\bootx64.efi
會找 FS0:\EFI\BOOT\BCD

2. 找同分區的 \efi\microsoft\boot\bcd
基本上 uefi 開機就是用 ESP 或 FAT 的 EFI

\EFI\BOOT\bootx64.efi
是 uefi bios 預設的開機檔路徑
簡單說就是會去依順序載入...可被 uefi bios 支援並判斷為 FS 的分區
uefi shell 中會  map FS , FS 就是(可支援)檔案系統
在 uefi shell 中...也有磁碟代號的意味...通常是用
FS0:
FS1:
...
FSx:

也就是說...通常就是
找 FS0:\efi\boot\bootx64.efi ... 沒有
接著找 FS1:\efi\boot\bootx64.efi ......

所以如果 uefi bios 有支援 NTFS ( 也就是支援 NTFS FS )
那實際上 uefi bios 開機本身就會去找 NTFS (中的 \efi\boot\bootx64.efi)

簡單說 bootmgr 基本上找的都是 同分區 中的 BCD
和 grub4dos 是找各分區的 menu.lst 不一樣
發表於 2021-4-3 01:03:10 | 顯示全部樓層
本帖最後由 阿達金田一 於 2021-4-3 01:21 編輯

我剛試了...我 map img 是正常的...
不會出現
failed to install virtual disk
Fasiled to install vdisk
這2行...應該是 map 有問題

只會出現最後2行...
Failed to Load .....
這是 chinaloader 有問題

其實 grub4dos uefi 的 chainloader
大概只是加載 /efi/boot/bootx64.efi 而以

我是用以前自製的 biosgpt iso ...裡面有 diskgenius dos img ( 而且是壓成 .LZ )
map 是正常的

你可以測別的 img ...如果一樣不行
那可能是
1. grub4dos uefi 版本 ???

2. UEFI BIOS 問題 ??? ... UEFI 是有分版本的
我測試是用 vbox ... 是模擬 uefi bios 2.70
就我所知 uefi 要支援 ramdisk 要 2.6 版後才能
https://www.lab-z.com/utrad/
我測試時 map --mem 是正常的
你可以測試不要用 --mem
如果 不用就可以 map
表示 g4d uefi 用 --mem 會用到這個 uefi 的功能

3. img 本身就有問題

測試圖



另外 grub4dos uefi 目前有的指令可能比較死
簡單說別拿 G4D Legacy 的 習慣 或 情況 來判斷

如果是 dos img 之類的 partition img (分區映像...簡單說就是沒 分割表 只有 檔案系統 )
可能只能掛到 (fdx)
因為我有測試用 map /xxxx (hd) 會失敗...
iso 基本也只能掛到 (0xff)
大概只有 hdd img ( 磁碟映像 ...簡單說就是包含 分割表)
才能用 (hd) ... 這個我還沒測試

其實就目前來說 grub4dos uefi ...大概最會用到的是 map iso
因為 uefi 目前的工具程式不多...很多 dos 工具...都還沒出 uefi 版
而有些工具都出 PE(Win) 版 或 Linux 版...
大多直接用 iso 進 PE 或 Linux 再進工具程式
像 diskgenius 有 Win版
Acronis 則是有 Linux Boot ISO

不過如果單純啟動 iso ... ventoy 比較好用

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?我要註冊

x
發表於 2021-3-26 17:35:12 | 顯示全部樓層
本帖最後由 阿達金田一 於 2021-3-26 17:39 編輯

grub4dos 終於出 uefi 版了嗎...
太久沒在玩
不過剛出不穩定也是正常的吧...
畢竟 Legacy 和 UEFI 完全不一樣啊
有些和硬體相關的功能可能也不能直接移植過去...
表面上同樣的功能...
可能底層原理完全不一樣 (畢竟 BIOS 本身就不一樣)

先不管其它進階功能...
只要能做到基本正常的 開機引導 ( .efi 載入) 功能...就不錯了

剛 google 了一下

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422652

等有空再來玩
發表於 2021-3-26 19:55:11 | 顯示全部樓層
本帖最後由 阿達金田一 於 2021-3-26 19:58 編輯



預設的 menu.lst 要放在 /efi/grub/menu.lst
字型用以前的就可以
把以下2行前面的 # 去掉
graphicsmode -1 800
font /efi/grub/unifont.hex.gz

我沒做其它測試...是用原本的 menu.lst 樣本
我只有改上面那2行 和 加上 字型檔


本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?我要註冊

x
發表於 2021-3-26 23:33:45 | 顯示全部樓層
聽說字型檔要最新的比較沒問題
https://unifoundry.com/pub/unifont/
 樓主| 發表於 2021-3-29 17:05:41 | 顯示全部樓層
感謝 金田一大的幫忙測試,我也嘗試成功了

只不過 uefi 對於磁碟分割的格式對於部分開機系統來講真的蠻嚴格的

以我目前知道的以下

對於VM系統或者市面上的品牌例如:acer dell asus 來講 FAT32是必須使用的格式bios才能順利抓取到隨身硬碟資料,

但是 HP 品牌 的bios NTFS 格式就能抓的到

這樣講這邊版友們應該都能知道差異性,FAT32 跟 NTFS 兩者可以放的檔案真的差蠻多了   

想要工具跟東西豐富點就只能選擇NTFS格式 但就還要準備一個FAT32格式的隨身碟來開機

選擇FAT32 能放的東西又不能太豐富 只能精挑細選
發表於 2021-3-29 21:51:08 | 顯示全部樓層
ss9696 發表於 2021-3-29 17:05
感謝 金田一大的幫忙測試,我也嘗試成功了

只不過 uefi 對於磁碟分割的格式對於部分開機系統來講真的蠻嚴 ...

把隨身碟拆成兩個分區就行了
一個NTFS一個FAT32

或向USBOX那樣前面在加個UD區
 樓主| 發表於 2021-3-30 10:18:27 | 顯示全部樓層
a10036no 發表於 2021-3-29 21:51
把隨身碟拆成兩個分區就行了
一個NTFS一個FAT32

我一開始也有用這樣的方式,只不過實在太不熟設定磁碟的語法

所以每次測試的時候都是選擇選單就會跳到無背景的文字選單

嘗試許多次路徑設定失敗後才演變成現在使用這麼懶人的方式,想要一個磁區就搞定

不知道版大是否有指定磁區的語法範例能參考呢  感謝
發表於 2021-3-31 18:39:07 | 顯示全部樓層
原生的 UEFI 本來就只支援 FAT
可能是廠商另外加 NTFS EFI Driver
( 簡單說就是 BIOS 已經內崁 NTFS EFI Driver )
就像 grub2 一樣載入 Driver 後就能支援 NTFS

所以最好的做法就是 a10036no 說的
都分成 FAT + NTFS , 開機 都用 FAT
其實 FAT 就是只用來開機而以
只要能放下 開機管理程式 就夠了
其它檔案可以都放到 NTFS
反正 bootmgr grub2 grub4dos 都能支援 NTFS 讀取

至於 grub4dos ... 善用 find --set-root 就可以

另外你大可以把
/efi/grub/menu.lst 放到 NTFS
因為 grub4dos 是會去找 menu.lst 沒有說一定要和 grub4dos 放在一起

也就是 FAT 大可以只放 grub4dos 的開機程式 ( /efi/boot/bootx64.efi )
grub4dos 一樣會去找到 NTFS 的 /efi/grub/menu.lst
然後會設定 root 為該 分區

簡單說 FAT + NTFS
(hdx,0) 是 FAT
(hdx,1) 是 NTFS
除了 grub4dos 的 /efi/boot/bootx64.efi 之外
其它檔案都放到 NTFS

grub4dos 找到並載入 (hdx,1)/efi/grub/menu.lst 時
root 會是 (hdx,1)
 樓主| 發表於 2021-4-1 15:32:40 | 顯示全部樓層
本帖最後由 ss9696 於 2021-4-1 15:35 編輯
阿達金田一 發表於 2021-3-31 18:39
原生的 UEFI 本來就只支援 FAT
可能是廠商另外加 NTFS EFI Driver
( 簡單說就是 BIOS 已經內崁 NTFS EFI Dr ...

確實用金田一大的方式 能順利將磁區分割成功了

不過 後續測試其他項目的時候有發現問題

原本使用的IMG跟ISO的掛載,在這新的環境底下測試掛載沒有一個是成功的 不知道是什麼原因?

在原本環境的語法是以下

find --set-root /boot/grub/hddreg.IMG
map --mem /boot/grub/hddreg.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

在新的環境我看樣本 將原有的套上新的樣本之後

find --set-root /boot/grub/hddreg.img
map --mem /boot/grub/hddreg.img (hd)
chainloader (hd-1)

就算使用原有的語法也是一樣的狀況



如果掛載 光碟檔也是一樣,跑完內存就一樣跑出上面的訊息
發表於 2021-4-2 03:57:05 | 顯示全部樓層
ss9696 發表於 2021-4-1 15:32
確實用金田一大的方式 能順利將磁區分割成功了

不過 後續測試其他項目的時候有發現問題

我猜...
uefi 就不支援16bit系統了吧
要跑dos就只能開Legacy了
您需要登錄後才可以回帖 登錄 | 我要註冊

本版積分規則

小黑屋|手機版|NoName Team 電腦資訊討論區 |網站地圖

GMT+8, 2021-9-17 00:20 , Processed in 0.152138 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表