无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
1081#
发表于 2015-12-22 08:31:45 | 只看该作者
怎么 2015-0820  2015-0807 的源码包 一样的,都是 grub4dos-31be3fea231b8fd5748e832d24ce454e793cd1a7.zip
回复

使用道具 举报

1082#
发表于 2015-12-22 08:51:37 | 只看该作者
chenall 发表于 2015-12-21 15:38
新的版本对外部命令的执行有一些改变.

需要更新外部命令,没什么问题的话暂时可以用旧版本的

原来如此,多谢C大回复。就不知P大将如何处理这个问题,好像0PE里也集成了5大的模块。
回复

使用道具 举报

1083#
发表于 2015-12-29 14:20:16 | 只看该作者
报告一个奇怪的现象。
(0000:8280  4字节(即双字) 启动驱动器号(boot_drive) )

configfile  %cfg% 会修改 0000:8280 为   %cfg% 所在的磁盘号。
这个好像不应该啊!

应该重新启动grldr/grub.exe 才做的事吧。


点评

那是为了方便菜单的编写。当菜单或得控制权时,它所在的盘就是当前盘,它所在的分区,就是当前 root 分区。同时也把当前盘模拟成启动盘,把当前分区模拟成启动分区。  详情 回复 发表于 2015-12-29 15:13
回复

使用道具 举报

1084#
 楼主| 发表于 2015-12-29 14:40:00 | 只看该作者
configfile_func (char *arg, int flags):
  if (current_drive != 0xFFFF && (current_drive != ram_drive || filemax != rd_size))
  {
    boot_drive = current_drive;
    install_partition = current_partition;
  }
回复

使用道具 举报

1085#
发表于 2015-12-29 15:13:21 | 只看该作者
mdyblog 发表于 2015-12-29 14:20
报告一个奇怪的现象。
(0000:8280  4字节(即双字) 启动驱动器号(boot_drive) )


那是为了方便菜单的编写。当菜单获得控制权时,它所在的盘就是当前盘,它所在的分区,就是当前 root 分区。同时也把当前盘模拟成启动盘,把当前分区模拟成启动分区。

点评

改启动设备, 真的没道理。 感觉好心办坏事。 就像,感冒了, 结果医生把丁丁给切了。 启动设备 毕竟有特别的含义和作用。 改了,会使很多和 改启动设备 有关的逻辑(如程序)混乱。  详情 回复 发表于 2015-12-29 16:57
回复

使用道具 举报

1086#
发表于 2015-12-29 16:57:45 | 只看该作者
不点 发表于 2015-12-29 15:13
那是为了方便菜单的编写。当菜单获得控制权时,它所在的盘就是当前盘,它所在的分区,就是当前 root 分 ...

改启动设备, 真的没道理。
感觉好心办坏事。
   就像,感冒了, 结果医生把丁丁给切了。

启动设备 毕竟有特别的含义和作用。
改了,会使很多和 改启动设备 有关的逻辑(如程序)混乱。

点评

理解不动,不接受,那你就改它呗。事是死的,人是活的。  详情 回复 发表于 2015-12-29 17:09
回复

使用道具 举报

1087#
发表于 2015-12-29 17:09:13 | 只看该作者
本帖最后由 不点 于 2015-12-30 00:44 编辑
mdyblog 发表于 2015-12-29 16:57
改启动设备, 真的没道理。
感觉好心办坏事。
   就像,感冒了, 结果医生把丁丁给切了。


理解不动,不接受,那你就改它呗。事是死的,人是活的。

过去我也曾发表过自己对某些做法的不满。我也曾按照自己的思路更改过不少东西。

那判断的标准是什么?完全就是自己的标准。自己说了算。自己说它对,它就是对;自己说它错,它就是错。

世上没有什么正确与错误。只看每个人自己的认识而已。

世界那么大,人口那么多,怎可能众口一词?

哪个当领导的,没有几个反对者?怎么做才能让所有的人都满意?很难很难。

grub4dos 是由 chenall 负责的,后来 chenall 又让 yaya 来共同维护。Roy 也参与维护了一阵子。其他也有很多人在帮助。

我很少参与,我不再管事了。只要你能以充分的理由让 chenall 他们同意你的意见,你就可以实施你的修改方案了。

万一 chenall 他们不同意,你还可以建立自己的项目,自己来管理。

世界的自由度还是蛮大的。


