无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
2851#
发表于 2013-5-11 09:42:42 | 只看该作者
sratlf 发表于 2013-4-5 08:58
0.45c一直没这个问题

mkisofs是 http://code.google.com/p/mkisofs-md5/downloads/list 这下载的

能否介绍一下mkisofs.exe 的具体参数的用法吗?

以前光盘批处理打包都用软碟通批处理和微软的
回复

使用道具 举报

2852#
发表于 2013-5-12 19:42:04 | 只看该作者

RE: GRUB4DOS更新建议、bug反馈专帖

chenall 发表于 2013-4-14 13:57
有没有什么好主意?可以提交补丁...

我不会GNU C,我就是想,从16M到17M保存一个内存分配表,然后从17M到32M是分配空间
回复

使用道具 举报

2853#
发表于 2013-5-12 19:44:49 | 只看该作者

RE: GRUB4DOS更新建议、bug反馈专帖

killwind 发表于 2013-4-17 20:13
使用的是ThinkPad X230i ; 是核显,单条2G内存,启动到grub4dos里面只能看到 Mem: 630K/511M/6M ,无法载入 ...

是你的核显占太多内存了
用独显关掉核显试试
回复

使用道具 举报

2854#
发表于 2013-5-13 12:41:03 | 只看该作者
报告一个情况,一个U盘,5G,只有分区引导记录可写,用BOOTICE写入GRUB4DOS分区引导记录,出现disk error。

写入syslinux 5.01, 默认引导grldr,grldr内置菜单直接commandline,启动进入命令行,但有一奇怪现象,root 为(fd0,0),而用ls (fd0,0) 不可读,find 发现本地硬盘和 (fd0,0) 、(fd0)、(fd0,1)、(fd0,2) 。使用ls 各个盘,发现U盘文件在(fd0)和(fd0,2)。

奇怪的原因是grldr在U盘上,内置菜单为commandline,root却在不可读的(fd0,0)。
回复

使用道具 举报

2855#
发表于 2013-5-13 21:45:42 | 只看该作者
本帖最后由 zxw 于 2013-5-13 21:47 编辑

奇怪的bug:

1.jpg (94.02 KB, 下载次数: 450)

1.jpg
回复

使用道具 举报

2856#
发表于 2013-5-13 21:53:14 | 只看该作者
追踪到 grub4dos-0.4.5b-2011-12-10版本,也存在这个问题。
回复

使用道具 举报

2857#
发表于 2013-5-13 22:09:15 | 只看该作者
发现同是二级目录,只file文件下有此现象。灵机一动,试着将file下的文件夹转移,重建file文件夹。
此时,诡异事件发生了,一切回归正常。晕………………………………………………………………
也许是要整理碎片?
回复

使用道具 举报

2858#
发表于 2013-5-14 00:30:08 | 只看该作者
zxw 发表于 2013-5-13 22:09
发现同是二级目录,只file文件下有此现象。灵机一动,试着将file下的文件夹转移,重建file文件夹。
此时, ...

文件系统自己的事。与 grub4dos 无关。

grub4dos 不能识别 DOS 8.3 格式的中文文件名。必须采用后来新版的 FAT 长文件名格式才行。FAT 长文件名采用 unicode 编码(grub4dos 用 UTF-8 格式来表示它),这才是 grub4dos 所支持的。

回复

使用道具 举报

2859#
发表于 2013-5-17 17:30:16 | 只看该作者
本帖最后由 2011niumao 于 2013-5-17 17:48 编辑

抱歉。可能是我操作的问题。我再测试看看。
回复

使用道具 举报

2860#
发表于 2013-5-22 20:03:54 | 只看该作者
本帖最后由 chiannet 于 2013-5-22 20:11 编辑

从20130419以来的所有0.45C GRLDR截取前2048 字节保存为abc.bin,用OScdimg创建ISO,创建时把abc.bin加载为ISO引导文件,把grldr至于该ISO根目录,不能启动

