无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
331#
 楼主| 发表于 2011-11-30 23:02:27 | 显示全部楼层
回复

使用道具 举报

332#
 楼主| 发表于 2011-11-30 23:29:31 | 显示全部楼层
做个记号,判断是否加载了背景图:
set /a a=46<<2+*0x8304
checrange 0 read %a% && echo not load image
回复

使用道具 举报

333#
 楼主| 发表于 2011-12-2 07:59:53 | 显示全部楼层
INT 18启动功能我测试无效,虚拟机VM,BIOS启动顺序:pxe->hdd->cd
title 从下一个启动设备启动
checkrange 0x21 read 0x8280 && pxe keep
boot -1
无效,还是pxe启动
----------------
改成下面可以
title 从下一个启动设备启动
checkrange 0x21 read 0x8280 && pxe keep
boot --int18
回复

使用道具 举报

334#
 楼主| 发表于 2011-12-4 20:29:29 | 显示全部楼层
给map命令提个修正建议:
pxe上的镜像是无法map的,但map命令会先加载,再返回0
能否先判断是pxe上的文件,如果是直接返回0
如map ()/win$.iso (0xff) || map --mem ()/win$.iso (0xff)
如果()是(pd),直接判断返回0。

==================
奇怪,pxe启动直接测试,好像正常,是先判断的。
不知是那句命令导致会先加载到内存?

[ 本帖最后由 zhaohj 于 2011-12-4 20:45 编辑 ]
回复

使用道具 举报

335#
 楼主| 发表于 2011-12-4 22:34:31 | 显示全部楼层
以后就不用动态生成菜单了。
回复

使用道具 举报

336#
 楼主| 发表于 2011-12-5 14:13:26 | 显示全部楼层
map --mem /iso.iso (0xff)
一屏放不下后,屏幕上移好像行距不对:

[ 本帖最后由 zhaohj 于 2011-12-5 14:14 编辑 ]

Snap1.jpg (21.89 KB, 下载次数: 99)

Snap1.jpg
回复

使用道具 举报

337#
 楼主| 发表于 2011-12-5 18:09:17 | 显示全部楼层
(pd)/test/test.bat

!BAT
echo file size is   : %~z1
echo file root is   : %~d1
echo file root path : %~p1
echo file name      : %~n1
echo file name ext  : %~x1
echo file path name : %~f1

Snap1.jpg (59.42 KB, 下载次数: 92)

Snap1.jpg
回复

使用道具 举报

338#
 楼主| 发表于 2011-12-5 22:56:26 | 显示全部楼层
原帖由 ggmm888 于 2011-12-5 22:27 发表
支持VBE模式后,转换菜单configfile命令不可用了,是什么原因?

我使用的是2011年12月2日新版本,不能支持configfile命令

菜单是:
title 30: 运行 切换到menu子菜单
find --set-root /BOOT/GRUB/DOS.L ...


title 30: 运行 切换到menu子菜单
find --set-root /BOOT/GRUB/DOS.LST && configfile /BOOT/GRUB/DOS.LST

g4d认为连写的命令是一条命令,find不是敏感命令,所以上下键选择跳过正常。
可以使用新版的功能:
iftitle [find --set-root /BOOT/GRUB/DOS.LST] 30: 运行 切换到menu子菜单
find --set-root /BOOT/GRUB/DOS.LST
configfile /BOOT/GRUB/DOS.LST
回复

使用道具 举报

339#
 楼主| 发表于 2011-12-6 16:29:26 | 显示全部楼层
grldr启动过程,内核使用了0x40000的区域吗?

Snap1.jpg (101.05 KB, 下载次数: 114)

Snap1.jpg
回复

使用道具 举报

340#
 楼主| 发表于 2011-12-6 16:59:00 | 显示全部楼层
覆盖没关系,我所关心的是0x40000~0x44FFF区域的20K空间是否还是用户使用区域?
回复

使用道具 举报

341#
 楼主| 发表于 2011-12-10 10:40:39 | 显示全部楼层
现在图形、字体都有了,字距、行距都有了,总觉得菜单的编排使其居中不太方便。
比如有一级菜单、二级菜单...,,改每个菜单很不方便。
能否设计一个全局变量或命令,使菜单全部往右移动N个空格。
如:_TITLE 或 _SPACE,默认是0
回复