grub4dos 这个项目,说实在话,我一开始就没打算开启它。我给 gnu grub 开发者提交补丁,不被采纳,而且连回信都没有,我这才开始正式着手做。

现在想想,那是缘分不到,没啥稀奇的。gnu grub 当时也正处于即将转向 grub2 的节骨眼上,所以他们可能对于继续改进和完善旧的 grub 版本没有兴趣了。还有一个原因可能是我写的代码,不符合 gnu grub 对排版格式的严格要求,再加上其它一些我猜不透的原因,人家拒绝了。一句话来概括,没缘分。

刚开始的时候,是只在 grub.exe 格式上进行改进完善。所以它叫做 grub for dos。后来逐渐深入到 grub 的内核里面,哎哟!发现了一大堆不如意的东西,砍啊,杀呀,被我清理掉好多。今天看到的 grub4dos,是经过了很大手术的(除了我以外,其他几位维护者也在内核中动了手术),是对原来的 grub legacy 的巨大翻修的结果。我不敢说,我的每一项改动都是合理的。世上没有合理性,只有缘分。缘分是那样的,它就是那样的。由谁去改它?改成什么样?众人是否喜欢和接受?林林总总,这统统都是缘分。有缘分能做成一件事,没缘分做不成一件事。正确的东西,不一定能成为现实,因为连正确性都是相对的。一个正确的人遇到一个错误的人,究竟谁才是真正正确的?是不是要打一架,谁打胜了,谁就是正确的?我相信,就连这句话,都存在不同的看法。有人认为对,有人认为错。还可能有人认为不对也不错。也可能有人认为这问题没有意义,无从谈起对和错,因为前提中正确的人和错误的人,就没有个绝对的标准可以确定。

一个团队,一个论坛,一个社会,还要讲求合作。不能光讲技术,不讲合作。没有技术是不行的。光有技术也是不行的。光讲合作也不行,有时候就需要有竞争、有分歧,在竞争和分歧中促发展。我在自己的人生旅途中,并不擅长与人打交道,我喜欢理科,不喜欢文科。理科是直来直去,答案比较简单。文科很复杂,涉及的知识面太广。所以每当遇到与人打交道的事,我就本能地躲避,或抵触。这样我就越来越与人疏远,形成自闭、内向的性格特征。所以也就不懂合作的道理,也就不会合作。由于理科较好,所以自信、偏激,总认为自己的判断是对的。老师的多次表扬,也助涨了自己的自信和自傲,习惯于以自我为中心,不能听进反对的意见。这在 grub4dos 早期的论坛上,大家可能都看得很清楚。后来我有了不少改进,但骨子里固有的顽疾,也不可能彻底消除,人就是个不完美的动物。我回顾早期,我是只讲技术,不讲合作。其实也就不懂合作,没有意识到世界上还有 “合作”这回事。后来能够意识到世上有合作这回事,并且逐渐知道了,这合作比技术还重要。climbing 就直言不讳地批评我伤害了 bean,我当时并不认识这一点,但后来还是逐渐采信了 climbing 的说法。人与人之间,需要合作。人与人之间肯定会有不同的认识和分歧。如果总是以自我为中心,那就会在发生分歧时总把别人判为错误的。那本质上就是不懂合作,因而也就无法真正做到尊重别人。当发生分歧时,如何处理,这太重要了。处理不好的话,就会把项目搞砸了,把团结搞砸了,把技术也搞砸了。人不可以缺乏自信,但也不可以过分自信。过分自信,容易形成自我中心,容易排斥团队中的其他成员,严重时,也容易产生自傲。

算了,不再多说。喜欢听的人,或许不在乎说多了。不喜欢听的人,可能会厌烦,可能觉得这是在显摆、卖弄或教训人。就此打住,不再废话。



回复

使用道具 举报

1088#
发表于 2015-12-30 10:48:56 | 只看该作者
我觉得目前的设定挺方便的呀,一般情况都都是通过MENU.LST来定位启动需要的文件

想要保存实际的启动设备可以在内置菜单中添加一个变量比如
set boot=%@boot%保存起来.
回复

使用道具 举报

1089#
发表于 2015-12-30 11:46:12 | 只看该作者
不点 发表于 2015-11-18 11:41
GRUB4DOS 没有硬盘驱动,全都是使用 BIOS 来访问硬盘。

而 BIOS 根本不知道硬盘是什么类型:不知道 ...


这段话不太严谨。