从20130419或20130512 0.45C GRLDR截取前2048 字节保存为abcd.bin,按大小写敏感替换abc.bin中的全部字串"grldr“为"aaaaa","GRLDR"为"AAAAA",用OScdimg创建ISO,创建时把abcd.bin加载为此ISO引导文件,grldr改名为aaaaa,置于ISO根目录,顺利启动。但上述方法对20130516或20130521的 0.45C GRLDR失效。

问题出在哪里了?
回复

使用道具 举报

2861#
发表于 2013-5-23 08:59:58 | 只看该作者
本帖最后由 不点 于 2013-5-23 09:01 编辑

我感觉是你自己搞错什么了吧?

GRLDR 的开头 16 扇区,那是不会随便改动的。我印象中,有好长时间没有动它了。你自己看看更新记录。

一个没有改动的东西,怎么可能有时候成功,而有时候失败呢?难道又是编译器出错了?

回复

使用道具 举报

2862#
发表于 2013-5-23 12:48:03 | 只看该作者
本帖最后由 chiannet 于 2013-5-23 12:50 编辑
不点 发表于 2013-5-23 08:59
我感觉是你自己搞错什么了吧?

GRLDR 的开头 16 扇区,那是不会随便改动的。我印象中,有好长时间没有动 ...


用 Beyond Compare 3比较0419 0514 0516 0521 前2048字节,差异如下:

请老大看看。



回复

使用道具 举报

2863#
发表于 2013-5-23 15:05:59 | 只看该作者
没错,grldr 的不同版本,在代码上肯定有差别。因为不同版本的 grldr 的文件长度也是不同的。就是说,引导扇区只能引导相同版本的 grldr。这是光盘特殊性决定的。

回复

使用道具 举报

2864#
发表于 2013-5-23 15:46:39 | 只看该作者
2860楼我的测试就是GRLDR头2048字节做光盘引导,引导光盘根的同一日期版本的GRLDR。

回复

使用道具 举报

2865#
发表于 2013-5-23 16:36:41 | 只看该作者
本帖最后由 chiannet 于 2013-5-23 16:52 编辑



用0419版grldr及0419grldr头2048字节做test.iso引导文件,正常。





用0419版grldr及0521版grldr头2048字节做test.iso引导文件,只有一个光标。





用0521版grldr及0419版grldr头2048字节做test.iso引导文件,只有一个光标。






用0521版grldr及0521版grldr头2048字节做test.iso引导文件,出现了grldr命令符。貌似启动的样子。虽然两个grldr的内置菜单是完全一样的,但还是不能引导到菜单。



测试的ISO及文件如下,测试时用ultraiso编辑的TEST.iso
test.7z (493.5 KB, 下载次数: 93)


回复

使用道具 举报

2866#
发表于 2013-5-23 17:51:40 | 只看该作者
猜测可能还是和编译器有关,因为5分月我刚升级到了GCC 4.8正式版.

试试这个,用4.8测试版的GCC编译的.

grub4dos-0.4.5c-2013-05-23.7z (261.82 KB, 下载次数: 24)

回复

使用道具 举报

2867#
发表于 2013-5-23 20:09:59 | 只看该作者
chenall 发表于 2013-5-23 17:51
猜测可能还是和编译器有关,因为5分月我刚升级到了GCC 4.8正式版.

试试这个,用4.8测试版的GCC编译的.

用0523grldr+0523头2048字节做ISO引导,效果如下:



能看到图片,但不显示菜单项中文字符。
回复

使用道具 举报

2868#
发表于 2013-5-24 02:16:50 | 只看该作者
怀疑是改grldr改的毛病。你没有试试不改,会不会就好了呢?
回复

使用道具 举报

2869#
发表于 2013-5-24 06:59:10 | 只看该作者
本帖最后由 2011yaya2007 于 2013-5-24 07:00 编辑

