无忧启动论坛

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

支持含有碎片的文件仿真

    [复制链接]
331#
发表于 2017-8-26 07:33:31 | 显示全部楼层
不点 发表于 2017-8-26 07:11
你的报告严肃、认真,很详细。可能是因为你是开发者吧,能抓住要害,而与一般的报告不同。那么,我的答复 ...

谢谢详细的回答!!!

没有特别的用法。 都是规范的用法。连 --top都不用(兼容的原因)。

5) 我重新做了个测试。
修改源码, 用2016.03.21的内存盘函数 map_func 替换 2017.06.25的map_func.编译后测试。

结果:
使用的内存地址和上面2016版的一样,NTLDT/2003也没有任何抱怨了, 能正常启动

点评

我个人不推荐你采用这样的办法。这会带来你意想不到的问题,有陷阱,你躲不过。 我建议你采取下面两种办法之一: 1、完全采用旧版,永不更新。 2、采用新版,你自己亲自修改代码,让搜索到第一个内存块(最  详情 回复 发表于 2017-8-26 08:10
回复

使用道具 举报

332#
发表于 2017-8-26 10:46:31 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 11:33 编辑
不点 发表于 2017-8-26 08:10
我个人不推荐你采用这样的办法。这会带来你意想不到的问题,有陷阱,你躲不过。

我建议你采取下面两 ...


明白了,谢谢!!!!

再反应个 usb加速的问题。 2016.03.21-0.46没问题2017.06.25-0.46 加速后读盘卡死

2017.06.25-0.46  效果图:


2016.03.21-0.46 效果图:
回复

使用道具 举报

333#
发表于 2017-8-26 11:29:20 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 11:30 编辑
2011yaya2007777 发表于 2017-8-26 09:51
我的猜测是:
(0x14)内存盘映射在 "Usable RAM: Base: 0xD6FFF000, Length: 0x1000",从而误导Windows XP在 ...

测试这个版本可以, NTLDR-2003没有任何抱怨,启动成功
displaymem 和map --status如下:

EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000 <===20160321
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000  <===20170826-测试版----本次测试版本
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000 <===20170625
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000 <===4G以上

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S

回复

使用道具 举报

334#
发表于 2017-8-26 12:18:28 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 12:21 编辑
2011yaya2007777 发表于 2017-8-26 08:23
你手动指定内存块到
Usable RAM: Base: 0x20200000, Length: 0x1FE00000

测试:
手动指定内存块到
Usable RAM: Base: 0x20200000, Length: 0x1FE00000
可以的。 NTLDR-2003没有任何抱怨,启动成功


下面是displaymem 和 map --status 信息
EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000  <====这里
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000001FFFF8 0000000000000008 M=S

回复

使用道具 举报

335#
发表于 2017-8-26 13:22:09 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 13:24 编辑
2011yaya2007777 发表于 2017-8-26 12:39
谢谢测试。问题解决。

还是你上面给为grldr (20170826测试版)
我又做了新测试, 这次NTLDR-2003抱怨低位内存不够----同前图。

你可能需要处理这种情况。
就是再分配一个大内存盘,将某一大块内存耗光。(整个系统4G小空闲内存还一大把)
其他一致。结果不能运行。

下面是displaymem 和map --status 信息。
map --mem=0x201000 (md)0x800+0x4A3C98 (100)

EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000 <===14在这里    <===01也在这里,在14前面 ,死磕--磕光你!
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S
01 FF FE 3F 83FF FE 7F 0000000000201000 00000000004A3C90 M=S  <====测试加的

回复

使用道具 举报

336#
发表于 2017-8-26 15:09:32 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 15:13 编辑
不点 发表于 2017-8-26 14:13
我猜不是那么回事。我的修复也弄好了,让 mdyblog 试试我的修复,看看成功不成功?

这里要说说怎么样 ...

这个补丁有效。 NTLDR-2003没有任何抱怨,启动正常。

displaymem 和 map --status如下:
EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006B7FF8 0000000000000008 M=S
回复

使用道具 举报

337#
发表于 2017-8-26 15:46:05 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 15:48 编辑
2011yaya2007777 发表于 2017-8-26 15:11
麻烦 mdyblog 再测试一下。不要吃光内存,而是留下小于512Kb,即496Kb。
map --mem=0x201000 (md)0x800+0x ...

还是你上面给为grldr (20170826测试版)
新测试, 这次NTLDR-2003抱怨低位内存不够----同前图。
就是再分配一个大内存盘,将某一大块内存耗光。(整个系统4G小空闲内存还一大把)
其他一致。结果不能运行。
map --mem=0x201000 (md)0x800+0x4A3C98 (100)

请继续看后面的测试。

下面是displaymem 和map --status 信息:
EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000 <===14在这里    <===100也在这里,在14前面
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 0000000000201000 00000000004A3C90 M=S  <====测试加的
怎么和前面的测试一样,耗光了????






哦,map应该是
map --mem=0x2013E0  (md)0x800+0x4A38B0  (100)
这次 NTLDR-2003没有任何抱怨,启动成功。
下面是displaymem 和map --status 信息:
EISA Memory BIOS Interface is present
Address Map BIOS Interface is present
Lower memory: 630K, Upper memory (to first chipset hole): 523264K
[Address Range Descriptor entries immediately follow (values are 64-bit)]
  Usable RAM: Base: 0x0, Length: 0x9D800
  Reserved: Base: 0x9D800, Length: 0x2800
  Reserved: Base: 0xE0000, Length: 0x20000
  Usable RAM: Base: 0x100000, Length: 0x1FF00000
  Reserved: Base: 0x20000000, Length: 0x200000
  Usable RAM: Base: 0x20200000, Length: 0x1FE00000
  Reserved: Base: 0x40000000, Length: 0x200000
  Usable RAM: Base: 0x40200000, Length: 0x94793000 <===14在这里    <===100也在这里,在14前面 <====100前面有496K空闲
  Reserved: Base: 0xD4993000, Length: 0x250B000
  Reserved: Base: 0xD6E9E000, Length: 0xF1000
  Reserved: Base: 0xD6F8F000, Length: 0x70000
  Usable RAM: Base: 0xD6FFF000, Length: 0x1000
  Reserved: Base: 0xD7000000, Length: 0x800000
  Reserved: Base: 0xD7800000, Length: 0x8200000
  Reserved: Base: 0xF8000000, Length: 0x4000000
  Reserved: Base: 0xFE800000, Length: 0x10000
  Reserved: Base: 0xFEC00000, Length: 0x1000
  Reserved: Base: 0xFED08000, Length: 0x1000
  Reserved: Base: 0xFED10000, Length: 0x8000
  Reserved: Base: 0xFED18000, Length: 0x1000
  Reserved: Base: 0xFED19000, Length: 0x1000
  Reserved: Base: 0xFED1C000, Length: 0x4000
  Reserved: Base: 0xFEE00000, Length: 0x1000
  Reserved: Base: 0xFFD80000, Length: 0x280000
  Usable RAM: Base: 0x100000000, Length: 0x11FE00000

floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 00000000002013E0 00000000004A38B0 M=S  <====测试加的

(100)前面还有:
LEN=0x2013E0*0x200 - 0x40200000 = 0x7C000=496K


回复

使用道具 举报

338#
发表于 2017-8-26 18:04:05 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-26 18:53 编辑
2011yaya2007777 发表于 2017-8-26 16:14
如果首先分配(0x64),再分配(0x14),则在(0x14)后面剩余小于512Kb空间。
map --mem=0x201000 (md)0x80 ...



还是你上面给为grldr (20170826测试版)
后面留496K,抱怨,不能启动

map --status:
Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A48B0 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 0000000000201000 00000000004A38B0 M=S
Usable RAM: Base: 0x40200000, Length: 0x94793000 内存块的使用情况:
0x40200000:                    (100)                    (14)        【free】      
                            (100)=2432580K                (14)=4K        free=496K




还做了3个测试.
前留4K,没有抱怨,可以启动,
Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 0000000000201008 00000000004A3C88 M=S
Usable RAM: Base: 0x40200000, Length: 0x94793000 内存块的使用情况:
0x40200000:   【free】                          (100)                        (14)  
               free=4K                       (100)=2432580K                   (14)=4K      


后面留4K,抱怨,不能启动
Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C88 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 0000000000201000 00000000004A3C88 M=S
Usable RAM: Base: 0x40200000, Length: 0x94793000 内存块的使用情况:
0x40200000:                         (100)                        (14)    【free】  
                                  (100)=2432580K                   (14)=4K     free=4K

中间留4K,抱怨,不能启动
Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S
64 FF FE 3F 83FF FE 7F 0000000000201000 00000000004A3C88 M=S
Usable RAM: Base: 0x40200000, Length: 0x94793000 内存块的使用情况:
0x40200000:                         (100)                        【free】    (14)   
                                  (100)=2432580K                   free=4K     (14)=4K


可能方向:
    分配内存盘的时候,保证该块前面4K的footprint剩余空间。
再配合不点的补丁,防止漏网之鱼。





回复

使用道具 举报

339#
发表于 2017-8-27 11:37:15 | 显示全部楼层
2011yaya2007777 发表于 2017-8-27 10:13
还请mdyblog再测试一下。正常测试。


实际机器测试, 能正常启动,没有抱怨。

map --status:
Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S

另外,显示的版本是0826, 不是0827.
回复

使用道具 举报

340#
发表于 2017-8-27 13:11:40 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-27 13:14 编辑
不点 发表于 2017-8-27 12:00
是啊,浪费了 6B7FF8 处的空间。莫非 mdyblog 抄错了?mdyblog 是不是简单复制粘贴前面一帖的内容了?


肯定是今天测试的,不是copy昨天的。
LOG中还打印了%@DATE% %@TIME%
2017-08-27 11:27:47


floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=3

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006A4C90 0000000000000008 M=S

不知道grldr的版本对不,怎么是0826? 不是今天编译的么?

我没编译,直接用 grldr。

6A4C90 真是我想要的地址。 你不是这么设计的么。真的要分配那个4K的碎片么? 觉得最好不要改变属性的好。 4K无所谓的。



我再测一遍。
回复

使用道具 举报

341#
发表于 2017-8-27 14:44:24 | 显示全部楼层
本帖最后由 mdyblog 于 2017-8-27 14:46 编辑

2011yaya2007777 发表于 2017-8-27 12:11
直接使用grldr,不用编译。


这次先升级到2016 在升级到这个版本, 确认版本变化了。
这次版本对了,果然是20170827

能启动,无抱怨。

----2017-08-27 14:36:40----

*0x8278 GRUB4DOS:20170827


floppies_orig=0, harddrives_orig=2, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
14 FF 01 12 83FF FE 7F 00000000006B7FF8 0000000000000008 M=S
果然是 6B7FF8

对不起了,前面测试的版本不对。

回复

使用道具 举报

342#
发表于 2017-9-18 15:43:12 | 显示全部楼层
本帖最后由 mdyblog 于 2017-9-18 18:39 编辑

反应个现象。 不知道是否算问题。
关于 map --in-situ 的。
map --in-situ (hd0)0x80+0x1000 (hd0) && map (hd0) (hd1) &&  map --hook
floppies_orig=0, harddrives_orig=1, floppies_curr=0, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
80 80 FE 01 000E FE FF 0000000000000080 0000000000001000 H=S
81 80 00 01 8001 FE 7F 0000000000000000 0000000000000000 H=S

注意红色的部分:虚拟盘 偏移和长度信息



后面再要map到 (hd0)
于是 虚拟 (hd0) “备份到” (hd2) 这个名目下。
map --in-situ (hd0)0x1080+0x1000 (hd0) && map (hd0) (hd2) &&  map --hook
或者:map --in-situ (hd1)0x1080+0x1000 (hd0) && map (hd0) (hd2) &&  map --hook

但是备份出来的(hd2) 不是 要备份的前面的虚拟(hd0),而是原始的(hd0),偏移和长度信息都没了。

floppies_orig=0, harddrives_orig=1, floppies_curr=0, harddrives_curr=3

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
80 80 FE 01 000E FE C1 0000000000001080 0000000000001000 H=S
81 80 00 01 8001 FE 7F 0000000000000000 0000000000000000 H=S
82 80 00 01 8010 FE 41 0000000000000000 0000000000000000 H=S
注意红色的部分:虚拟盘 偏移和长度信息 变了。

这样就无法访问原来虚拟的(hd0,0)里面的文件了。

怎样方便地备份前面的虚拟 (hd0)到(hd2),后面还要访问里面的信息。

测试VHD。 加载VHD后,用finsbtool  MBT Qemu启动测试器 VMware 模拟启动,即可复现显现。
V10M.VHD.rar (179.24 KB, 下载次数: 5)

回复

使用道具 举报

343#
发表于 2017-9-18 18:44:47 | 显示全部楼层
本帖最后由 mdyblog 于 2017-9-18 18:59 编辑

不点 发表于 2017-9-18 17:28
首先,注意 --in-situ 的含义:它只是把分区表虚拟化,别的保持不动。

它只是把——比如说,从偏移扇序 ...


你应该直接使用

map --in-situ (hd0)0x80+0x1000 (hd2)
----------------------
显示中, 这两步是没关联的。这里只是演示下。
第一步可能是另外一个grldr 传过来的。(同样可能 第2步后又启动第3个grldr)


map --in-situ (hd0)0x1080+0x1000 (hd0)
时,我不知道  (hd0) 怎么来的。
我需要为后续的系统菜单创建一个虚拟的(hd0),作为他的磁盘。

同时原(hd0)要 备份到 (hd2)这个名目下,后续可能需要里面的文件。

怎样方便实现这个目的。 我想很多人需要这个吧。

嵌套--in-situ, 这是另外一个问题了。

这样2个问题(假定(hd0)是另外一个同版本grldr的另外一个作者的菜单传过来的):
(1) 在独立的第2步中, 如何方便 原(hd0) 备份到 (hd2)这个名目下。
(2) 在独立的第2步中, 如何方便 map --in-situ ,以避免 嵌套--in-situ。

能加强map功能吗?增加新的开关也可以接受。智能处理也能接受。

备份是否扩成成:
map --move (hd0)  (hd2)
--move 告诉map, 如果是虚拟的, 直接移到 (hd2)上

避免 嵌套--in-situ。是否扩成成:
map --in-situ --exp  (hd0)0x1080+0x1000  (hd0)
--exp 告诉map, 避免 嵌套--in-situ。 map应该用相关信息。


因此,你那种 “备份” 的想法,感觉就有点 “奇葩” 了。
------------------------
这只是一种说法。不必较真。
现实中需要这种应用。
不知道(hd0)怎么来的。 有需要重新虚拟一个(hd0)用。但是有需要保留原(hd0)的访问能力。

回复

使用道具 举报

344#
发表于 2017-9-18 19:02:05 | 显示全部楼层
不点 发表于 2017-9-18 17:28
首先,注意 --in-situ 的含义:它只是把分区表虚拟化,别的保持不动。

它只是把——比如说,从偏移扇序 ...


建议尽量避免嵌套使用 --in-situ。
----------------------
将一个没有分区表的磁盘片(相当于1个分区IMG), 虚拟成一个硬盘。
好像只能 用 --in-situ。 还有其它的方式吗?

点评

你说的其实就是将软盘虚拟为硬盘。举例: map --mem (...)/.../floppy.img (hd0) 当 grub4dos 发现你的 IMG 不含 MBR 分区表、同时也在使用 --mem 参数的时候,grub4dos 会自动在内存中为这个 IMG 添加一个分  详情 回复 发表于 2017-9-18 21:07
回复

使用道具 举报

345#
发表于 2017-9-18 20:28:15 | 显示全部楼层
不点 发表于 2017-9-18 20:21
你可能是在 “超限使用 grub4dos”,——不知我这么理解,是否恰当。

--in-situ 的“作用”,或者说“目 ...


抱歉,我没能理解你的描述。我真不知道,--in-situ 还能用来干别的事。你似乎就是在用 --in-situ 来干别的事。
---------------------
如果说只是 启动个 逻辑分区, 那么目标也太低了。
现在这么用的场景真的很少。
现在是这样的, 先将几个分区IMG写道磁盘上某处 (hd0)0x80+0x1000 和 (hd0)0x1080+0x1000
这些都不在逻辑分区中。

要启动  (hd0)0x80+0x1000  分区IMG。
map --in-situ  (hd0)0x80+0x1000  (hd0) && map  (hd0)  (hd1)  && map --hook
这样 就能访问该分区了。


接着要访问分区IMG  (hd0)0x1080+0x1000
map --in-situ  (hd0)0x80+0x1000  (hd0) && map  (hd0)  (hd2)  && map --hook
这样 就能访问该分区了。
回复

使用道具 举报

346#
发表于 2017-9-18 22:01:22 | 显示全部楼层
不点 发表于 2017-9-18 21:07
你说的其实就是将软盘虚拟为硬盘。举例:

map --mem (...)/.../floppy.img  (hd0)


那么,能添加我说的功能吗?
回复

使用道具 举报

347#
发表于 2017-9-19 04:18:58 | 显示全部楼层
不点 发表于 2017-9-18 23:11
明白了。mdyblog 是想给已经 --in-situ (并且已经 --hook )了的盘映射出一个新的盘号。结果,新盘丢失了  ...

对!!!!!!就是这个意思。
对应地, 还有 --in-place
回复

使用道具 举报

348#
发表于 2017-9-19 09:39:39 | 显示全部楼层
不点 发表于 2017-9-19 07:43
问题是,hd0 是先前某个 grldr 所建立的虚拟盘。他只知道 hd0 是虚拟盘,不知道 hd0 的映射参数(起始扇区 ...

对!!!!就是这个场景!!!!!!!!!!!!
回复

使用道具 举报

349#
发表于 2017-10-5 12:48:42 | 显示全部楼层
2011yaya2007777 发表于 2017-10-5 12:01
执行
map --in-situ (hd0)0x80+0x1000 (hd0)
map (hd0) (hd1)

--swap-drive 是新参数,交换2个form驱动器号。
非常感谢!!!!!!
我来测试下。
回复

使用道具 举报

350#
发表于 2017-10-5 16:17:09 | 显示全部楼层
2011yaya2007777 发表于 2017-10-5 12:01
执行
map --in-situ (hd0)0x80+0x1000 (hd0)
map (hd0) (hd1)

测试成功!!!!!
再次感谢!!!!!!!!!!!!!!
回复

使用道具 举报

351#
发表于 2017-10-5 16:18:24 | 显示全部楼层
2011yaya2007777 发表于 2017-10-5 16:02
其实,不使用  --in-situ 参数,照样可以成功。就是说,软盘镜像可以映射为没有分区表的硬盘。


两种途径吧。
一种硬盘模式, 一种软盘模式。

硬盘模式 兼容性好些。 有些软件不能在软盘运行。
回复

使用道具 举报

352#
发表于 2017-11-12 11:53:49 | 显示全部楼层
10-23的源码的makefile(am/in)有点奇怪

        $(AM_V_at)dd if=bootlace.com of=grldr.pbr bs=512 skip=57 count=10             #skip(1):  "EB 58 90 00" position in the bootlace.com                redress: skip +(-) 1
        $(AM_V_at)dd if=bootlace.com of=grldr_cd.bin bs=512 skip=67 count=1           #skip(2):   = skip(1) + 10
        $(AM_V_at)dd if=bootlace.com of=grldr.pbr bs=512 skip=68 seek=10 count=1      #skip(3):   = skip(2) + 1

1、3行输出的文件都是 grldr.pbr。
回复

使用道具 举报

353#
发表于 2017-11-12 15:00:33 | 显示全部楼层
2011yaya2007777 发表于 2017-11-12 14:56
看看grldr.pbr就知道了。增加了udf格式磁盘的引导代码。

哦, 明白了, 就是1个文件。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-16 03:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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