无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 205193|回复: 1259
打印 上一主题 下一主题

支持含有碎片的文件仿真

    [复制链接]
跳转到指定楼层
1#
发表于 2014-3-19 11:08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2011yaya2007777 于 2015-5-17 11:26 编辑

支持含有碎片的文件仿真。最多 32 段碎片。
不加载光驱时,占用 11 Kb 内存。加载光驱时,占用 13 Kb 内存。

同时更该了 usb2.0 驱动设备枚举代码。完善了驱动器号识别。驻留内存精简到 4 Kb。
支持WinXP及后续系统的短文件名大小写。根据短文件名结构偏移0C处:位3=1表示文件名小写,位4=1表示文件扩展名小写。

修正了 udf 格式光盘驱动 bug。

目前已经解决 XP 启动蓝屏,加载 0PE 失败的问题。与 grub4dos 0.4.5c 及旧版 grub4dos 0.4.6a 完全兼容,可以正确地卸载或合并映射插槽。若全部采用新版,则可传递碎片信息。

ntfs 文件系统支持 8Kb 以内的非常驻属性列表。
完善了 iso9600_Joliet 文件格式的识别问题,应对 mkisofs2.01 产生的 bug。

修正了iso9600_Joliet 文件格式转义符显示问题。
增加了更新说明。

支持 16 插槽映射。

ext4 分区支持 64 位功能,支持元块组。
grldr头部、grldr.mbr 支持搜索 gpt 分区的 grldr。
修正了 bootlace,修正了 find。

使用 bootlace.com 安装 grldr.mbr 到 gpt 分区类型的设备。

内置 usb2.0 可以驱动原生4k扇区磁盘。
改进 NTFS 文件系统:
        对于驻留属性文件(小文件),可以写,也可用 blocklist 显示信息。
        对于非驻留属性列表,取消长度限制。

下载地址
http://grub4dos.chenall.net/

加载 usb 驱动失败,反馈失败信息专用 grldr 下载地址
http://bbs.wuyou.net/forum.php?mod=attachment&aid=MjExNjY3fDg2YzRiMmZmfDE3MzI1NjI0MjF8MHw%3D

评分

参与人数 14无忧币 +70 收起 理由
netmjwork + 5 很给力!
2013dqcmjx + 5 很给力!
zhczf + 5 赞一个!
糊涂 + 5 很给力!
2012wuyuvl + 5 很给力!
v5720949 + 5
shan + 5 赞一个!
jdcgzb + 5 很给力!
smine + 5 坚决支持!
xyzxp + 5 就是给力,辛苦了!
yang77 + 5 真的很赞!
阿弥陀佛 + 5 很给力!
3ax31a + 5 很给力!
carbonjiao + 5 很给力!

查看全部评分

推荐
发表于 2014-6-10 11:14:41 | 只看该作者
2011yaya2007777 发表于 2014-6-6 06:40
以前 fsys_ntfs.c 占用内存 3e0000-3e5fff;现在占用 3e0000-3ebfff。
死机的原因应当是加载 G4D 之后,加 ...

小心点,有可能是你多占用的内存所导致的内存冲突。grub4dos 的内存占用比较乱,没有仔细归纳总结,很容易自己就产生冲突。
回复

使用道具 举报

推荐
 楼主| 发表于 2014-6-24 20:39:24 | 只看该作者
onboot.lst 里面就是 git-1.6.tcz 。

另外,在根目录,似乎下载了,但是找不到。
dev@grub4dos_dev:~$  git clone git://gitcafe.com/chenall/grub4dos.git
Initialized empty Git repository in /home/dev/grub4dos/.git/
remote: Counting objects: 2832, done.
remote: Compressing objects: 100% (576/576), done.
remote: Total 2832 (delta 2250), reused 2832 (delta 2250)
Receiving objects: 100% (2832/2832), 2.16 MiB | 334 KiB/s, done.
Resolving deltas: 100% (2250/2250), done.

dev@grub4dos_dev:~$ ls /home/dev/grub4dos/.git/
branches/    description  hooks/       info/        objects/     refs/
config       HEAD         index        logs/        packed-refs

点评

colinux编译环境只有在COFS目录下的文件才可以在WINDOWS中找到,其它的只能在linux下看到. 我这里是正常的,我明天再下载那个开发环境包测试下.  详情 回复 发表于 2014-6-24 23:17
回复

使用道具 举报