BIOS当然知道硬盘是什么类型,知道是 USB 设备还是 别的什么设备。
BIOS的USB设备驱动、USB-HDD的确定,其源代码用A4纸打印,有几十页之多。

我想,不点的原意,应是 BIOS (提供给G4D等软件使用的) INT13服务,屏蔽了
(USB/IDE...之类的)细节,具有统一的调用界面,都是用盘号来访问。



点评

没错,就是这个意思。 BIOS 提供的信息可能很多,但我们不一定能够调用这些 bios 功能。 因为有些机器不遵守 bios 的调用规范,所以我们不敢调用那些功能。我们只限定那些安全的功能调用。譬如说只限定 int13/  详情 回复 发表于 2015-12-30 12:10
回复

使用道具 举报

1090#
发表于 2015-12-30 12:10:06 | 只看该作者
wuwuzz 发表于 2015-12-30 11:46
这段话不太严谨。

BIOS当然知道硬盘是什么类型,知道是 USB 设备还是 别的什么设备。

没错,就是这个意思。

BIOS 提供的信息可能很多,但我们不一定能够调用这些 bios 功能。

因为有些机器不遵守 bios 的调用规范,所以我们不敢调用那些功能。我们只限定那些安全的功能调用。譬如说只限定 int13/ah=02、03、42h、43h 和另外几个功能调用(即 AH=41h、AX=4B01h 等),其他功能都不敢随便调用。有报告说 int13/ah=48h 产生死机。int13/ah=00 也产生过死机。int13/ah=08 返回的磁盘参数是不可靠的(就是“错误的”),所以这个功能调用是没用的。

点评

谈点看法: 1、通过限定调用、隔离问题保安全的思路,想法很好,但BIOS(USB内部处理)并不一定能如人所愿。 原因:BIOS内部是整体一次性处理,会提前算好一些重要参数(不管将来是否能用到)----如: CHS、最大LB  详情 回复 发表于 2015-12-30 18:17
回复

使用道具 举报

1091#
发表于 2015-12-30 18:17:26 | 只看该作者
不点 发表于 2015-12-30 12:10
没错,就是这个意思。

BIOS 提供的信息可能很多,但我们不一定能够调用这些 bios 功能。

谈点看法:

1、通过限定调用、隔离问题保安全的思路,想法很好,但BIOS(USB内部处理)并不一定能如人所愿。

原因:BIOS内部是整体一次性处理,会提前算好一些重要参数(不管将来是否能用到)----如:
CHS、最大LBA(总扇区数)。这些参数,按说是BIOS为08/48准备的,但02/03/42/43也将用到。

ah=02/03的输入参数将被换算为LBA地址,然后再读写,先前准备的HS将在本换算过程中发挥作用;
先前准备的最大LBA(总扇区数),将被42/43用来做扇区越界检查。

2、更进一步延伸。我原以为UEFI环境下能摆脱CHS问题,但通过学习源码,我发现错了:UEFI和BIOS一样,
依然需要计算最大LBA,而计算最大LBA的方法之一,就是C*H*S。
==================================================================

另,通报一下可能会有兴趣的内容:AMI UEFI_BIOS有MBR/PBR处理代码段,
会校验分区表和引导记录合法性,检查结果将作为U盘设定为HDD还是FDD的参考之一。
会检查:

55AA标志;
4个分区表项内容是否全为0;
引导标志0x0或0x80;
寻找"MSDO、MSWI、NTF、FAT、FAT3"等签名字串,确定是合法的引导记录,然后抽取HS。
C=最大LBA/(H*S)。
回复

使用道具 举报

1092#
发表于 2015-12-31 02:03:04 | 只看该作者
有两个问题,1:如图,%~f0 貌似不正确





2:我用FBT建了一个尾续文件,这个命令是否正确?  map --mem %~m0/uniata.img (fd0)
     如图提示报错,FBT是这里下载的最新版:http://bbs.wuyou.net/forum.php?m ... &fromuid=378114

test.7z

95.9 KB, 下载次数: 1

点评

请试试刚刚上传的修正版本.  详情 回复 发表于 2015-12-31 16:09
回复

使用道具 举报

1093#
发表于 2015-12-31 04:26:14 | 只看该作者
第一个图片显示的是一个明显的低级错误:文件名错误,少了开头的斜杠,应该为

map --mem /a.bat  (rd)

点评

