dihuo0 发表于 2011-7-7 06:41:54

wee的help文件

写在前面的话
经过多次修改,我所能找到的错误基本上已经都修正了。为了方便大家纠错,本文已经发到wiki百科上,地址是zh.wikipedia.org/wee。wiki百科是人人都可以修改的,有人发现了错误可能直接修改,而不回来本帖通知,因此, wiki百科可能更正确,更权威。建议大家直接去wiki百科。

wee最新版的下载地址是:
http://code.google.com/p/grubutils/downloads/list

————————正文开始————————
asm
asm命令用来提供与dos里debug相类似的功能。
语法:
asm [地址] db [字节] [字节] ...
asm [地址] go
1. asm [地址] db [字节] [字节] ...
“地址” 和 “字节”都是整数。
如果存在“地址”参数,则从“地址”处开始汇编。如果不存在“地址”参数,则从当前汇编地址开始汇编。系统初始的默认汇编地址是在地址 16M 处。每执行汇编一条指令,当前汇编地址指针会随着发生变动。
“字节”参数主要意图是用来编写机器指令,只有最低的字节起作用,其余的高位字节都被忽略。
2. asm [地址] go
如果存在“地址”参数,则从“地址”开始运行汇编程序。如果不存在“地址”参数,则从地址 16M 处开始运行汇编程序。
==============
asm 命令只实现了必要的 db 和 go 子命令。真正的汇编指令,一个也没有实现。其实,由于 wee 的空间紧张,也确实无法实现了。需要等以后腾出空间了再实现。
db 伪指令可以实现机器码的编程。这对于熟悉机器码的人是有用的。
==============
注:
1. 汇编默认的地址正好是外部命令运行时的代码空间。如果运行外部命令,就毁掉了你的汇编程序。所以,汇编期间,不要执行外部命令。
2. 在执行 go 之前,应该用 hexdump 命令检查汇编代码是否正常。否则,盲目地执行 go,有可能发生死机。
3. 你的程序应该保护所有的寄存器,最后用一条 ret 指令返回到 wee 的环境下。
4. 尤其要注意堆栈,不可有丝毫差错,否则就要死机。
5. 作为 asm 命令的应用,你可以调用 wee 的 API。不过,目前你得自己用 db 来写机器码,而且要熟悉各个 API 的调用格式。
http://bbs.znpc.net/viewthread.php?tid=6107
示例:
asm 0x1000000 db 0xC3
asm go
#这个程序很简单,只有一个 ret 指令( C3 就是 ret),什么也不做,立即返回。
————————————————————————————————
command
command命令用来执行外部可执行文件。
语法:
command ]
wee不再需要 chainloader 和 kernel 命令了,取而代之的是用 command 本身的功能。command 命令把可以引导的文件(示例如单扇区文件、NTLDR、IO.SYS、vmlinuz 等)都当作可执行文件来对待了。单单在命令行之下敲入 ntldr、 io.sys或者 vmlinuz 等,就可以启动相应的文件了,它们已经是wee的可执行程序了。这就是说,启动那些不同的格式,有了统一的调用方式,不再像以前那样分为 chainloader 和 kernel 两个不同的类别了。
http://bbs.znpc.net/viewthread.php?tid=5838&page=7&fromuid=12697#pid44230
注:
1. command 命令不支持 --set-path 参数。默认时,使用当前当前目录作为命令文件的路径。如果未找到,将提示 wee 17>。
2. 菜单文件不是可执行文件。
3. 在wee中也没有boot命令,command命令将立即执行,不再需要附加boot命令了。
4. wee支持 FAT、NTFS,EXT2/3/4文件系统。
示例1:
#启动linux
command (hd0,0)/vmlinuz (hd0,0)/initrd.img root=UUID=XXXXXXXXXXXXX ro quiet splash acpi=noirq
#注意,由于这不是 chainloader 启动的,所以,你需要在 vmlinuz 之后紧跟一个 initrd.img,然后才是命令行的其他参数。
#command 命令将同时加载两个文件到内存,一个是 vmlinuz,一个是 initrd.img。加载成功以后,把控制交给 vmlinuz。
http://bbs.znpc.net/viewthread.php?tid=5838&page=7&fromuid=12697#pid44101
示例2:
#启动mbr
(hd0)+1
示例3:
#启动dbr
(hd0,0)+1
————————————————————————————————
default
default命令用来设置默认启动的菜单项
default NUM
设置默认启动的菜单项为 NUM 号菜单。
注:
第一项菜单是0号菜单。
————————————————————————————————
exit
exit将立即终止当前命令的运行,将控制返回给调用者。
语法:
exit
当一个外部命令调用内部的命令处理器进入命令行手动输入命令的时候,如果没有 exit 命令,则永远无法退回到外部命令中。有了 exit 命令,当前的命令处理就可以结束了,控制可以回到调用者。
在wee和grub4dos中,每个命令都会返回一个ERRNUM。成功返回 0,如果返回一个非 0 值,通常情况下都会被认为是一个错误码,每个ERRNUM值都有特定的含义,详情请参阅grub4dos.h c/c++或bash的相关文档。一个编写良好的命令,程序,和工具都应当返回一个 0 来表示成功。
将来,wee可能会提供脚本功能。脚本中的函数和脚本本身都会返回ERRNUM。在脚本或者是脚本中的函数中执行的最后的命令会决定ERRNUM。
注:
在wee命令行中,提示符wee和>之间的数字就是上一个命令的错误码。
示例:
wee 0>echo
#echo是外部命令,如果当前目录下不存在echo,那么提示符将是:
wee 17>
————————————————————————————————
find
本命令用来查找符合条件的文件或分区。
语法:
find [--set-root] [--active]
1. 参数 --set-root,找到第一个匹配后马上停止,并且把该设备设为根设备。
2. 参数 --active,查找激活的主分区。grub4dos的find没有此参数。
3. CONDITION 是一个返回值是 true 或者 false 的命令。
注:
违反直觉的是,0代表true,非0代表false,但是却符合脚本语言的内部逻辑,大多数脚本也都是这么规定的。
示例 1:
find
这会列举所有的硬盘分区,软驱和 (cd) 等。
示例 2:
find +1
这会列举文件系统已知的所有设备。
————————————————————————————————
hexdump
本命令用来显示内存数据。
语法:
hexdump [地址] [长度]
地址和长度都是整数,以字节计算。
如果在一个命令行的开头按下 Delete 键,则此时也会执行 hexdump 命令。因此,可以认为 Delete 键是 hexdump 的快捷键。
————————————————————————————————
map
本命令是一个简单的设备映射命令
语法:
map (FROM_DRIVE) (TO_DRIVE) [--hook] [--unhook]
1. --hook 参数表示仿真立即生效,即使是在命令行模式中。
2. --unhook 参数仅仅是断开 INT13 的挂钩(在中断矢量表中),它不会影响到驱动器映射表。
map命令不支持--rehook,建议使用--unhook参数,并自行恢复驱动器映射表.
另外,127扇区版的wee127.mbr 之中所实现的 map 命令,几乎与 grub4dos 里面的 map 完全一样只有两点差别:
1. 不支持加载到 4G 以上。
2. 不支持加载压缩的映像(gz,lzma)格式。
注:
wee不支持从 iso9660 光盘文件系统中启动,因此,wee不能用作 ISO 的启动引导程序。
http://bbs.znpc.net/viewthread.php?tid=5838&page=19&fromuid=12697#pid47891
示例1:
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
示例2:
map --unhook
map (hd0) (hd0)
map (hd1) (hd1)
map --hook
————————————————————————————————
pause
暂停,按任意键后继续。
语法:
pause
暂停,按任意键后继续。如果有MESSAGE,则把它输出到屏幕上
注:
pause命令不支持--wait参数。
示例1:
pause This is a test。
This is a test。
#按任意键后继续
————————————————————————————————
root
设置并加载根设备。
语法:
root
将指定设备(DEVICE_OR_PATH)设置为根设备,然后尝试挂接该分区以得到分区大小。
注:
根设备和根目录是两个容易混肴,但是实际上不同的两个概念。
示例:
root (hd0,0)/boot/grub
#这条命令执行之后,根设备是(hd0,0)/boot/grub,而根目录是(hd0,0)/boot/grub/,两者相似但是还是有一些细微的差别。
————————————————————————————————
rootnoverify
设置但不加载根设备。
rootnoverify
类似 'root' 指令, 但不试图安装该设备。这用于有些系统装在 wee 不能访问的磁盘分区之上, 但仍需要设置正确的根分区的情况。有些需要安装分区才能确定的参数可能会有问题。
————————————————————————————————
timeout
timeout SEC
设置在自动启动缺省菜单前所等待的秒数。超时后,将启动默认菜单项。在菜单头部使用,不能用于菜单项中。
————————————————————————————————
title
title
菜单标题,即加载菜单后菜单项的标题。
目前最多只支持 20 个有效的 title 行。
当存在连续的 title 时,仅仅把最后一个 title 作为有效的 title 来计算,其余的只显示出来而已,并且不能用箭头键来访问。这是一种添加注释的方法,这样,用户想怎么添加注释都很随意了。
这是与grub4dos不同的地方,grub4dos不支持此功能。
示例:
title
title Wee Boot Menu
title =============
titleGRLDR
http://bbs.znpc.net/viewthread.php?tid=5838&page=13&fromuid=12697#pid46877