推荐
发表于 2017-8-26 16:20:56 | 只看该作者
我感觉,既然 mdyblog 测试 asm.S.new 成功,那就证实了我前面的猜测。于是我们就又摸清楚了 Windows 的一个 “脾气”,即,Windows 不喜欢存在 “长度为 0”的内存块。一旦存在这样的内存块,Windows 就“乱了阵脚”或 “找不到北”了。

当一个内存块被(一个或多个)内存盘占据时,剩余未被占据的部分,如果恰好是 0(也即正好全部被内存盘占满),这是旧版本的 grub4dos 处理不好(无法处理)的情况。旧版本的 grub4dos 用 int15 来返回 0 的可用内存块长度给 int15 的调用者(比如操作系统)。Windows 遇上这个 0 长度的内存块,彻底乱套,拒绝继续启动。

我的解决办法是:当这种情况发生时,不修改这个可用内存块(usable RAM)的长度,即,保持这个内存块长度不变,而把它的 type(类型) 从 “usable RAM(用户可用)”更改成 “reserved(系统保留,用户不可用)”。这就完美解决了。

错误的技术根源猜测。我猜 Windows
(有可能)把长度为 0 的内存块当成长度为 4G(=2 的 32 次方) 来处理了,也有可能是当作 2 的 64 次方来处理了,于是就全乱了。大家很熟悉:在二进制表示中,负1(即 “-1”) 与最大的数是相同的,而“最大的数”再加上 1,就等于 0。所以,在 long 整数(即 32 位整数)中,0 和 4G 是一样的(4G 就是 2 的 32 次方)。在 long long 整数(即 64 位整数)中,0 就等于 2 的 64 次方(可以粗略理解为 “无限大”)。

换句话说,Windows 的实模式启动代码把长度为 0 的内存块(有可能)当成长度为“无限大”来处理了。那么,由于 Windows 认为整个内存全部被(这个内存块)占用,完全没有可用内存了。于是,Windows 就认为内存不够了。因此,它就要报错,并且拒绝继续启动 Windows 的内核。


回复

使用道具 举报

推荐
发表于 2015-2-17 14:54:00 | 只看该作者
sunsea 发表于 2015-2-17 13:10
我就是找了一个移动硬盘,往里面部署multimbr(32G),0PE,一堆合盘和一个USBXP,占了10G多,然后故意 ...

1: 你是说,没加 usb --init 就不能正常启动, 加了就能正常启动,是吗?


2:移动硬盘本身是支持LBA的。也就是说硬件接口本身有这个能力。
你这里 是“认”成fdd 0x00, 从用CHS访问。
但是 usb --init ,会不会有把它变回hdd,从而能用硬件的LBA接口。

现在,怎确认是 用的硬件本身的LBA访问接口,还是usb -init直接通过 sici总线命令、U盘协议直接访问?

看来还得问问C大了。



点评

这件事问yaya更好,这个功能是他写的  发表于 2015-2-17 17:36
1:是的 2:所有USB存储设备内部寻址都是LBA,其他我不知道  详情 回复 发表于 2015-2-17 17:34
回复

使用道具 举报

推荐
发表于 2015-2-28 11:29:36 | 只看该作者
本帖最后由 mdyblog 于 2015-2-28 15:43 编辑

反应个现象,不知算不算BUG。
如果对U盘启动的ud 执行 geometry --lba1sector
后面读盘就死翘翘了。
先确认hd启动,不是fd。

  1. geometry --lba1sector (128)
  2. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就死翘翘了。


没有geometry --lba1sector
  1. dd  if=(128)0+1  of=(md)0x200+1
复制代码

就没问题。


Ver: grub4dos-0.4.6a-2015-01-18.7z

实例fba: 2015-0118.fba.zip (165.92 KB, 下载次数: 15)

qemu  模拟器中没问题。
实际U盘,在我的新旧2台机器上都是  死翘翘 。--------------急
回复

使用道具 举报

推荐
发表于 2015-2-27 09:01:51 | 只看该作者
mdyblog 发表于 2015-2-27 07:28
>>假如能够把这个问题做好,达到两全其美,那也是好事。
-------------------
我分析了下。 应该可以 ...


随便说说一点看法,供参考。

你可以自己打补丁,提交给 chenall。chenall 接到补丁后,可以先测试一段时间,如果放心,就会正式采纳。chenall 甚至也有可能为你单独开辟一个系列,就像以前为 yaya 单独开辟一个系列那样,进行长期的测试和评估。一旦成熟,大家自然会全面采用你的版本。

如果你自己不愿意做或者没时间做,可以等待别人去做。可以说服开发团队成员去按照你的思路完成任务。如果开发团队成员由于种种原因做不了,那你可以在团队之外寻求高手支持,完成开发任务。