grldr 的长度,会间接反映在头部扇区。那里有测试标签的代码,用以判断是否全部加载了 grldr。
grldr 头部引导代码是通过比对1扇区来查找文件,所以引导代码必须和 grldr 是同一版本。

解决方法:
1. 使用 grldr 整体作为引导文件。  
2. 使用 0.4.6a 版本的 grldr_cd.bin 。他是通过目录查找文件的,与 grldr 版本无关。
回复

使用道具 举报

2870#
发表于 2013-5-24 09:42:46 | 只看该作者
2011yaya2007 发表于 2013-5-24 06:59
grldr 的长度,会间接反映在头部扇区。那里有测试标签的代码,用以判断是否全部加载了 grldr。
grldr 头部 ...

是的,0.4.6 的 CD 引导代码才是比较通用的。由于个人身体原因,至今没有研究 yaya 的代码。

不过,我在这里顺便说说旧的 0.4.5 的 CD 引导逻辑。

正如 yaya 所说,当 2048 字节(一个 CD 扇区)的引导代码接管控制后,它要在整个 CD 上查找 GRLDR 这个文件。查找的逻辑不是按照 ISO9660 文件系统的结构来的,因为旧的 0.4.5 引导代码不使用 iso9660 文件系统知识,0.4.6 是使用 iso9660 文件系统来查找的。

0.4.5 是按照扇区来查找。逐个读入 CD 的扇区(2048 字节),一旦发现有某个扇区与所装载的扇区相同,就继续装载后续的扇区,直到发现了这个文件在规定的字节处的 b0 02 1a ce 标志,就认为加载成功。如果没有发现 b0 02 1a ce 标志,或者 b0 02 1a ce 标志的位置不与此版本的 grldr 匹配,则认为当初的 2048 字节位置是假的(不是 grldr 的开始扇区),放弃它,继续读入下一个 CD 扇区,重复以上步骤。

回复

使用道具 举报

2871#
发表于 2013-5-24 10:16:37 | 只看该作者
不点 发表于 2013-5-24 09:42
是的,0.4.6 的 CD 引导代码才是比较通用的。由于个人身体原因,至今没有研究 yaya 的代码。

不过,我 ...

不点大这么解释就让人明白了.不知道原来从哪里看到的所谓传闻,说可以截取GRLDR头2048作ISO的引导文件.看来此法并不十分靠谱。


用GRLDR整体作引导也有问题,例如用下面的语句创建所谓适用于BIOS的GRUB+UEFI双引导ISO后,

OSCDimg.exe -lmyiso -h -m -o -d -g -c -n -bootdata:2#p00,e,b"D:\mycddir\grldr"#pEF,e,b"d:\aaa\UEFI.BIN" "D:\mycddir" "D:\abc.ISO"

有可能无法启动!出现无法启动时,我们用ultraISO提取出D:\abc.ISO的引导文件为abc.bin,会发现abc.bin与指定的D:\mycddir\grldr二进制值不一致,查看abc.bin 的内置菜单,居然与D:\mycddir\grldr内置菜单不一致,可能是被OSCDimg.exe截取了。


现在我只好用BCDW中介暂时解决此问题:load.bin(iso引导文件)--->bcdw--->bcdw.ini-->grldr(与版本无关)。

OSCDimg.exe -lmyiso -h -m -o -d -g -c -n -bootdata:2#p00,e,b"D:\aaa\load.bin"#pEF,e,b"d:\aaa\UEFI.BIN" "D:\mycddir" "D:\abc.ISO"


修改BCDW.ini的内容,GRLDR可随意改名.
回复

使用道具 举报

2872#
发表于 2013-5-24 11:09:08 | 只看该作者
grub4dos 正式文档,没有提到可以截取 2048 字节作为 CD 引导的事情。

grub4dos 所支持的 ISO 制作软件是 mkisofs,遇到启动失败、异常,必须用 mkisofs 来试验。只有当 mkisofs 制作的 iso 也有同样的失败、异常时,这才认为是一个无可挑剔的、一个应该被接受的 bug 报告。