——————————————————————————————————
本文写作的过程中参考了grub4dos-help-2011-05-27、ABS_Guide(高级 Bash 脚本编程指南)、grub2入门基础教程修订版、批处理阶段教程奥运最终版[英雄出品]以及系统时空和无忧启动论坛的相关帖子,并得到了不点等人的帮助,在此一并致谢。

[ 本帖最后由 2011_dihuo0 于 2011-8-22 09:15 编辑 ]

dihuo0 发表于 2011-7-7 06:43:24

=== 名字的由来 ===
http://bbs.znpc.net/viewthread.p ... muid=12697#pid45404
wee:很少的,微小的,极小的,很早的。
有很多词汇都曾经被用于小的操作系统,比如 mini,tiny,nano,micro 等等,这类常用词都被用光了。
所以就找到这个无人问津的 wee 了。如果将来真的成为了一个操作系统,中文名字可以叫做“微”,与英文语音相近,词义也相近。
起初找这个 wee 不是想把它当作一个操作系统的名字,而是想把它当作一个后缀(wee是三个字母,作为后缀很合适,也很难得;其他的同义词都要超过三个字母):grldr.wee 以区别于 grldr.mbr。但是,后来,grldr 的开头 16 扇区不能存在了,精简为 2 扇区了,这样,就不能再用 grldr 作为主要名字了。所以,我就想,干脆就把主要名字叫做 wee 得了。
目前,第一扇区中代码启动失败时的提示字符串就是 “Urr! wee...”。
————
http://bbs.znpc.net/viewthread.p ... muid=12697#pid45408
grldr.wee 不好,因为将来不利于区分 63 扇区和 128 扇区的版本。也不容易区分 ROM 版和 MBR 版。
grldrwee 也存在一样的问题:
grldrwee63.mbr、grldrwee63.rom 显然超过了 8.3 文件名的要求,不美观。
这个 wee,如果看成是一个独立的操作系统的话,它是从 grub4dos 发展而来的,或者说,是基于 grub4dos 的。一个东西基于另一个,新的不一定非得在名称上与旧的有牵连。ubuntu 基于 debian,但在名称上从未体现出 debian 字样。