我找到原因了,是由于新版本的调整导致的. 我看了下,考虑重新调整一下PSP的结构以方便使用. 目前的外部命令基本上都没有使用PSP信息,所以内部调整应该没有什么影响. 之前的PSP像文件名等位置是相对于PROGRAM  详情 回复 发表于 2015-12-31 11:40
%~f0 应该是绝对路径吧? 按道理应该这样才正确:map --mem (cd)/a.bat (rd)  详情 回复 发表于 2015-12-31 08:54
回复

使用道具 举报

1094#
发表于 2015-12-31 08:54:02 | 只看该作者
不点 发表于 2015-12-31 04:26
第一个图片显示的是一个明显的低级错误:文件名错误,少了开头的斜杠,应该为

map --mem /a.bat  (rd)


%~f0 应该是绝对路径吧? 按道理应该这样才正确:map --mem (cd)/a.bat  (rd)

点评

估计是新版本的BUG,你可以先试试旧版本的看看,我查一下源看看看.  详情 回复 发表于 2015-12-31 10:25
回复

使用道具 举报

1095#
发表于 2015-12-31 10:25:19 | 只看该作者
%~f0 应该是绝对路径吧? 按道理应该这样才正确:map --mem (cd)/a.bat  (rd)


估计是新版本的BUG,你可以先试试旧版本的,我查一下源看看看.
回复

使用道具 举报

1096#
发表于 2015-12-31 11:40:20 | 只看该作者
不点 发表于 2015-12-31 04:26
第一个图片显示的是一个明显的低级错误:文件名错误,少了开头的斜杠,应该为

map --mem /a.bat  (rd)

我找到原因了,是由于新版本的调整导致的.

我看了下,考虑重新调整一下PSP的结构以方便使用.

目前的外部命令基本上都没有使用PSP信息,所以内部调整应该没有什么影响.

之前的PSP像文件名等位置是相对于PROGRAM的,我打算调整一下改成基于psp的这样可能会比较方便使用.

点评

非常好。 是我不熟悉批处理,理解不到位,所以没能考虑到新格式对批处理的影响。  详情 回复 发表于 2015-12-31 11:48
回复

使用道具 举报

1097#
发表于 2015-12-31 11:48:33 | 只看该作者
chenall 发表于 2015-12-31 11:40
我找到原因了,是由于新版本的调整导致的.

我看了下,考虑重新调整一下PSP的结构以方便使用.

非常好。

是我不熟悉批处理,理解不到位,所以没能考虑到新格式对批处理的影响。

回复

使用道具 举报

1098#
发表于 2015-12-31 16:09:58 | 只看该作者
527104427 发表于 2015-12-31 02:03
有两个问题,1:如图,%~f0 貌似不正确

请试试刚刚上传的修正版本.

点评

可以了。。 不知道第二个问题的用法对不对? map --mem %~m0/uniata.img (fd0)  详情 回复 发表于 2015-12-31 16:23
回复

使用道具 举报

1099#
发表于 2015-12-31 16:23:49 | 只看该作者
chenall 发表于 2015-12-31 16:09
请试试刚刚上传的修正版本.

可以了。。

不知道第二个问题的用法对不对?
map --mem %~m0/uniata.img (fd0)

点评

是可以的,你可以试一下.  详情 回复 发表于 2015-12-31 19:35
回复

使用道具 举报

1100#
发表于 2015-12-31 19:35:08 | 只看该作者
527104427 发表于 2015-12-31 16:23
可以了。。

不知道第二个问题的用法对不对?

是可以的,你可以试一下.

点评

看来5大有新动作了。既然uniata既通用又体积小,能不能内置?这样SRSF6缺少外置驱动时也能独立工作。  详情 回复 发表于 2015-12-31 23:39
回复

使用道具 举报

1101#
发表于 2015-12-31 23:39:59 | 只看该作者
chenall 发表于 2015-12-31 19:35
是可以的,你可以试一下.
不知道第二个问题的用法对不对?
map --mem %~m0/uniata.img (fd0)

看来5大有新动作了。既然uniata既通用又体积小,能不能内置?这样SRSF6缺少外置驱动时也能独立工作。
回复

使用道具 举报

1102#
发表于 2016-4-12 08:39:19 | 只看该作者
如图 (3)内存盘的地址 会自动跑.



我想 把他固定在前面那个小的地址上, 请问怎么做?

点评

使用--mem参数即可。 map --mem=0x2fff0 /path (3) 不过需要注意的是你必须自己确定该处的可用空间足够放得下。  详情 回复 发表于 2016-4-12 09:01
回复