使用道具 举报

342#
 楼主| 发表于 2011-12-10 11:57:07 | 显示全部楼层
原帖由 chenall 于 2011-12-10 11:33 发表
以后抽空整一个外部命令MENU来实现一些增强的功能(可能得下个月才有时间了)。
预期的效果
1.使用MENU外部命令 ...


那就太好了,慢慢来吧。
C大有空看一下map --rehook=xx:yy,我大致看了一下,源码太复杂了。
想实现的是如:
map --rehook=0:1
使(fd0)的start_sector高于(fd1)
------
map --rehook=1,0
使(fd1)的start_sector高于(fd0)

如果复杂就算了。
回复

使用道具 举报

343#
 楼主| 发表于 2011-12-11 14:08:31 | 显示全部楼层
原帖由 sratlf 于 2011-12-11 12:14 发表
vbe应该没有使用64M内存以上的空间吧  我的run只使用了两块内存  一个是256K开始的1K  另一个是64M开始的64K  其他就没有了


dd if=()+1 of=(md)0x3E+1

这句话是什么意思?

-----------------------
原:
:0pe
if #%1==# && exit ! calc %~1 && write 0x60300 0x60300 && write 0x60100 %~1
if /i "%~x2"==".iso" || exit ! if "%~2"=="%~nx2" set /u tmp=%usrpath%%%~nx2 || set /u tmp=%~pnx2
write (md)0x301+1 %tmp%
set tmp=%tmp%
set /a tmp=*0x4CB00
write 0x60360 %tmp%
set tmp=
exit
可以简单一点:
:0pe
if #%1==# && exit ! calc %~1 && write 0x60300 0x60300 && write 0x60100 %~1
if /i "%~x2"==".iso" || exit ! if "%~2"=="%~nx2" set /u tmp=%usrpath%%%~nx2 || set /u tmp=%~pnx2
write 0x60360 [email=%@retval%]%@retval%[/email]
set tmp=
回复

使用道具 举报

344#
 楼主| 发表于 2011-12-11 17:21:46 | 显示全部楼层
原帖由 chenall 于 2011-12-11 16:00 发表
上传一个给zhaohj

这个可以使用map --status=n
来获取已映射内存盘n的状态。

比如以下命令
map --status=0

执行后将会得到两个变量(扇区)
%?%=内存盘的起始位置
%@retval%=内存盘大小

注:以 ...


谢谢C大,这个功能很有用,特别是“内存盘的大小”,可以根据这个值(内存盘的大小至少是不小于8个扇区)来判定是否存在这个仿真盘。
如果n盘不存在,%?%返回0更加好,目前会继存这个变量。

[ 本帖最后由 zhaohj 于 2011-12-11 17:25 编辑 ]
回复

使用道具 举报

345#
 楼主| 发表于 2011-12-12 17:10:32 | 显示全部楼层
原帖由 sratlf 于 2011-12-12 16:44 发表

找到原因了  是和insmod命令使用的内存地址冲突  用tulongwa 1598#提供的测试包  
进入命令行后随意insmod一个文件  再返回主界面就会有黑条


insmod常用啊,单独测试没问题。
insmod前后看一下cat --hex (md)0x8000+1
回复

使用道具 举报

346#
 楼主| 发表于 2011-12-12 17:36:11 | 显示全部楼层
800*600的这张图正常,1024*768这张图确实出现问题了,超出范围了。
不知图形文件在16M以上允许多大?
不然insmod的内存管理有问题。

我上传这张图让C大测试一下吧
http://115.com/file/dn859szc

[ 本帖最后由 zhaohj 于 2011-12-12 17:53 编辑 ]
回复

使用道具 举报

347#
 楼主| 发表于 2011-12-13 10:31:49 | 显示全部楼层
判断数值大小还不直观啊,加油!
grub4dos内置shell就方便很多了。
目前wenv的功能大多都内置了,如果再引入(   ),哈哈
回复

使用道具 举报

348#
 楼主| 发表于 2011-12-13 11:30:13 | 显示全部楼层
