无忧启动论坛

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

[讨论] grub命令学习笔记(请ZXW大注释下FD2HD批处理)

[复制链接]
跳转到指定楼层
1#
发表于 2012-1-7 11:11:33 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
谢S版解释部分命令。这次请ZXW大帮注释下FD2HD批处理,不少地方不明白。问题见9楼:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=204917&page=1#pid2374248
#1

graphicsmode -1 640:800 480:600 24:32

这个图形模式的命令没有公布具体的参数,红色分辨率部分还有人这样写:100:1000 100:1000 ,不知道是怎么个意思。

#2
calc *0x82b8 && calc *0x82b9&0xff

这两个地址里存放的是什么?
说明书里与启动相关较重要的地址,看了下是 0x8280((bd)) 0x829c(/) 0x82a0(()),嗯,这样说可对?
现在出来的这两个地址是新版启用的?

难道说与ud区有关系?

#3
uuid (hd0,0)

显示类型是 0x0c,指的是FAT格式?0x07是NTFS格式?



#4echo -n | echo -n | echo -n | echo -n
echo经常有些特殊的用法,能讲一下吗?

find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
这个--devices=h 是什么意思?



另外,我的移动硬盘在一联想机器上被识别为软盘,花屏(好像字体未加载)。四主分区,进grub4dos后find到了(fd0)、(fd1),ls (fd0)/ 及 ls (fd1)/ 后能正确显示移动硬盘上前两个主分区文件。手动chainloader (fd0)/grldr重新加载菜单后又好了,执行各菜单项又正常了。
应该怎么处理这种情况来让它不花屏?


初学grub4dos ,看了些教程,还有很多不解。烦请版主及各位过路神仙解惑,多谢!

[ 本帖最后由 2011seeu 于 2012-1-26 14:00 编辑 ]
2#
 楼主| 发表于 2012-1-7 14:06:53 | 显示全部楼层
原帖由 zhs509 于 2012-1-7 12:39 发表
哈哈 好像我的维护盘就是那么写的。。。


http://bbs.wuyou.net/forum.php?mod=viewthread&tid=180142&page=209#pid2362316




谢谢,这一点明白了。
不点做了详细解释,重抄一遍:

抱歉,你这句还有其他疏忽:

graphicsmode -1 800:600 640:480 32

应该这样:

graphicsmode -1 640:800 480:600 24:32

640:800 是控制水平方向的像点个数。不可以颠倒过来,变成 800:640。这是指定范围,小的在前,大的在后。
480:600 控制垂直方向的像点个数,同样不可以颠倒顺序,应该前小后大,表示区间。
24:32 也是有必要的,以免把 4 位的模式 0x102 (它等同于以前的 VGA 0x6A 模式)也包括进来了。

应该首先采用这条命令决定分辨率,分辨率决定之后,再加载图片。这样就不会出错了。黑屏实际上是根本没有进入 VBE 模式的结果,当然不会显示汉字了。

graphicsmode -1 后面不加别的控制参数,竟然会造成黑屏,这可是出乎意料的。如果出现那样的情况,可以认为属于显卡 BIOS 的问题(即显卡 VBE 的问题),无法解决,只有添加别的控制参数,来达到较小的分辨率,使显示器不至于 “ 因为承受不了太大的分辨率 ” 而 “ 罢工 ”。

-------------------

补充研究:

进一步分析:

像这样控制分辨率:

graphicsmode -1 640:800 480:600 24:32

是不是太严格了?假如有些手机之类的设备,分辨率不高,这样控制就太狭窄了。可以考虑这样:

graphicsmode -1 100:1000 100:1000 24:32

这样范围更灵活一些,同时也避免出现很大的分辨率(例如 1024 x 768 )。


这里是不点对图形模式的一些解释:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=180142&page=235#pid2375749
[quote] graphicsmode 命令兼容 VGA 的 6A 模式,比如graphicsmode -1 命令会在某台机器上探测到三个合法的模式:
128:1B,640x400x24,Direct Color
112:1B,640x480x24,Direct Color
102:1B,800x600x4,Planar
及某些无效模式:
115:1A,800x600x24,Direct Color
这里仅列一个1A,还有若干1B的模式,均非4/24/32位色,亦不为新版本支持。

模式属性 1A 表示,这个模式不被当前硬件支持,即,不被显示器支持。所以,这是个无效的模式。
102:1B,800x600x4,Planr

