无忧启动论坛

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

[求助] Grub4dos如何写文件?

[复制链接]
跳转到指定楼层
1#
发表于 2012-11-5 17:44:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问各位大大,在GRUB4DOS如何写一个函数,实现将D盘(或者其他地方)上文件复制到C盘上,请給些提示或者思路,谢谢大家!
2#
发表于 2012-11-5 22:47:18 | 只看该作者
先启动 dos,复制完你的文件,再进入 grub.exe,这样可以吗?
回复

使用道具 举报

3#
 楼主| 发表于 2012-11-6 14:45:04 | 只看该作者

回复 #2 不点 的帖子

我想不是在DOS直接使用命令,这样比较麻烦。在G4D里面添加一个这样的函数可以吗?我看了源码,有读函数,那应该写函数也不成问题吧?
回复

使用道具 举报

4#
发表于 2012-11-6 16:23:39 | 只看该作者
grub4dos 可以写盘,但是不能创建文件。

它可以写入已有的文件,不能创建新文件。

写入文件时,也不能改变文件的长度。

这就是这个技术的限制。

相关的技术可以参见 grub4dos 的外部命令 fat。外部的 fat 命令可以对 FAT 分区进行操作,它可以创建文件。但无法对其它分区进行操作。
回复

使用道具 举报

5#
发表于 2012-11-6 17:02:03 | 只看该作者
其实对FAT的读写并不复杂. 实现应该不会有太大的难度. 只是不知道外部命令是如何在G4D下工作的.
回复

使用道具 举报

6#
 楼主| 发表于 2012-11-6 17:53:46 | 只看该作者

回复 #4 不点 的帖子

我有个思路,我想写一个汇编程序,这个汇编程序实现了文件操作(复制,移动等),然后通过G4D启动调用这个汇编程序来运行,这个思路可以吗?
回复

使用道具 举报

7#
发表于 2012-11-6 18:09:05 | 只看该作者
你的汇编程序是否调用 DOS 、Windows 功能?如果不调用 DOS、Windows 而只调用 BIOS,那是没问题的。

但如果你要调用操作系统功能,那就无法运行在 grub4dos 下了。因为 grub4dos 下很干净,除了 BIOS 以外,没有别的功能可以调用。

就是说,你的程序最多只能调用 BIOS 的功能,或者调用 grub4dos 的功能。别的都不可以调用。否则,那就无法让它在 grub4dos 下正常运行。
回复

使用道具 举报

8#
 楼主| 发表于 2012-11-6 20:32:04 | 只看该作者

回复 #7 不点 的帖子

是的,我的汇编程序只调用了BIOS中断。我一直在摸索着G4D源码,看如何让G4D运行时调用我的汇编程序,但是看的很晕,不点大能指示一个切入点吗?让我跑下一个测试程序hello world。
回复

使用道具 举报

9#
发表于 2012-11-7 07:05:36 | 只看该作者
grub4dos 目前支持两种可执行程序,一种是 32 位的,一种是 16 位的。

16 位程序的一个例子是 weemouse,这是个鼠标驱动程序。它能同时运行于 DOS 下和 grub4dos 下。

这个 weemouse 也是用汇编写成的。它采用 DOS 的 .com 文件格式,所以可以运行于 DOS 下。

而运行于 grub4dos 下的 .com 文件可以不受 64K 的约束。就是说,可以超过 64K。

DOS 的 .com 文件移植到 grub4dos 时,退出程序的指令不能够是 int 20h 或者 int21/ah=4Ch 等,因为这些退出指令都是 DOS 调用,而 grub4dos 之下是不存在 DOS 环境的。

关于如何使用 16 位程序,以及相关技术问题,请阅读 Wee 这个软件的 readme 文件,因为 WEE 是首先支持 16 位程序的,后来才移植到 grub4dos 中。

WEE 的网址:http://code.google.com/p/grubuti ... n%2Fgrubutils%2Fwee

weemouse 的网址:http://code.google.com/p/grubuti ... utils%2Fwee%2Futils




你的程序也可以是 32 位程序,这时,你的自由度更大,因为除了可以调用 BIOS 以外,你还可以调用 grub4dos 的函数。

chenall 的那些外部命令,都是 32 位的程序。32 位的程序一般需要用 C 语言写,通过 grub4dos 提供的 BIOS 接口函数来调用 BIOS。例子很多,你自己找吧。

[ 本帖最后由 不点 于 2012-11-7 07:23 编辑 ]
回复

使用道具 举报

10#
发表于 2012-11-7 08:59:04 | 只看该作者
原帖由 不点 于 2012-11-7 07:05 发表
grub4dos 目前支持两种可执行程序,一种是 32 位的,一种是 16 位的。