用户和 PE 开发者可以选择自己喜欢的任何方式来启动 GRLDR。但是,grub4dos 的开发者可能没有能力提供那么多的技术支持,换句话说,就是放弃对于某些使用方式提供技术支持。

回复

使用道具 举报

2873#
发表于 2013-5-24 12:15:14 | 只看该作者
本帖最后由 不点 于 2013-5-24 18:43 编辑
chiannet 发表于 2013-5-24 10:16
不点大这么解释就让人明白了.不知道原来从哪里看到的所谓传闻,说可以截取GRLDR头2048作ISO的引导文件.看 ...


不过确实发现了 bug,请等待修复。

我已经上载了源代码到时空论坛。我自己目前没有编译环境。你等待 chenall 的编译结果吧。

回复

使用道具 举报

2874#
发表于 2013-5-25 09:14:40 | 只看该作者
0.4.6a 版本,原来头部有从目录查查找 grldr 的代码,即头部 2048 字节与 grldr_cd.bin 相同,可以作为 CD 的引导代码。
后来支持 udf 格式,头部放不下代码,故又恢复到原 0.4.5c 状态。所以“所谓传闻”不是空穴来风。
回复

使用道具 举报

2875#
 楼主| 发表于 2013-6-9 09:21:01 | 只看该作者
本帖最后由 zhaohj 于 2013-6-9 09:22 编辑

pxe启动win8的pxeboot.n12-bootmgr.exe->grldr
发现blksize一直是512,纯千兆的网络环境测试也一样。
而pxe直接引导grldr目前是1408.
回复

使用道具 举报

2876#
发表于 2013-6-9 15:42:18 | 只看该作者
手动设置 blksize 为 1408,看看能否正常工作?

经由 bootmgr 启动之后,grldr 就不知道它是不是经由 PXE 而启动了。所以,自动探测 blksize 的步骤就没有执行。

因此,你可以试试在命令行敲入 pxe detect ,看看可否执行探测。

回复

使用道具 举报

2877#
 楼主| 发表于 2013-6-9 16:23:42 | 只看该作者
本帖最后由 zhaohj 于 2013-6-9 16:30 编辑

手动执行pxe detect正常,blksize是1408
我试着在外部配置文件menu.lst中加入pxe detect
出现:
-------------------
menu.lst中加入pxe detect not exist
正常了。好像这个是pseudo的原创命令,官方未见说明。

Snap0.jpg (19.01 KB, 下载次数: 176)

Snap0.jpg
回复

使用道具 举报

2878#
发表于 2013-6-9 17:03:00 | 只看该作者
如果在菜单 menu.lst 中执行 pxe detect,那肯定会反复执行 menu.lst 文件。这是因为 pxe detect 执行的时候,要自动寻找 menu.lst 并执行它。于是这就产生了无限循环。

pxe 带上一个非法的文件名作为参数,就阻止自动寻找 menu.lst 文件了。就是说,只是探测 blksize,不再查找 menu.lst 文件。

回复

使用道具 举报

2879#
 楼主| 发表于 2013-6-11 09:33:41 | 只看该作者
对空格字符(字符串)无法赋值,是一大遗憾。如
char a=' ' //一个空格字符
char b="  " //二个及以上空格字符
目前对数值可以用set /a赋给数值变量,能否改进对字符型变量的赋值方法。

点评

没看明白,有点不着头脑?? char b=" "语法这是错误的吧.  发表于 2013-6-11 17:02
回复

使用道具 举报

2880#
 楼主| 发表于 2013-6-12 10:49:58 | 只看该作者
表达方式是错误的,C语言没有字符串变量的说法(可以字符数组表示),只有字符常量与变量。
char b[ ]="  ";
------------------------
我的意思很简单,怎么把一个空格字符赋值给一个变量?或把多个空格赋值给字符串变量?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-16 12:17

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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