无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站广告联系 QQ:184822951 微信:wuyouceo
楼主: sgw888

[发布] 基于GRUB4DOS的BOOTSECT

[复制链接]
 楼主| 发表于 2011-5-9 09:10:00 | 显示全部楼层
把程序加载到 0X10000 这个好像不太妥当吧??? 看GRUB4DOS的置顶帮助。
在grub4dos环境中,以下两块内存可以放心使用:

1、0x60000开始处1KB(即内存384KB开始的长度为1KB的区域),经常用于菜单或批处理临时使用。

2、0x40000-0x44FFF(即内存256KB至275KB之间,长度为20KB)也是可以使用的(这一段是最常使用的,且空间较大)。

其它16MB以内的内存最好不要随意使用,很多有特殊的用途。
保守一些的话,尽量使用32M以上的内存空间做临时文件用。

32M绝对地址:0x2000000 ;
回复

使用道具 举报

发表于 2011-5-9 09:26:28 | 显示全部楼层
在命令行环境下对硬盘进行读写操作,具有很大的风险。
既然有风险,我们就要做到把风险降到最低。所以,我建议:
1:对操作对象,先进行分区信息显示,活动分区文件及目录显示,确认后再操作
2:现在的操作命令,虽然按照ms的风格,但GRUB4DOS下可以进行适当的改良,如:
   bootsect (hd0) clear
    bootsect (hd0,0) /nt52
    第一参数总是对象
3:强制第一参数是(hd开头,因为这个参数太关键,没有或默认风险太大
4:sys参数我认为可以省略
================
     
我认为,bootsect的主要功能是重新注入mb及dbr,我们能否更加简单呢?
如bootsect (hd0) /nt52,就重新注入了mbr (440字节),相应的清除1-62扇区的,并自动注入活动分区的DBR,除非没有活动分区。

另外bootsect是否可以加入新功能,如分区表检查?
回复

使用道具 举报

发表于 2011-5-9 09:36:41 | 显示全部楼层
map --mem=0x10000 %run% (rd)

这句话的就是把%run%加载到基地址0x10000扇区开始的内存中,即内存地址=0x10000*0x200字节=0x2000000字节=0x20 *0x100000(32M)
回复

使用道具 举报

发表于 2011-5-9 09:45:46 | 显示全部楼层
@ sgw888

同意zhaohj的意见  多硬盘情况下并不确定磁盘编号是否正确  可以默认先输出所有磁盘对应的分区信息  供用户参考

或者在帮助下输出  不过这样子可能就需要加个手动输入命令的功能了

最近生活比较乱  批处理也还没完全看懂  就一直没回复
回复

使用道具 举报

 楼主| 发表于 2011-5-9 11:02:43 | 显示全部楼层
操作硬盘虽然存在风险,但是我已经加入了很多的判断,防止出错。
既使用户发现操作失误,仍旧会有挽回的机会。只要能保证重新可以运行本批处理,可以重新执行刷新操作。

至于参数调整,这将会重写所有相关代码。
参数的运用,实际上只是一个习惯问题。 我个人觉得,跟微软保持一致没什么不好。
另外,刷新主引导不一定非要清除1-62扇区。
回复

使用道具 举报

发表于 2011-5-9 11:03:09 | 显示全部楼层
命令行的东西,需要花时间学习其用法。
如果事先学,怕浪费时间,等遇到问题时可能忘了。
如果不事先学,到时当场学,手头没这个帖子,也不好掌握,毕竟这是危险操作。

建议楼主把主要功能部分做成菜单项。类似ntboot。
回复

使用道具 举报

 楼主| 发表于 2011-5-9 11:12:18 | 显示全部楼层
提个问题,通过什么命令可以列出当前所有的硬盘分区情况?

另外,看了一下,上面 ZHAOHJ 提到的问题。 因为程序加了很多的判断,所以,错误应该是降到最低了。关键的地方是执行刷新代码的操作。

默认情况下的处理都是以HD0为准的。应该问题不大。针对列分区文件,这个可以做到。
回复

使用道具 举报

 楼主| 发表于 2011-5-9 11:16:51 | 显示全部楼层
原帖由 pseudo 于 2011-5-9 11:03 发表
命令行的东西,需要花时间学习其用法。
如果事先学,怕浪费时间,等遇到问题时可能忘了。
如果不事先学,到时当场学,手头没这个帖子,也不好掌握,毕竟这是危险操作。

建议楼主把主要功能部分做成菜单项。 ...


建议可以接受。不过,我临时没有打算做成菜单的打算。

第一步,是要排除BUG。这是目前的主要工作!!!先把BUG排除掉,然后,再完善菜单部分。

先把基本功能做好,别的再扩展就容易了。

请教个问题,通过什么方法,可以列出当前的所有分区? 最好是通过内置的命令,不要再写批处理的。。。。
如果不能,我就自己写批处理了。这样又麻烦了。

目前,仍在代码微调,修复BUG中。。。
回复

使用道具 举报

发表于 2011-5-9 11:28:58 | 显示全部楼层
我也同意P大的意见。
回复#27:
首先通过0x475判断有几个硬盘(包括USB-HDD):
set /a hdn=*0x475&0xff  (等于1表示存在hd0,等于2表示存在hd0、hd1...)
我们可以给个菜单:title select hdddisk
这样我们可以动态获得硬盘号

geometry (hd?)可以列出当前硬盘分区情况
回复

使用道具 举报

 楼主| 发表于 2011-5-9 11:46:28 | 显示全部楼层
感谢楼上回复。我先把基本功能做好,没有BUG。就着手做菜单的代码,这几天可能有些忙,大家稍等等了。 我会先把基本功能做好。传上来。 自动化菜单要等一段时间了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-14 11:44

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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