使用道具 举报

1103#
发表于 2016-4-12 09:01:17 | 只看该作者
mdyblog 发表于 2016-4-12 08:39
如图 (3)内存盘的地址 会自动跑.

使用--mem参数即可。
map --mem=0x2fff0 /path (3)

不过需要注意的是你必须自己确定该处的可用空间足够放得下。

点评

谢谢! 如图, 这个会把600M 耗到尾. 开600M内存.  详情 回复 发表于 2016-4-12 09:27
回复

使用道具 举报

1104#
发表于 2016-4-12 09:27:08 | 只看该作者
本帖最后由 mdyblog 于 2016-4-12 09:32 编辑
chenall 发表于 2016-4-12 09:01
使用--mem参数即可。
map --mem=0x2fff0 /path (3)


谢谢!
如图, 这个会把600M 耗到尾.后面程序没有内存可用了.


测试FBA: memd.fba.rar (158 KB, 下载次数: 0)
开600M内存.

点评

map --mem=XXX 的意思,本来就是把 XXX 之后的内存(直到这个内存块结尾处)都作为这个内存盘的扇区数据空间。  详情 回复 发表于 2016-4-12 09:47
回复

使用道具 举报

1105#
发表于 2016-4-12 09:47:32 | 只看该作者
mdyblog 发表于 2016-4-12 09:27
谢谢!
如图, 这个会把600M 耗到尾.后面程序没有内存可用了.

map --mem=XXX 的意思,本来就是把 XXX 之后的内存(直到这个内存块结尾处)都作为这个内存盘的扇区数据空间。

点评

那么 我想 把内存块 (md)0x2fff0+4096 或附近 (反正地址不超过200M即可) 申请一个内存盘, 且地址固定,不要乱跑, 怎么做呢?  详情 回复 发表于 2016-4-12 10:10
回复

使用道具 举报

1106#
发表于 2016-4-12 10:10:36 | 只看该作者
本帖最后由 mdyblog 于 2016-4-12 10:12 编辑
不点 发表于 2016-4-12 09:47
map --mem=XXX 的意思,本来就是把 XXX 之后的内存(直到这个内存块结尾处)都作为这个内存盘的扇区数据 ...


那么 我想  把内存块 (md)0x2fff0+4096 或附近  (反正地址不超过200MB即可) 申请一个内存盘, 且地址固定,不要乱跑,且后面的内存还能用, 怎么做呢?
回复

使用道具 举报

1107#
发表于 2016-4-12 10:19:17 | 只看该作者
这要看你的用途了。只有你自己清楚该怎么做。

这个内存盘究竟是要在 grub4dos 范围内使用呢?还是要在 DOS、Windows 中使用?

如果是前者,你不需要虚拟盘(即无需挂上 int13),你只需要调整好 rd 的起始地址和长度即可。

如果是后者,你必须使用虚拟盘(挂上 int13)。目前的 grub4dos 不支持从一个内存块中间截取某一段内存当作内存盘,只能把某个内存块的尾部一整块都当作内存盘。就是说,你的特殊要求,做不到。
回复

使用道具 举报

1108#
发表于 2016-4-13 18:38:32 | 只看该作者

请问 mem64是25好还是74.2个地方不一样.
头文件:
#define mem64 ((int (*)(int, unsigned long long, unsigned long long, unsigned long long))((*(int **)0x8300)[25]))


CHM:


点评

从 asm.S 结尾的代码可以知道,25 已经废除了,改用 74。 头文件可能没有调整过来。你向 chenall 报告 bug。  详情 回复 发表于 2016-4-13 18:48
回复

使用道具 举报

1109#
发表于 2016-4-13 18:48:13 | 只看该作者
mdyblog 发表于 2016-4-13 18:38
请问 mem64是25好还是74.2个地方不一样.
头文件:
#define mem64 ((int (*)(int, unsigned  ...

从 asm.S 结尾的代码可以知道,25 已经废除了,改用 74。

头文件可能没有调整过来。你向 chenall 报告 bug。

点评

谢谢!  详情 回复 发表于 2016-4-13 18:56
回复

使用道具 举报

1110#
发表于 2016-4-13 18:56:52 | 只看该作者
不点 发表于 2016-4-13 18:48
从 asm.S 结尾的代码可以知道,25 已经废除了,改用 74。

头文件可能没有调整过来。你向 chenall 报告 ...

谢谢!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-23 00:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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