=== 近况 ===
http://bbs.znpc.net/viewthread.p ... muid=12697#pid43940
按照我目前的想法,微型grub有一套API,而grub4dos也有一套API。可以肯定的是,微型grub的API数量很少。这样就有两种情况:
1。grub4dos 的API 严格与微型grub的API一一对应,都是少量的几个。这样,少量的API只提供系统中极其特别的几个功能接口。
2。grub4dos 的API多于微型grub的API。这就有了两者共有的 API 以及grub4dos专有的API之分。那么应用程序肯定也得考虑两种不同情况。将来我们会公布究竟哪些API是共有的,而哪些是grub4dos专有的。这样一来,应用程序的编写者就能决定是否同时支持两者以及如何在两种情况下都能运行。
注意我们仅仅涉及的是内核提供的API,不讨论由其他扩展模块所提供的API。API就是系统调用。grub内核代码和变量是高度透明的,这些API函数就是内核本身必不可少的函数。把这些变量、函数和数据结构的地址放在固定的内存位置,就等于向外部程序提供了访问的手段。内核用了多少个函数,外部程序也就能够用多少个函数。因此,内核的代码是充分地被利用了。你不可能做到,让内核中没有的函数,也作为API供外部程序使用。内核中所有的函数都可以被外部程序(作为API)来调用,这一点,不就是最好的代码重用吗?这已经达到最大化(100%),你不可能做到更高的代码重用率了。我们的内核(代码和数据)没有丝毫的保留,全都贡献出来,供外部程序使用。这就是core-lib。所谓的core-lib,就是内核所提供的系统调用罢了。但是我们不同于Linux的系统调用的方面在于,我们是把内核中全部的代码和数据都提供给外部程序了,这一点,Linux是不会这么做的。Linux是一个操作系统,注重安全,所以,它不会像我们那样去做。而我们就像DOS那样,没有安全机制,所以,我们就可以把内核完全暴露在光天化日之下,你可以调用它,你也可以破坏它,那都是你的自由。
至于说将来的扩展(内核模块和TSR程序),也都可以提供API,那是比较遥远的事情了,我们现在去讨论,还不是时候,因为就连现在我们都处于摸索阶段。应该一步一步来。如果一步还没走稳,下一步就不容易看得清楚。我们是“摸着石头过河”。
=== 发展目标 ===
== 主要用途 ==
http://bbs.znpc.net/viewthread.p ... muid=12697#pid46840
wee 本来就是为硬盘设计的。它的主要用途就是在硬盘上,防止因丢失分区上的引导文件而死机。这是 wee 目前最大的用处。将来可以被主板生产商用在 ROM 上那是另外一个话题。
当你去给客户或朋友修理机器的时候,通常他的机器还没彻底死掉,这时候,你首先把 wee 安装在 MBR 上,这样就放心了。即使后来折腾坏了,只要 MBR 上的 wee 还在,启动不至于死机,于是就还能尝试挽救。如果 MBR 上没有 wee,那么启动失败之后,你必须用 U 盘或者光盘或者 PXE 等手段了,而对于具体的情况来说,那些手段不一定行得通,比如说,机器没有光驱,不支持 U 盘启动,也不支持 PXE 启动。那就得拆卸硬盘了,很不爽吧。wee 的最大用处就是方便对付这类问题的。
每个软件都有其用途、目的。wee 的主要用途应该是为电脑修理人员提供方便的。它不可以代替 grub4dos。它也不可以代替 pt 的 63 扇区引导软件。
http://bbs.znpc.net/viewthread.p ... muid=12697#pid31282
这些裁剪掉的内容,将来有可能再添加上,如果确有必要的话(同时也得在我们有相应的开发能力的情况下)。mini grub 的裁剪将很多,最后,保证软件大小在 30K 以内(也可以同时推出30K和60K两个版本)。mini grub 的用途大概是在 MBR 上以及 ROM 扩展卡上。
对于 30K 的 mini grub,我们到时候可以考虑融合 grub.exe 和 grldr 了。因为 grub.exe 就可以变成 grub.com 了,这样,它就有可能与 grldr 合并了。到那时,它们统一称作 grub.com。
————
http://bbs.znpc.net/viewthread.p ... muid=12697#pid45316
精简版的主要目的,就是应用于硬盘的 MBR,使得查找 grldr 失败时,能够进入命令行,而不是 Ctrl+Alt+Del。
命令行之下能够运行外部命令,使得精简版就像一个微型的操作系统。这是这个精简版的另外一个特色。
如此小的操作系统,目前还不多见。