102 这个模式,属性 1B,表示硬件是支持的。但这个模式就是以前的模式 6A,即,VGA 图形模式 800x600。这个模式也等于是不再被 grub4dos 新版所支持的模式。新版只支持 VBE 图形模式,不再支持 VGA 图形模式。
grub4dos 的 VBE 模式,只支持 24 位和 32 位的色深。所以,在你的图片所显示的模式中,只有两个模式是支持的:
128:1B,640x400x24,Direct Color
112:1B,640x480x24,Direct Color

但是,
如果你加上别的限制,比如,你排除掉 640 的模式,那就只剩下 800x600x4 这个模式了,这是一个不被新版 grub4dos 支持的 VGA 模式。

如果你没有添加任何限制,那么,640x480x24 的乘积是最大的,它就是 graphicsmode -1 命令所选择的最优模式。[/quote]

[ 本帖最后由 2011seeu 于 2012-1-23 14:09 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2012-1-8 22:08:03 | 显示全部楼层
原帖由 mygamexxx 于  2011-9-24 09:58  发表
   请教,关于G4D加载一个菜单文件后,如何在菜单中得到菜单文件的路径。

比如:通过 configfile (hd0,1)/back/menu.lst加载菜单后,如何在菜单中获取菜单文件menu.lst所在的分区(hd0,1)和目录/back/从而设置为变量。

批处理中可以用%~dp0获取,在菜单文件中应该无法使用吧。 ...



C大回答:
原帖由 chenall 于  2011-9-24 09:58  发表
   这个菜单文件的位置一般是固定的。
使用以下命令就可以得到当前加载的菜单。
具体的可以自己看源码。ASM.S里面就可以找到答案。


call Fn.0 0 0x8217 | set menu=

得到的menu变量就是当前使用的菜单文件(上一个configfile命令的参数)

...


旁证:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=191301&page=85#pid2333584
原帖由 sratlf 于  2011-11-7 17:56  发表
@tulongwa

汗  明白怎么回事了  grldr内置菜单没执行过configfile /file命令的话  通过call Fn.0 0 0x8217得到的就是 /menu.lst 这一结果  我一直用这个结果作为第二备用菜单文件使用的

第一备用菜单文件是 menu 指定的  第二备用是这个  第三备用是(md)4+8  这下好处理了

[ 本帖最后由 2011seeu 于 2012-1-8 22:19 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2012-1-8 22:59:57 | 显示全部楼层
查到了ECHO的用法,原来学问很多呀:
echo
用法: echo [-e] [-n] STRING
描述:

(by zhaohj@wuyou)

输出指定内容。

用法:echo [-e] [-n] STRING

-e:允许转义

-n:不换行

不带参数的echo,默认不转义、自动输出换行符。

下面是一些转义符:

\NNN (1到3位)八进制值 NNN 表示的字符
\\ 反斜杠
\a 警报 (声音)
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\xHH (1到2位)十六进制值为 HH 的字节

增强功能:颜色设置,只支持console模式(文本模式).

使用方法:

echo -P:XXYY $[ABCD]MESSAGE

-P为大写;XX为横坐标,YY为纵坐标。

用$[ABCD]来指定后面显示的字符使用的颜色.

A 值为1时闪烁 (blinking foreground color).

B 值为1时高亮(light)

C [0-7]背景色(background color)

D [0-7]前景色-字体颜色(foreground color)

例子:

1:输出

symmpi
PCI\VEN_1000&DEV_0050

命令:

echo symmpi
echo PCI\VEN_1000&DEV_0050



echo -e symmpi\r\nPCI\\VEN_1000&DEV_0050
#上面\r\n输出回车换行,\\输出\

2:输出

  PCI\VEN_1000&DEV_0050 symmpi
#注意:输出前面有2个空格开头的内容

命令:

echo -e \x20\x20PCI\\VEN_1000&DEV_0050 symmpi
#上面\x20转义后为一个空格
回复

使用道具 举报

5#
 楼主| 发表于 2012-1-18 22:19:42 | 显示全部楼层
刚刚看了ZXW大大的FD2HD批处理,觉得很有意思。试着加点注释,不过有不少地方不懂,请Z大及各位大侠指点。
!BAT
debug 0
checkrange 20111009:-1 read 0x8278 || clear && echo Error: Not supported $[0003]grub4dos version! && exit
#0x8278为grub4dos版本在内存中的地址。
#$[0003] 未解。

calc *0x8280&0xff/2 || debug 1 && command | call :zip_fix *0x8280&0xff= && exit
#由后面的zip_fix子程序可判断 *0x8280&0xff取(bd)设备号。
#计算*0x8280 的值是否为0x80/0x23(fb启动)/0x21(PXE)/0xXX(光驱,更大于硬盘设备号),是则继续,不是就调用zip_fix。
#启动时如果为zip,则为(fd0)或者(fd0,0),此时设备号为0。

calc *0x82b8 && calc *0x82b9&0xff/2 || debug 1 && command | call :zip_fix *0x82b9&0xff=
#如果为UD启动,则判断是否存在(fd0)、(fd0,0)

#0x82b8 、0x82b9与UD有关,具体来讲干什么用的?
#*0x82b9&0xff取(ud)还是可见分区的设备号?

debug 0
exit
:zip_fix
debug 0
setlocal
set /a zip.mod=%1
call :movedisk + || exit
#调用movedisk子程序,才HD号依次后移。
map (%zip.mod%) (hd0) > nul || exit
#加上> nul 屏蔽写屏。

map --hook > nul
map --floppies=0
#既然将FD给形成HD了,最后要去掉FD。

endlocal && call :cpath_fix %zip.mod% %~5
#调用cpath_fix修正路径

clear
exit
:cpath_fix
if "%~d2"=="(fd%1)" command --set-path=(hd0)%~p2 || if "%~d2"=="(fd%1,0)" command --set-path=(hd0,0)%~p2
calc *0x8280-%1 || calc *0x8280=0x80 > nul
#calc *0x8280-%1一定为0,这句可以砍掉吧?

calc *0x82b8 && calc *0x82b9=*0x82b9&0xffffff00|0x80 > nul
#这个红色部分不明白,另外请解释下那个|
calc *0x82a0-%1 || calc *0x82a0=0x80 > nul
exit
:movedisk
set /a hd0=*0x475&0xff+0x7f
if "%hd0%"=="127" exit
if "%1"=="-" || goto :move
map (hd0) (hd-1) > nul
:move
set /a hd1=%hd0%%%1 1
if "%hd1%"=="127" exit
map (%hd0%) (%hd1%) > nul
if "%hd0%"=="128" exit
set /a hd0=%hd0%-1
goto :move

[ 本帖最后由 2011seeu 于 2012-1-18 22:41 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2012-1-24 15:38:23 | 显示全部楼层
笔记:
color 0x3f 0x3c 0x3 0x3
#分别设置主菜单、选中菜单项、帮助、版本信息的字体颜色;按背景/前景的16进制数来设置。其中0x3其实为0x03,可以简写为 3
#color适用于VBE及文本模式,背景/前景色可使用64位表示法,如#3333ff为一种蓝色,#ff99ff为一种粉色,则0x113333ff11ff99ff表示背景为蓝色/前景为粉色的一种配置。

calc 46<<2+*0x8304
read %@retval% || splashimage /BOOT/GRUB/BACK1.BMP > nul
#如已加载背景,不再重复加

color border 0
#使边框的颜色为0x0(黑色)

font && font ()/BOOT/GRUB/MENU.HEX
#如有字体先卸载再加载/BOOT/GRUB/MENU.HEX为字体

read 0x1800820 || font ()/BOOT/GRUB/MENU.HEX
#如已加载字体,不再重复加载

[ 本帖最后由 2011seeu 于 2012-1-24 15:50 编辑 ]
回复

使用道具 举报

7#
 楼主| 发表于 2012-1-26 15:47:13 | 显示全部楼层
原帖由 2011phzhc 于 2012-1-7 12:31 发表
#在所有磁盘类设备的根目录下寻找 ntldr 文件,并将找到的设备设置为根

find --set-root --devices=h /ntldr



明白了,不是所有磁盘类设备,h特指硬盘(hard disk)。

从P大的0PE内置菜单中可以找到类似用法:
find --devices=uh --set-root /0PE/0PE.ISO && set PEISO=/0PE/0PE.ISO && goto 1 ! echo -n
if exist (0xff)+1 rootnoverify (0xff)
find --devices=cfp --set-root /0PE/0PENB.LZMA && goto 2 ! echo -n

uhcfp分别指UD设备、磁盘、光驱、软驱和PXE网启设备。

[ 本帖最后由 2011seeu 于 2012-1-26 22:15 编辑 ]
回复

使用道具 举报

8#
 楼主| 发表于 2012-1-26 22:16:17 | 显示全部楼层
谢S版,受益非浅
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-5 05:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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