主要是我们对字符串的格式不了解,如:
%s      这个应该用来输出一个字符串
%08x  这个表示8位的16进制数
%08d 这个表示8位的10进制数
%016d 这个表示16位的10进制数,注意前面的0,表示位数不足时补0
因为比较数值需要长度相同,所有才用%08x的格式,表示8位的16进制数
---------------------------------
格式符:
  1、d格式符:按十进制格式输出。
      %d 输出数字长度为变量数值的实际长度
      %md m指定输出数据的宽度。当数据本身的实际宽度小于m时,则数据左端补空格;若大于m,则按数据的实际位数输出。
      %ld,%mld l(小写字母L)表示输出“长整型”数据
      %0md,%0mld 0(数字0)表示位数不足m时补0
   2、x格式符:按十六进制格式输出整数。(不会出现负数格式)
   3、o(字母)格式符:按八进制格式输出整数。(不会出现负数格式)
   4、u格式符:以十进制数形式输出unsigned的整数。
   5、c格式符:用来输出一个字符
   6、s格式符:用来输出一个字符串。
        %s 用来输出一个字符串,不含双引号. 例:printf("%s","CHINA");
        %ms m指定宽度(字符串长度小于m时左补空格,大于时按实际宽度输出)
        %-ms 左对齐,不足m时右补空格
        %m.ns 输出占m列,只取字符串中左端n个字符.这n各字符输出在m列的右侧,左补空格.
        %-m.ns 同上,右补空格
   7、f格式符:按实数格式输出。
        %f 整数部分全部显示出来,小数部分显示6位.但并不是显示的所有数字都是有效数字
        %m.nf 指定数据的宽度共为m列,其中有n位小数.如果数值长度小于m,则左侧补空格。
        %-m.nf 与%m.f类似,只是应在右侧补空格
   8、e格式符:以指数形式输出实数。
        %e 按规范化指数形式输出实数,系统自动给出6位小数,指数部分占5位
        %m.ne 与前面的叙述相同
        %-m.ne 与前面的叙述相同
   9、g格式符:它将根据数值的大小,自动选用f格式或e格式输出数据,并且它不输出无意义的0.


@ZXW:
fat在目标上只支持8.3格式。

[ 本帖最后由 zhaohj 于 2011-12-13 12:11 编辑 ]
回复

使用道具 举报

349#
 楼主| 发表于 2011-12-13 22:47:45 | 显示全部楼层
数值比较测试ok。现在负数显示也正常了。
回复

使用道具 举报

350#
 楼主| 发表于 2011-12-28 09:16:06 | 显示全部楼层
F1-F10,Ctrl+F1-Ctrl+F10测试通过
F11、F12及与之相关的未通过

干脆把数字键0~9也设为热键得了。

[ 本帖最后由 zhaohj 于 2011-12-28 09:28 编辑 ]
回复

使用道具 举报

351#
 楼主| 发表于 2011-12-29 09:14:28 | 显示全部楼层
-nc  不接受除了热键之外的其它按键用于安全性比较高的场合,使用该参数时,必须使用热键才能启动。
------------------------
我认为应该排除上下键及grub4dos内定的热键如b、c ...,除非内定的热键也使用了。
easyboot也是这么做的。
回复

使用道具 举报

352#
 楼主| 发表于 2011-12-29 12:04:50 | 显示全部楼层
原帖由 chenall 于 2011-12-29 11:51 发表
数字热键会立即执行吗?不太应该的呀。


目前是数字热键会立即执行。
数字热键会立即执行,我觉得很好啊!
回复

使用道具 举报

353#
 楼主| 发表于 2011-12-29 16:41:01 | 显示全部楼层
这个测试版,使用下面的菜单会断线:
title \t  0 远程启动网络上Chenall的CSPE
configfile /CSPE/KERNEL/LOADER.CFG

title \t  1 远程启动iscsi版本Chenall CSPE
pxe keep
chainloader --force /gpxe.pxe

title \t  2 远程启动网络上PSEUDO的0PE
configfile /0PE/pseudo.lst

title \t  3 远程启动网络上HHH333的PE
.....
-----------------------
title \t 在以前的版本中使用正常。

[ 本帖最后由 zhaohj 于 2011-12-29 16:44 编辑 ]

Snap1.jpg (102.93 KB, 下载次数: 127)