[ 本帖最后由 2011_dihuo0 于 2011-8-3 10:33 编辑 ]

keniooyi 发表于 2016-6-12 21:20:21

http://www.morepan.com/moke/1.PNG


打开微信扫一下上面的二维码,开启愉快的赚钱之旅

简单介绍:
这是一个试用APP赚钱的方法,所有APP都在苹果官方App Store中下载,安全可靠,安装试用一个APP得2元(目前最高了),一天轻轻松松20-30元,关键是省事,安装好试用5分钟后钱就到账,每10元可以提现。这个平台从2014年起一直到现在很稳定,越来越多的商家在这里刷APP的流量和下载量。

详细用法:morepan.com/article/1

下面是我最近两天的收入截图。

http://www.morepan.com/moke/get.PNG


平台的盈利方式是这样的:
现在手机应用越来越多,每个APP的推出,商家都希望有很多人使用并反馈意见,如下载量大,评论量大,其APP排名就会靠前,所以他们就需要推广,通过平台每安装一个APP应用就可以拿到至少2元,并且所有下载都是在苹果官方App Store里,所以非常安全,商家给钱到平台推广应用,我们在平台接任务去App Store下载并试用几分钟,我们得报酬,商家APP排名上升,这就形成了一个生态链,所以这个平台是稳定可靠的,这个平台从2014年6月起一直到现在稳定运行,目前最高的人已经拿到30万,很多人一天就有上千元,不用羡慕别人,从现在起,你也会走向一天1000元的路。











