无忧启动论坛

标题: Grub4dos for uefi 启动 cdlinux 报错 "kernel too old" [打印本页]

作者: endless084    时间: 2021-2-22 12:09
标题: Grub4dos for uefi 启动 cdlinux 报错 "kernel too old"
本帖最后由 endless084 于 2021-2-22 12:09 编辑

想通过 Grub4dos for uefi 在U盘上安装并引导启动各种系统,其中包括cdlinux,结果报错。难道uefi版本 Grub4dos 不支持启动cdlinux?
以下是报错信息:
  1.     Booting command-list

  2.   (hd0,0)
  3. kernel too old

  4. Error 19:(http://grub4dos.chenall.net/2/19)
  5.               Linux kernel must be loaded before initrd

  6. Press any key to continue...
复制代码


以下是 menu.ls 内容:
  1. # 这是一个样品 menu.lst 文件。你应该对它做些改动。
  2. # 它必须是 UTF-8 编码,以支持多种语言。
  3. # 字体应该是 unifont.hex 格式。

  4. #设置倒计时(秒)
  5. timeout 30

  6. #设置第一项为默认值
  7. default 4

  8. #设置字符颜色(高32位是背景色,低32位是前景色)
  9. color normal=0xff9933 highlight=0xffff00 helptext=0xff00ff heading=0x66ff00

  10. #设置图形模式(可使用 graphicsmode 探测系统支持的图形模式)
  11. graphicsmode -1 1366 768 24:32

  12. #加载背景图
  13. splashimage /efi/grub/lt.jpg

  14. #加载字体(如果不是 16*16 字体,需增加参数,如 --font-high=24)
  15. font /efi/grub/unifont.hex

  16. #设置菜单举例
  17. setmenu --box x=4 w=60 y=6 h=9 l=2
  18. setmenu --keyhelp=1 --lang=zh
  19. setmenu --auto-num-on
  20. setmenu --keyhelp=1=0x66ff00
  21. setmenu --string=m=2=0x0000000000ffff="G4D 维 护 菜 单"
  22. setmenu --string=s=1=0x8800000000ffff="date&time=yyyy-MM-dd HH:mm:ss"
  23. setmenu --timeout=90=2=0x88000000ffff

  24. title 启动 efi 文件
  25. chainloader /efi/boot/shellx64.efi

  26. title 启动 ntfs 文件
  27. chainloader /efi/boot/ntfs_x64.efi

  28. title 启动 winpe
  29. find --set-root /src/svbusventoyPE.iso
  30. map --mem /src/svbusventoyPE.iso (0xff)
  31. chainloader (0xff)

  32. title 启动 深度liveCD文件
  33. kernel /src/vmlinuz boot=live findiso=/src/deepin-live-system-2.0-amd64.iso components quiet splash
  34. initrd /src/initrd.img

  35. <font color="#ff0000">title 启动 CDlinux(U盘)
  36. find --set-root /CDlinux/bzImage
  37. kernel /CDlinux/bzImage quiet CDL_DEV=LABEL=CDLINUX CDL_LANG=zh_CN.UTF-8 vga=791
  38. initrd /CDlinux/initrd
  39. boot</font>

  40. title 启动 win10
  41. chainloader (hd2,0)/efi/microsoft/boot/bootmgfw.efi

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

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

  46. title 命令行
  47. commandline

  48. title 退出grub4dos
  49. exit_g4d

  50. title 重启
  51. reboot

  52. title 关机
  53. halt
复制代码



作者: endless084    时间: 2021-2-22 15:48
xbmc 发表于 2021-2-22 14:31
就是字面意思,你用的linux内核版本太低了。

意思我明白,难道grub4dos也要看被引导的系统的内核版本?不懂
作者: babyshin    时间: 2021-4-19 20:46
本帖最后由 babyshin 于 2021-4-19 20:48 编辑

我最近也是遇到同樣的問題嘗試 UEFI+BIOS啟動 (實驗性質,證實可行,但要解決中斷問題)

只不過我原先是使用 Grub2
內核我自行編譯過, 把linux16, initrd16都編譯進bootx64.efi
menuentry "Win98-DOS" {
  linux16 /memdisk raw
  initrd16 /msdos.img
}
可以正確載入memdisk
也能進去dos環境, 有VGA TEXT mode的文字畫面, 但是鍵盤沒反應
估計是系統環境不是在real mode
許多中斷都不像原先dos環境那般順利
試了許多dos軟體,也不是每個都有畫面產生
估計也是Graphic <--> VGA TEXT mode轉換沒寫好的問題

換成grub4dos UEFI版本
title Win98-DOS
  kernel /memdisk
  initrd /msdos.img
就會跳出如同Grub2 linux的錯誤訊息: kernel too old
我猜內核是不支援linux16,自然後面initrd也是不支援dos的



作者: liuzhaoyzz    时间: 2021-4-20 11:19
babyshin 发表于 2021-4-19 20:46
我最近也是遇到同樣的問題嘗試 UEFI+BIOS啟動 (實驗性質,證實可行,但要解決中斷問題)

只不過我原先是 ...

        你这是折腾的啥啊?
內核我自行編譯過, 把linux16, initrd16都編譯進bootx64.efi

msdos根本就不支持UEFI,msdos运行在实模式下,依赖于BIOS中断,怎么可能在UEFI下面启动???

換成grub4dos UEFI版本

grub4dos UEFI版本也不可能启动msdos的。

UEFI大概是2005年出现的,
1996年8月,MS-DOS 7.1。
2000年,MS-DOS 8.0,MS-DOS的最后一个版本。由于微软看到了Windows的曙光,于是放弃了DOS。
从时间线上面来说,2000年的东西,怎么可能运行在2005的UEFI上面?

纯属瞎折腾!

作者: babyshin    时间: 2021-4-20 16:15
liuzhaoyzz 发表于 2021-4-20 11:19
你这是折腾的啥啊?

msdos根本就不支持UEFI,msdos运行在实模式下,依赖于BIOS中断,怎么可能 ...

是工作,沒辦法呀

搞底層測試的

直接在實模式做硬件的驅動控制

UEFI什麼的系統根本不需要...


作者: liuzhaoyzz    时间: 2021-4-20 16:27
本帖最后由 liuzhaoyzz 于 2021-4-20 16:29 编辑
babyshin 发表于 2021-4-20 16:15
是工作,沒辦法呀

搞底層測試的

        工作要在MSDOS下面搞,完全理解。那就在实模式下面搞就是了,必须要在BIOS下面启动,可是你为什么要跑去UEFI下面搞呢?UEFI主板一般地来说支持LEGACY BIOS模式引导,开启CSM模块就可以了啊。

完全可以用BIOS版本的grub4dos引导msdos.img进入msdos实模式,grub4dos启动方式,可以用bootmgr引导grldr,也可以从MBR引导grub4dos。
title
msdos.img
find --ignore-floppies --ignore-cd --set-root /boot/imgs/msdos.img
map --mem --top /boot/imgs/
msdos.img (fd0)
map --hook
root (fd0)
chainloader (fd0)+1

或者用grub2-bios引导也可以(稍微麻烦点)。memdisk引导img好像要加上img参数。
menuentry "Win98-DOS" {
  search -n -s -f /memdisk
  linux16 /memdisk raw img
  initrd16 /msdos.img
}

作者: babyshin    时间: 2021-4-20 19:39
本帖最后由 babyshin 于 2021-4-20 19:43 编辑

BIOS的原本就已經在做了
無奈2021年新出的主板有些已經開始拿掉CSM功能了 (往後也應該是這個趨勢, Intel強制主導改朝換代)

所以另一方面也在進行把Legacy的程式改寫UEFI

UEFI+BIOS僅是實驗性質

但的確是可以從UEFI Bootloader跳轉到BIOS啟動 (Grub2 linux16+initrd16)

只是現在沒太多時間可以解後面驅動的問題 (或者沒必要)



作者: liuzhaoyzz    时间: 2021-4-20 20:38
babyshin 发表于 2021-4-20 19:39
BIOS的原本就已經在做了
無奈2021年新出的主板有些已經開始拿掉CSM功能了 (往後也應該是這個趨勢, Intel強 ...

        还是遵循软硬件发现的规律吧,既然想用DOS,随便买老电脑应该就行啊,老电脑要不了几个钱,或者直接在虚拟机中用BIOS启动也行啊,DOS要求很低啊。但是想在新电脑跑DOS,这不符合软硬件发展规律啊,似乎没啥意义啊。




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3