16 位程序的一个例子是 weemouse,这是个鼠标驱动程序。它能同时运行于 DOS 下和 grub4dos 下。

这个 weemouse 也是用汇编写成的。它 ...


支持2012casscqt,要是真的也实现NTFS格式分区硬盘文件的复制、删除、移动等那真是太好了!

还有就是不点说的weemouse这个鼠标驱动程序,他在grub4dos下如何用啊?在grub4dos菜单环境里难道可以加载这个鼠标驱动,支持用鼠标选择启动菜单项吗?
回复

使用道具 举报

11#
发表于 2012-11-7 10:14:10 | 只看该作者

回复 #10 thttht 的帖子

weemouse 是一个 DOS 鼠标驱动程序。它虽然可以从 grub4dos 下安装作为驻留程序,但目的是给将来要启动的 DOS 使用的。

本来 grub4dos 也可以模仿 DOS 而使用鼠标,但遗憾的是基于 PS2 和 int15 的鼠标驱动被商家恶意破坏,不能保证畅通运行。所以,这只能是个摆设了。

也因此 grub4dos 中并未继续开发有关鼠标的程序或功能。

这个情况可以与 cdrom --init 有一比,同样都是被商家破坏。就是说,商家生产的硬件不遵守规范,让这些程序失效。
回复

使用道具 举报

12#
发表于 2012-11-7 10:27:35 | 只看该作者
希望楼主能研究出ntfs读写,那样的话,很多事情就不必再转dos去做了。
g4d也就成了一个os了
回复

使用道具 举报

13#
发表于 2012-11-7 15:13:51 | 只看该作者
原帖由 不点 于 2012-11-7 10:14 发表
weemouse 是一个 DOS 鼠标驱动程序。它虽然可以从 grub4dos 下安装作为驻留程序,但目的是给将来要启动的 DOS 使用的。

本来 grub4dos 也可以模仿 DOS 而使用鼠标,但遗憾的是基于 PS2 和 int15 的鼠标驱动被 ...


谢谢不点大的解答!不按行业规范行事实在是害人啊!更客气的是有部分是故意要这样做!
回复

使用道具 举报

14#
 楼主| 发表于 2012-11-7 19:38:09 | 只看该作者

回复 #9 不点 的帖子

好的 谢谢不点大 看来还有很多不了解啊 学习弄一段时间先 不懂再来请教吧
回复

使用道具 举报

15#
 楼主| 发表于 2012-11-7 19:46:39 | 只看该作者

回复 #10 thttht 的帖子

在学习中呢 能实现就最好了 还要多多指教呢
回复

使用道具 举报

16#
 楼主| 发表于 2012-11-12 21:35:03 | 只看该作者

回复 #9 不点 的帖子

不点大 我研究了一下关于如何使用16位程序,你说在Wee这个软件的readme文件中有相关技术问题,可是看来看去也没有什么眉目哦。。。请指教。。。
回复

使用道具 举报

17#
发表于 2012-11-12 22:00:18 | 只看该作者
不知道你是否看了 WEE 的 README 文件中的如下这段解释:


  1. Update 1 (2011-01-31):

  2.                 .com style real mode program support

  3.         The supported real mode program is just like a DOS .com file. Its size
  4.         must be between 512 Bytes and 512 KBytes(inclusive). Note that a DOS
  5.         .com file does not exceed 64KB.

  6.         The file will be loaded at 1000:0100. DOS style command tail is also
  7.         supported. The command-tail count is a byte at 1000:0080. The command-
  8.         tail begins at 1000:0081, ending with CR(0x0D). A word at 1000:0000
  9.         will be cleared to zero. By contrast a DOS PSP will begin with "CD 20".
  10.         DS and ES and CS will be set to 0x1000. IP set to 0x0100. If program
  11.         file length is less than 0xFF00, then SS set to 0x1000 and SP set to
  12.         0xFFFE. If the file length is no less than 0xFF00, then the default
  13.         grub4dos stack(at somewhere between 0000:2000 and 0000:7000) is used.

  14.         The program should not change the content of extended memory.
  15.         The program should not change memory range from 0000:0800 to 0000:FFFF.
  16.         The program should not change BIOS specific memory.

  17.         The program may return to WEE by a far jump to 0000:8200.

  18.         The program file must end with the following 8-byte signature:

  19.                         12  05  01  0C  8D  8F  84  85

  20.         No grub4dos API can be used. So the program could only call BIOS.
复制代码


如果还有什么疑问,我下次再来回复。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-23 00:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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