2012rospartner 发表于 2014-3-2 08:04 这个帖子就是在讨论如何在uefi环境下运行grub4dos,而不是怎么在uefi下运行dos/xp。 你怎么能说efi下不需要启动管理器呢?目前grub4dos有很多启动增强功能,比如map虚拟磁盘以及ramos启动,这目前在uefi下尚无法实现。正如你所说,uefi下可以写一个全新的启动器来取代grub4dos,如果能实现uefi下的iso/img磁盘仿真启动以及ramos启动等功能,那就算解决了本贴的问题了。grub4dos也可以随bios隐退了。 至于uefi下运行dos/xp,这和本帖主题无关,可以另发帖讨论,不过基本没有实现可能了。uefi下dos的替代品是efi shell,xp则被新版本windows取代了。 |
|
本帖最后由 wangjg 于 2014-8-21 08:30 编辑 看来需要有人写个csm.efi了。这样efi启动grub4dos,支持dos等等诸如此类问题是不是就解决了? 不过话说回来,同样的工作量都快可以实现efi上的虚拟机了。 这样pc上也像小型机一样有分区了,呵呵。 |
| fujianabc说的确实是,grub4dos的iso/img磁盘仿真启动以及ramos启动等功能成就了多少维护PE、工具的辉煌 |
mdyblog 发表于 2014-3-1 21:56 你根本没搞清楚问题的根本。一个启动器,没那么重要。grub2已经支持uefi,即使没有grub4dos,也会有aaa,bbb,等启动器支持uefi,就算grub4dos修改后支持uefi,64位模式和没有bios中断已经决定了不能支持dos.假设没有uefi,就只能启动windows7,windows8系统,如果要用win7,win8系统,还要grub4dos干吗?有bootmgr。如果一个机器真没有了bios,那么就不能运行xp,dos系统了,如果真的需要运行xp,dos系统,你不觉得悲哀吗?所以如果有办法能让uefi启动xp,dos,那才是重要的。为了修改一个grub4dos去支持uefi,没太多意义,就算修改grub4dos支持uefi,又有什么太大的使用用途呢?再说,启动器多大个事,几十k,几白k的问题,别人也可以编个全新的uefi的启动器。启动器最终目的的是启动系统。关键问题是,没有了bios,你的dos系统,xp系统如何运行,这才是头痛的问题。如果你说,不用dos,xp系统,那我也没什么说的,我只能说win7,win8系统直接efi启动bootx64.efi就得了,根本不需要启动管理器。 |
本帖最后由 mdyblog 于 2014-3-1 22:03 编辑 2012rospartner 发表于 2014-3-1 18:04 需要DOS, XP源码干嘛? 完全不需要。 难带大家开发一个window相关的软件,就需要windows源码吗? 》》grub4dos改efi有什么用,16位程序,efi是64位,而且改了也不支持dos. 隔行如隔山。 看样子你不清楚C/C++软件开发。 软件 变换 平台时, 有相通之处。 其中的思想和算法 是相通的。 (1) 设计思想 (2) 算法 (3) 编码 只是(3) 不同。 1、2是相通的。 在此基础上,开发快多了。 |
mdyblog 发表于 2014-3-1 16:41 你说的这是什么啊。你是说grub4dos源码改动是吗,有什么用?dos,xp的源码你又没有,再说就算有dos源码,dos是16位的,只能int调用,efi是64位的,根本不行。所以efi根本不支持dos,也不支持xp启动,除非把xp启动的过程改位xpboot.efi差不多。grub4dos改efi有什么用,16位程序,efi是64位,而且改了也不支持dos. |
本帖最后由 mdyblog 于 2014-3-1 16:43 编辑 fujianabc 发表于 2014-3-1 15:56 INT调用 不是问题,就当一个函数调用, int 0x13 就当作 CALL FUN_INT_13(...) EFI 中 就改作 FUN_INT_13_EFI(...) 这只是 示意:原来调用 A 函数,现在调用 A' 函数。(从移植 来说,现在 移植一个A函数就可以。上层逻辑和代码不变。) 而且, INT 是函数细节的问题。 上面一定有个 函数A包装。G4D 大逻辑是C写的,也是 函数-堆栈 调用,和EFI是代码机兼容。 我们只管A函数这个接口层, 至于A函数怎么写,授予移植的问题。原来用INT调用实现A函数, 现在调用EFI driver 实现A函数。 其实软件 关键 是 思想,算法。 这是做重要的,也是最花时间的。 至于底层接口,问题不大。 这个工作教移植(porting)。软件的逻辑不变,知识改变底层接口。 这个 不需要太多的脑力(思想),基本上只算体力活。 我多年感这种工作。 比如 WINDOWS ---LINUX---单片机 之间 相互移植。 单片机 和 WINDOWS 差很远吧, 但 软件 的大逻辑在代码机还是兼容的。 只是移植底层函数。 原来 调用Windows-API, 现在 通过 单片机 的 寄存器 操作实现。 BIOS -- EFI 移植类似,同理。 工作量比原始开发小多了。 大概 %1 吧。 一个月就可以。 (由于缺乏第3方的支持,有些功能,目前还不能实现,如MAP ,实现了目前也没有EFI程序用) |
mdyblog 发表于 2014-2-28 18:35 问题在于目前grub/g4d中很多功能的实现就是依靠的int调用,要efi化这些功能估计完全都要重写了。 类似的syslinux所带的memdisk也遇到这个问题,导致迟迟没有出efi版的memdisk |
|
记得去年试过当时是不能直接map 文件,现在有map xx.iso功能没? http://bbs.wuyou.net/forum.php?m ... 3&fromuid=30984 |
| 引导程序的修改支持efi事小,大问题是dos,xp里面的bios调用如何支持。要么就修改xp的引导过程为efi,而dos只能软件模拟bios了。 |
本帖最后由 mdyblog 于 2014-2-28 19:08 编辑 ali88home 发表于 2014-2-27 11:30 1:有吧。 下载的 WInLy-GRUB 中就带有 bootx32.efi 和 bootx64.efi. 只是我这里测试不了 bootx32.efi , 机器 只认 bootx64.efi. 2: 》那么在x32的EFI就可能执行x32的img实现镜像模拟 我上面说过, 其实是配合的问题。 不只是G4D的问题。 现在 我们需要 各种OS的EFI-Loader, 原有的Loader(IO.SYS, NTLDr BootMgr) 都是 BIOS环境的。 在EFI环境都不能运行。 所以需要 先有这些第3方(EFI-IO.SYS, EFI-NTLDR, EFI-BootMgr, 也许还涉及到 其它文件), (EFI-IO.SYS 应该是个DOS模拟器吧,虚拟出一个BIOS环境,DOS软件在虚拟BIOS上运行) 之后 才能 G4D配合他们来开发 。 BIOS启动:Loader就是完成 BIOS->WINDOWS的过渡 EFI启动: Loader就是完成 EFI->WINDOWS的过渡 过渡后, Loader/BIOS/EFI 没有作用了,windows的工作 不需要 Loader/BIOS/EFI 。 (DOS工作 需要BIOS) 目前 EFI 只有Win8的Loader,XP 2003 DOS都没有。 grub2 有镜像模拟,但不是配合 DOS XP 2003 的Loader 开发的。 目前只是配合Linux开发的,Linux可用。 大家知道,就是loop. 其实 loop 就是G4D的map。 只是没有开发对应的Loader。 (Vboot-grub2好像支持模拟,他有LOader到windows驱动一整套的东西)。可惜不开源,我等该不了。 |
|
本帖最后由 mdyblog 于 2014-2-28 18:41 编辑 1:最要命的是 EFI。 EFI 的过渡,我等小虾是无法阻止的,只能适应了。 支持的G4D 只能是维护态了, 不可能在有人 大力气区发展他的。 只能是 开发同时支持 EFI 的 G4d-EFI . 2: 其实EFI开发比BIOS开发简单。 完全是C/C++的代码,完全是函数调用;没有BISO中的巫师代码(INT调用)。不需要考虑(有限的)寄存器。 而且 EFI 中没有内存限制,代码可以大点,变量可以多点。(不想现在的G4D默认只支持几个变量)EFI写的话,变量可以随便用(不会用到极限-4G)。 相信 很快 就会有人 将G4D编译成 支持EFI版。G4D开源是其优势,开发进度很快的,突击一把,一个月就可以出来的。 3: 用EFI 其实 不只是 G4D 的问题。 还需要 其他支持。 比如 现在BIOS G4d 的扇区map Vblock驱动支持。 EFI 中也一样。 内存盘, 扇区映射盘,都需要第3方配合。或者说:G4D需要配合第3方来写,问题是 第3方 现在在哪儿??? 比如,最近,我用 第二代UD(MBROS) 存放EFI-8PE, 8PE的EFI Loader(bootx64.efi)就不加载 UD中的BCD. 需要 支持的 UD 的bootx64.efi 的“第3方”。 (说明,grub2-EFI能访问UD中的文件. EFI-8PE 的 bootx64.efi 也执行了) |
我还在担心efi的前途呢![]() mbr有什么不好呢。 |
本帖最后由 fujianabc 于 2014-2-27 14:39 编辑 ali88home 发表于 2014-2-27 11:30 关键是linux16、initrd16、memdisk都是16位是模式程序。uefi不支持16位的。 现在其实grub4dos相对于gnu grub增强的大部分功能,grub2都没能实现 |
本帖最后由 ali88home 于 2014-2-27 14:15 编辑 fujianabc 发表于 2014-2-27 09:30 请教grub2有x32的bootx32.efi吗? 如果有,那么在x32的EFI就可能执行x32的img实现镜像模拟 试过了bootx32.efi,可以启动grub2,但是支持linux16/initrd16和memdisk实现镜像模拟???居然??? |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.