回复

使用道具 举报

推荐
发表于 2015-2-25 20:40:17 | 只看该作者
从 ud 盘启动时,ud 可以访问。如果转而启动另一个 grldr,则已经不是从 ud 盘启动了,而是相当于从 bios 直接启动了某个引导扇区,不是从 ud 启动,也不是从光盘启动,此时 ud 是不能访问的。

解决办法:不要在 grub 环境又启动一个新的 grub 环境,丧失原来的 ud 访问能力。

点评

1) 我要的不是原因,也不是原理,也不是“理念”。 而是适用的解决方案。 2) 解决办法:不要在 grub 环境又启动一个新的 grub 环境,丧失原来的 ud 访问能力。 这个是无法保证的。 MBROSTool格式化的 UD盘,  详情 回复 发表于 2015-2-25 21:22
回复

使用道具 举报

推荐
发表于 2014-7-26 19:16:49 | 只看该作者
估计是你搞错了,造成莫名其妙的错觉。

你可以看看 asm.S 开头的那些变量,尤其是 install_partition 和 boot_drive 变量。

传入的 DL 的值会被 0000:8200 处的代码自动存入到 boot_drive 变量中。

但 DH 值不会被自动存入 install_partition 的位 16 - 位 24 的字节上,你必须在传递控制之前修改好,即,你需要自己把 DH 的值存入 install_partition 的位 16 - 位 24 的字节上,然后再把控制转移到 0000:8200 处的代码。

同时,如果 0000:7C00 处含有合法的 BPB 引导扇区,则 grub4dos 有可能会利用这个 BPB 表来确定启动盘的信息。

就是说,在传递控制之前,如果能保证 0000:7C00 处含有某个主分区的引导扇区(或者碰巧是这样),则这个主分区就可能被 grub4dos 当作 boot 设备(以及当前 root 设备)。



点评

你是说这些变量需要初始化,是吗? 0000:8208 4字节(即双字) 启动分区号 install_partition (the boot partition) 0000:8280 4字节(即双字) 启动驱动器号(boot_drive) 0000:829C 4字节(即双字) 当前  详情 回复 发表于 2014-8-22 18:05
回复

使用道具 举报

推荐
发表于 2014-7-11 10:35:02 | 只看该作者
2011yaya2007777 发表于 2014-7-11 10:26
还想问一下,执行同步(更新)代码功能,保持和主项目代码一致。
        cd grub4dos
        git fetch grub4dos

这个同步只是更新了本地库.

你还需要再git push推送一下https://github.com/yaya2007才会更新.

点评

新版在XP下不能编译了,grub4dos_dev_2014-06-25 + grub4dos-0.4.5c-2014-07-11源码 不管 grub4dos 放在colinux/还是grub4dos_dev/g4d_dev/home/dev/都报错  详情 回复 发表于 2014-7-16 09:53
回复

使用道具 举报

推荐
 楼主| 发表于 2014-7-11 10:26:28 | 只看该作者
还想问一下,执行同步(更新)代码功能,保持和主项目代码一致。
        cd grub4dos
        git fetch grub4dos
        git rebase grub4dos/0.4.6
后,是更新了我在https://github.com/yaya2007的分支库,还是更新了本地grub4dos源文件,还是2者都更新了?

哦,看到本地grub4dos源文件更新了,似乎https://github.com/yaya2007没有更新。

点评

这个同步只是更新了本地库. 你还需要再git push推送一下https://github.com/yaya2007才会更新.  详情 回复 发表于 2014-7-11 10:35
回复

使用道具 举报

12#
发表于 2014-3-19 12:33:31 | 只看该作者
本帖最后由 jack95 于 2014-3-19 12:50 编辑

有没有办法判定文件的碎片是否大于8块?


测试成功,很不错,要是能支持80段碎片就更好了
回复

使用道具 举报

13#
发表于 2014-3-19 13:58:16 | 只看该作者
很好很方便的功能扩充!下载测试中...
回复

使用道具 举报

14#
发表于 2014-3-19 14:07:14 来自手机 | 只看该作者
这个功能想都想到梦里去了,顶一个,为yaya点个赞。
回复

使用道具 举报

15#
发表于 2014-3-19 14:08:27 来自手机 | 只看该作者
为yaya点个赞!
回复

使用道具 举报

16#
发表于 2014-3-19 14:26:47 | 只看该作者
本帖最后由 2012idle 于 2014-3-19 14:30 编辑