static/image/common/sigline.gif
★★★一天轻松30元★★★
morepan.com/article/1

iwjq7tts 发表于 2015-5-13 01:21:44

百年不遇的好帖子,不得不顶











交友:我是个小女生,21岁,独生子女,还没谈过恋爱,长相较好,反正带出去不会给你丢脸,身高165cm,体重50kg,现在是一家公司的文员。希望找个比我大几岁的男生,不需要你有非常好的条件,但一定要有上进心,会体贴女生,不花心。因为我是第一次恋爱,所以希望找的就是那种能结婚的。如果你是我说的那个他,那就加我微信吧:pndrwx

不点 发表于 2011-7-7 11:05:07

调用 bios 属于执行实模式代码。用 realmode_run 函数(C 语言函数)即可。不需要 asm 之类的手段。

realmode_run 函数在 wee 和 grub4dos 下都存在。用 google 搜 realmode_run 看看能否找到相关说明。

pseudo 发表于 2011-7-7 09:15:57

asm,可以调用bios中断么?要注意什么?grldr有类似功能么?

不点 发表于 2011-7-7 06:48:32

看来占位后的沙发让我抢到了。

sgw888 发表于 2011-7-7 14:25:26

dd 跟 write 命令在写盘操作时,是调用的BIOS 吗??

不点 发表于 2011-7-7 16:20:10

回复 #6 sgw888 的帖子

这当然是的了。但是,你这个问题,与 pseudo 的问题完全不是同一种性质的。pseudo 是想让自己(也就是“用户”)能够调用自己所选择的“任何” BIOS 调用,而不仅仅是读盘或者写盘。dd 和 write 相当于一个应用程序,它们被用户直接使用,来完成某个任务。但 realmode_run 就不是一个应用程序了,而仅仅是一个函数,它的“用户”,只能是编程人员。编程者利用 realmode_run 函数,可以调用任意一个 BIOS 的中断,来完成自己的某个任务。

dihuo0 发表于 2011-7-7 16:40:46

请大家帮我检查一下有没有错误,有的话,我会尽快修改免得误导别人。
另外,有没有熟悉维基百科的,我打算把这个贴子发到维基百科上去。

不点 发表于 2011-7-7 17:14:39

首先就发现拼写有错误:

waring -> warning

席位的差别 -> 细微的差别。

建议再锤炼一段时间,你自己说不定就能发现很多毛病。

不点 发表于 2011-7-7 17:19:29

exit 命令不支持携带 errnum 参数。

title 命令不支持如下的用法:

“在文本模式的菜单显示模式下可以在菜单标题后使用\n 添加该项菜单的注释信息(多余一行的注释信息可以使用 \n\r 来换行输出)。”

即,不支持注释信息。

[ 本帖最后由 不点 于 2011-7-7 17:24 编辑 ]
页: [1] 2 3 4 5 6
查看完整版本: wee的help文件