Snap1.jpg
回复

使用道具 举报

354#
 楼主| 发表于 2011-12-30 08:18:36 | 显示全部楼层
本人支持第一方案:
1.开启热键永久有效,除非重启,或重新加载GRLDR。或hotkey -u。
理由:
现在热键用^标识了,如果用户不需要也很简单,去掉表识就可以了。
有一点不明:
难道不执行hotkey也能使用热键?对第二方案不明。
我理解新版内置热键支持,hoykey为了支持老版本。

另开启热键了,“显示行号”能否隐藏。
发现一个bug,菜单按C键进入命令行,会改变debug status。原是是debug 0的进入命令行会变成debug 1

[ 本帖最后由 zhaohj 于 2011-12-30 08:53 编辑 ]

Snap6.jpg (13.46 KB, 下载次数: 108)

Snap6.jpg
回复

使用道具 举报

355#
 楼主| 发表于 2011-12-30 13:36:28 | 显示全部楼层
“进入命令行之后自动DEBUG ON”。
------------------------
这个人性化设计有好处也有坏处。对调试很不利。有时频繁的切换很麻烦。
如果能改成按ESC返回自动设置成原值就ok!

另:当线宽>=6时,x、y方向的宽度明显不等。
下面是8单位的线宽,我估计与行距调整有关。
(ps:测试与行距调整无关)

[ 本帖最后由 zhaohj 于 2011-12-30 17:28 编辑 ]

Snap1.jpg (3.82 KB, 下载次数: 112)

Snap1.jpg
回复

使用道具 举报

356#
 楼主| 发表于 2011-12-31 10:09:49 | 显示全部楼层
新版本按小写字母c、e等无法进入编辑状态,而按大写字母可以。
-------------
突然发现大写、小写的键盘反了。重启后正常。
误报!sorry!

[ 本帖最后由 zhaohj 于 2011-12-31 10:12 编辑 ]
回复

使用道具 举报

357#
 楼主| 发表于 2011-12-31 10:55:52 | 显示全部楼层
"从子菜单返回主菜单,都要重新加载字体与背景"
------------------------
这个问题真很难解决,可以这样解决:
在主菜单中加判断
1:判断是否加载了字库
read 0x1800820 || font %@path%unifont.hex
2:判断是否加载了图形
calc 46<<2+*0x8304
read %@retval% || splashimage %@path%photo.bmp
回复

使用道具 举报

358#
 楼主| 发表于 2011-12-31 11:07:15 | 显示全部楼层
目前的bmp只支持24位及32位色,不管怎么压缩也有点大。
如果能支持256色或16位色,相对小很多。
对PXE来说压力很大,目前实机考虑只有“割爱”。
回复

使用道具 举报

359#
 楼主| 发表于 2011-12-31 11:36:27 | 显示全部楼层
边框颜色:
color border=**
初始化时的屏显信息我不知你讲的哪些?如果是内部命令或外部命令产生可用 > nul ,来消除屏幕输出。
回复

使用道具 举报

360#
 楼主| 发表于 2012-1-2 13:08:28 | 显示全部楼层
新版本是否考虑重新设置一下界面?
1:版本信息(头信息),这个内核中是固定的,可以考虑一个内存变量控制;
2:帮助信息,这个是根据菜单状态动态变化的,目前位置是相对固定的。
我的设想:
    去掉原来的帮助信息,原帮助信息由热键控制,不按热键不弹出信息(再按热键隐藏)
    新的帮助信息(只实时生成菜单的帮助信息),也是一个结构体(struct):help_broad
struct hep_broder {
        unsigned char disp_ul;
        unsigned char disp_ur;
        unsigned char disp_ll;
        unsigned char disp_lr;
        unsigned char disp_horiz;
        unsigned char help_box_x;
        unsigned char help_box_w;
        unsigned char help_box_y;
        unsigned char help_box_h;
        unsigned char help_box_b;
        unsigned char help_border_w;
} __attribute__ ((packed));

默认情况下:
help_box_x = menu_box_x;
help_box_w = menu_box_w;
help_box_y = menu_box_y+menu_box_h;
hep_box_b= current_term->max_lines -1;
help_border_w = border_w;
...
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-3 20:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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