一台明基电脑主板是p4m890t-m2,usb --init 提示 usb 设备未就绪。用 金士顿 dt101  16G U 盘
----------------
更新 使用 usb --delay=3找到 usb 。加载镜像以小段后自动重启
回复

使用道具 举报

17#
发表于 2014-3-19 20:39:20 | 只看该作者
本帖最后由 tpss12 于 2014-3-20 10:53 编辑

對不起yaya, 是本人犯了一個嚴重錯誤,指令少打了一個 \ 所致,可正常 ls本機硬碟!
回复

使用道具 举报

18#
 楼主| 发表于 2014-3-19 21:16:58 | 只看该作者
加载镜像以小段后自动重启

可能负载不足,u盘插倒后置端口。

以此版從u盤啟動grldr,發現無法 ls本機硬碟,

本機硬碟被BIOS分配什么号?find 什么结果?cat 什么结果?

点评

對不起yaya, 是本人犯了一個嚴重錯誤,指令少打了一個 \ 所致,可正常 ls本機硬碟!  详情 回复 发表于 2014-3-20 10:54
是后置 USB 口  详情 回复 发表于 2014-3-20 10:41
回复

使用道具 举报

19#
发表于 2014-3-20 00:05:06 来自手机 | 只看该作者
华硕 f8v 方法都试了都是提示未找到 usb 设备请尝试重启(已重启多次)
回复

使用道具 举报

20#
发表于 2014-3-20 09:47:50 | 只看该作者
支持一个,希望以后更好!
回复

使用道具 举报

21#
发表于 2014-3-20 10:41:25 | 只看该作者
2011yaya2007777 发表于 2014-3-19 21:16
可能负载不足,u盘插倒后置端口。

是后置 USB 口
回复

使用道具 举报

22#
发表于 2014-3-20 10:54:23 | 只看该作者
2011yaya2007777 发表于 2014-3-19 21:16
可能负载不足,u盘插倒后置端口。

對不起yaya, 是本人犯了一個嚴重錯誤,指令少打了一個 \ 所致,可正常 ls本機硬碟!
回复

使用道具 举报

23#
 楼主| 发表于 2014-3-20 13:17:40 | 只看该作者
华硕 f8v 方法都试了都是提示未找到 usb 设备请尝试重启(已重启多次)

1. 华硕 f8v 是否支持 usb3.0 设备?即有没有 usb3.0 插孔?
2. 测试时是否插入 usb2.0 设备?
3. 测试时是否还插入 usb3.0 设备?

点评

那是09 年的笔记本,只有 usb 2.0 口,测试时就只插入那个 U 盘  详情 回复 发表于 2014-3-20 13:51
回复

使用道具 举报

24#
发表于 2014-3-20 13:49:23 | 只看该作者
firadisk不支持碎片的化,ramos还是不能使用碎片img和vhd.

点评

firadisk最近看来有待更新了,按理firadisk支持碎片化更加容易的。 另外,firadisk也不支持win 8.1  详情 回复 发表于 2014-3-28 23:08
回复

使用道具 举报

25#
发表于 2014-3-20 13:51:34 | 只看该作者
2011yaya2007777 发表于 2014-3-20 13:17
1. 华硕 f8v 是否支持 usb3.0 设备?即有没有 usb3.0 插孔?
2. 测试时是否插入 usb2.0 设备?
3. 测试 ...

那是09 年的笔记本,只有 usb 2.0 口,测试时就只插入那个 U 盘
回复

使用道具 举报

26#
 楼主| 发表于 2014-3-20 21:59:08 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-3-27 15:16 编辑

请 2012idle 测试。
在命令行执行: usb --init
显示一部分信息后暂停,截图后按任意键继续.
最后进入死循环。

点评

明基那个台式结果。华硕 F8V 现在不在我手上,要改天才能测试  详情 回复 发表于 2014-3-21 10:12
回复

使用道具 举报

27#
发表于 2014-3-21 10:12:41 | 只看该作者
2011yaya2007777 发表于 2014-3-20 21:59
请 2012idle 测试。
在命令行执行: usb --init
显示信息后进入死循环。

明基那个台式结果。华硕 F8V 现在不在我手上,要改天才能测试

DSC_0068.gif (1.36 MB, 下载次数: 494)

DSC_0068.gif
回复

使用道具 举报

28#
发表于 2014-3-21 10:43:58 来自手机 | 只看该作者
感谢更新,辛苦了
回复

使用道具 举报

29#
 楼主| 发表于 2014-3-21 15:35:10 | 只看该作者
明基那个台式结果。

从照片看,产品ID为1642的u盘已经被正确识别。
测试华硕 F8V 时,请重新从16楼下载。

点评

不用 usb --init 可以正常启动就是非常慢。使用后从加载的那小段镜像看提速很明显,就是 2 秒不到就重启了。现在那台机器客户已经拿走,无法继续测试。F8V 的,我尽快找时间去测试一下。  详情 回复 发表于 2014-3-21 16:37
回复

使用道具 举报

30#
发表于 2014-3-21 16:37:45 | 只看该作者
2011yaya2007777 发表于 2014-3-21 15:35
从照片看,产品ID为1642的u盘已经被正确识别。
测试华硕 F8V 时,请重新从16楼下载。

不用 usb --init 可以正常启动就是非常慢。使用后从加载的那小段镜像看提速很明显,就是 2 秒不到就重启了。现在那台机器客户已经拿走,无法继续测试。F8V 的,我尽快找时间去测试一下。
回复

使用道具 举报

31#
发表于 2014-3-21 17:28:19 | 只看该作者
本帖最后由 2012idle 于 2014-3-21 17:31 编辑

另外发现用这版本在 富士康 45cm-s 主板上加载 WES7SP1_32_64_CN.iso (6个碎片)启动到一半提示 adp94xx.sys 0xc000098,没有碎片的文件不会。需要提供什么具体的信息?
回复

使用道具 举报

32#
 楼主| 发表于 2014-3-21 19:59:37 | 只看该作者
加载 WES7SP1_32_64_CN.iso
map --hook之后,read 0x413,将值乘以2,然后以此值截图1扇区
cat --hex (md)0x计算值+1

点评

喂拍到的都是 000  详情 回复 发表于 2014-3-22 12:42
回复

使用道具 举报

33#
发表于 2014-3-22 12:42:04 | 只看该作者
2011yaya2007777 发表于 2014-3-21 19:59
加载 WES7SP1_32_64_CN.iso
map --hook之后,read 0x413,将值乘以2,然后以此值截图1扇区
cat --hex (m ...


未拍到的都是 000

DSC_0074.gif (1.44 MB, 下载次数: 516)

DSC_0074.gif
回复

使用道具 举报

34#
发表于 2014-3-22 13:26:53 | 只看该作者
正常可用的

DSC_0079 (2).gif (1.4 MB, 下载次数: 494)

DSC_0079 (2).gif
回复

使用道具 举报

35#
发表于 2014-3-22 13:34:25 | 只看该作者
用一楼的的 grldr 引导 mhdd.iso (官方 iso 镜像)出现

QQ截图20140322133214.png (1.27 KB, 下载次数: 524)

QQ截图20140322133214.png
回复

使用道具 举报

36#
发表于 2014-3-22 17:46:15 | 只看该作者
华硕 F8V 的结果

DSC_0088.GIF (1.29 MB, 下载次数: 533)

DSC_0088.GIF
回复

使用道具 举报

37#
 楼主| 发表于 2014-3-23 21:44:57 | 只看该作者
有一处 bug 已经排除,请从一楼重新下载。
请 2012idle 测试一下 21 楼及 25 楼的情况。

点评

21# 问题解决。25# 情况依旧 使用的 镜像如下  详情 回复 发表于 2014-3-24 09:48
回复

使用道具 举报

38#
 楼主| 发表于 2014-3-23 22:16:38 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-3-24 07:02 编辑

26楼不是预期结果。
请从16楼重新下载测试。若发生滚屏,请按暂停键。(有的是 PAUSE ,有的是 Fn + F12)
测试时,去除无关紧要的usb设备,仅保留键盘,鼠标,u盘。
回复

使用道具 举报

39#
发表于 2014-3-24 09:48:37 | 只看该作者
本帖最后由 2012idle 于 2014-3-24 09:51 编辑
2011yaya2007777 发表于 2014-3-23 21:44
有一处 bug 已经排除,请从一楼重新下载。
请 2012idle 测试一下 21 楼及 25 楼的情况。


21# 问题解决。25# 情况依旧,华硕 F8V 确实出现滚屏,速度很快,用原来的附件根本来不及暂停,这个我找个时间再去测
使用的 镜像如下

mhdd.7z

403.51 KB, 下载次数: 8

回复

使用道具 举报

40#
 楼主| 发表于 2014-3-24 22:00:44 | 只看该作者
25#问题已经解决.请从一楼下载.

点评

25# 问题未再出现。不过发现在某些主板下(如上面的富士康45cm-s 主板) usb -init 需要执行两次才可以,一次执行提示成功,但找不到文件。  详情 回复 发表于 2014-3-26 09:46
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 03:20

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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