无忧启动论坛

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

grub4dos FAT分区创建文件命令(02-09 )

[复制链接]
31#
发表于 2010-1-22 12:39:33 | 只看该作者
原帖由 chenall 于 2010-1-22 00:19 发表
没考虑这一点,你可以试一下.
因为是调用DD的功能.
刚试了,如果是GZ格式就不能复制了,呵呵.
我下次再改一下,如果是GZ格式按原文件复制.

只是想想而已,还没动手试——跟不上发展。

对GZ格式,dd默认是自动解压的,那么体积计算就不同于来源文件了。
得先解压后再看体积,或者深入解剖来源文件,从中取到解压后的体积。
我想grub4dos总要为目标文件申请空间,也许已经有现成的代码可以计算出解压后的体积。

gz格式按原文件复制似有不妥。最好跟dd、map、configfile等命令一致,按相同的规则处理是否自动解压问题。
回复

使用道具 举报

32#
发表于 2010-1-22 13:03:56 | 只看该作者
gz 文件最末尾的四个字节表示压缩前的文件实际长度。

是的,默认时,应该自动解压。

默认时,打开一个 gz 文件,得到的 filemax 就是解压后的文件长度。当 grub_read 扇区的时候,也是读出了解压后的扇区。
回复

使用道具 举报

33#
 楼主| 发表于 2010-1-22 14:18:36 | 只看该作者
copy应该是要按原样复制。

需要解压的可以通过rd设备中转。
先map 到(rd)
然后再把rd的内容复制到文件中。
回复

使用道具 举报

34#
 楼主| 发表于 2010-1-22 14:21:27 | 只看该作者

回复 #32 NicTense 的帖子

grub4dos可以访问带mbr的(fd0)
就是(fd0,x)的格式。

但好像启动时的启动设备号有问题所以不能自动设置好root .

不管用什么方式,能解决就OK。
回复

使用道具 举报

35#
发表于 2010-1-23 21:57:45 | 只看该作者
不错。。。看起开很好用。。
回复

使用道具 举报

36#
 楼主| 发表于 2010-1-24 01:18:18 | 只看该作者
回复

使用道具 举报

37#
 楼主| 发表于 2010-1-26 12:58:08 | 只看该作者
创建文件,没那么简单。
还是需要像FAT这样子。

目前的FAT就是可以创建指定大小的文件啊。

command集,
一是作为例子。
二是可以让以后的minigrub调用。

[ 本帖最后由 chenall 于 2010-1-26 13:00 编辑 ]
回复

使用道具 举报

38#
发表于 2010-1-26 14:52:54 | 只看该作者

回复 #39 chenall 的帖子

需求:
创建一个指定大小的内存仿真盘,按指定大小分区、格式化,然后复制文件于其上。
回复

使用道具 举报

39#
发表于 2010-1-26 15:10:08 | 只看该作者

回复 #39 chenall 的帖子

@chenall

我发完贴又重新看了一下新版的grub,才发现fat不单可以copy,还能create,之前没仔细看
然后明白,暂时还是无法突破fat12和fat16的瓶颈,所以删掉了帖子
没想到c大动作太快了已经看到了

@pseudo
目前应该是连格式化命令都没有吧
我觉得这个需求应该是分成几步的吧
那样只要一个,创建指定大小的内存仿真盘命令和一个格式化命令就可以了
其他应该是现成有的了

[ 本帖最后由 NicTense 于 2010-1-29 20:25 编辑 ]
回复

使用道具 举报

40#
 楼主| 发表于 2010-1-26 15:16:13 | 只看该作者
原帖由 pseudo 于 2010-1-26 14:52 发表
需求:
创建一个指定大小的内存仿真盘,按指定大小分区、格式化,然后复制文件于其上。


创建内存仿真盘,应该也很好处理。。

格式化: 应该比创建文件还简单。格式化只需要处理一下文件分配表和根目录表基本上就搞定了(扇区清0)。

改天有空再试试吧。在FAT的基本上增加。因为已经有了地基再建房子比较简单。

我还没有抽空处理FAT32,不过启动时比较少用,先不搞了。

目前也是只支持根目录(对付启动盘够用了)。还不想支持子目录(代价比较大,不值得)。

[ 本帖最后由 chenall 于 2010-1-26 15:20 编辑 ]
回复

使用道具 举报

41#
 楼主| 发表于 2010-1-29 09:18:48 | 只看该作者
参考了GRUB的FAT代码,重写大部份的代码。

新增支持在FAT32.

copy命令未加上。

先放上来测试下。

[ 本帖最后由 chenall 于 2010-1-30 11:31 编辑 ]
回复

使用道具 举报

42#
发表于 2010-1-29 14:06:15 | 只看该作者
还有问题,我改名为fat16,fat16 dir缺文件(8.3格式的),目录也没显示

Snap1.jpg (38.9 KB, 下载次数: 159)

Snap1.jpg
回复

使用道具 举报

43#
 楼主| 发表于 2010-1-29 19:41:43 | 只看该作者
加入了copy

我这里测试还是没有问题。

你可以再试试fat info看看一些详细的信息(用新版的)
debug on
看一下。

否者把你的镜像文件传给我试一下。

[ 本帖最后由 chenall 于 2010-1-30 11:31 编辑 ]
回复

使用道具 举报

44#
发表于 2010-1-29 20:30:03 | 只看该作者
不好意思啊,请教2个跟fat无关的问题
1、read每次都会读出4个字节,有没有办法只读一个字节,或者2个字节

2、grub怎么实现类似于批处理的for那样的循环功能呢
比如,我需要将(hd0)映射为最后一个硬盘,而将第2,3...个硬盘一次后移,但是硬盘个数不知
我的做法是


uuid (hd1,0)
checkrange 21 errnum || map (hd0) (hd-1)
uuid (hd1,0)
checkrange 21 errnum || map (hd1) (hd0)
uuid (hd2,0)
checkrange 21 errnum || map (hd2) (hd1)
uuid (hd3,0)
checkrange 21 errnum || map (hd3) (hd2)
uuid (hd4,0)
checkrange 21 errnum || map (hd4) (hd3)
map --hook


有没有更方便的方法呢,而且这样由于无法确定硬盘个数,如果硬盘数多于4还是会错误映射的
回复

使用道具 举报

45#
 楼主| 发表于 2010-1-29 21:22:56 | 只看该作者
Q:read每次都会读出4个字节,有没有办法只读一个字节,或者2个字节
方法1.直接修改源码,让它可以读取指定字节数。
方法2.通过dd命令把这一个字节复制到其它地方,然后再读取
比如

dd if=(md) of=(md) bs=1 count=1 skip=0x829c seek=0x60000
把0x829c的一个字节移动0x60000
然后再
read 0x60000就可以了,当然了首先可能得清空0x60000上已有的数值
write 0x60000 0

2、grub怎么实现类似于批处理的for那样的循环功能呢
没有for的功能。目前无解,
当然了你可以想办法通过外部程序来实现这一功能倒是比较简单的。
你有条件可以试一下。
回复

使用道具 举报

46#
 楼主| 发表于 2010-1-30 11:33:02 | 只看该作者
优化了写入文件分配表的代码。
创建大文件时,速度应该会比以前的版本快很多。

fat.rar

4 KB, 下载次数: 43, 下载积分: 无忧币 -2

回复

使用道具 举报

47#
发表于 2010-1-30 12:04:59 | 只看该作者
本来想测试一下fat,把slic表给导出来,结果进去之后傻掉了
外部命令不能用help
fat --help 也不行

又回来看了1楼

fat dir
fat info
fat file create
fat file copy

目前就这4个用法,对吧

建议增加一个 fat help 或者 fat --help
我基本不用linux,不知道习惯的用法是哪个
反正就是增加一个显示参数的功能,这样比较方便

[ 本帖最后由 NicTense 于 2010-1-30 12:09 编辑 ]
回复

使用道具 举报

48#
发表于 2010-1-30 12:46:59 | 只看该作者
还是不行啊,fat32支持看来还是有问题
fat32,usb-hdd格式的sd卡启动进入grub
根目录放了7个文件,2个目录
fat dir 显示出其中4个文件,1个目录,其他不见了,多了一个4G大的AT a n g  o文件
fat file create 一蹋糊涂
fat file create size=0x176 slic.bin 提示错误1
fat file create size=0x176 /slic.bin 提示错误11
fat file create size=0x176 (hd0,0)/slic.bin 执行了一半,然后错误24

file file copy跟create一样

另外有个问题请教一下
fat和 command fat 是完全一样的吧
回复

使用道具 举报

49#
 楼主| 发表于 2010-1-30 12:50:30 | 只看该作者
fat和command fat都是一样的。
是一样的,嗯,下次再加一个帮助信息。。

可以开启一下debug
debug on
然后再看一下fat info显示的信息是否正确。

前面的错误,可能是因为有长文件名的关系。我再试试看。

[ 本帖最后由 chenall 于 2010-1-30 13:25 编辑 ]
回复

使用道具 举报

50#
发表于 2010-1-30 13:26:39 | 只看该作者
C大,随便那个镜像都可以的,比如CSPE.GZ
刚map好时fat dir比较正常,如果往镜像里fat file copy文件后,fat dir文件和目录就不正确了,往往少很多。
回复

使用道具 举报

51#
发表于 2010-1-30 13:28:20 | 只看该作者
fat info可以正常运行
参数跟disgenius基本一致
有一点不明白
geometry 出来的扇区总数是 498138
而 fat info和disgenius出来的是 498075

另外,这个0123版本的grub好像有点小问题
我在命令行里,按左右箭头键的时候,有时候正常,有时候就会出来4和6
就是连续按几次,有时候是左右移,有时候是4和6
不知道为什么会不断地numlock on/off切换
但是之前的版本没有这个问题

[ 本帖最后由 NicTense 于 2010-1-31 03:33 编辑 ]
回复

使用道具 举报

52#
 楼主| 发表于 2010-1-30 14:23:38 | 只看该作者
修正fat dir显示的问题。

fat.rar

4.27 KB, 下载次数: 64, 下载积分: 无忧币 -2

回复

使用道具 举报

53#
 楼主| 发表于 2010-1-30 14:25:24 | 只看该作者
@NicTense
geometry有包括MBR。

fat info显示的只有本分区的大小。

出来4,6?用虚拟机还是实机测试。应该不会吧。虚拟机特别是QEMU就经常会这样。

另外有时是键盘的问题,可以换台机器,再试,如果还是一样,那可能就是GRUB的问题了。

[ 本帖最后由 chenall 于 2010-1-30 14:30 编辑 ]
回复

使用道具 举报

54#
发表于 2010-1-30 14:30:50 | 只看该作者
把之前的fat32的sd卡格式化为fat16的
fat dir 依然出错,4g文件依然存在,还多了个sd256的文件,0字节,(sd256实际上是卷标)
fat creat 的文件,直接用文件名依然错误1,加/错误11,加(hd0,0)则创建成功

54楼的版本我再测试一下
回复

使用道具 举报

55#
发表于 2010-1-30 14:32:52 | 只看该作者
实机,因为我要读slic信息,只能用实机
acer 4810tg 笔记本,用256m的sd卡启动进入grub
呆会换台机子测试一下
我先看看新版本解决了问题没有
回复

使用道具 举报

56#
 楼主| 发表于 2010-1-30 14:33:32 | 只看该作者
忘了说下,新的版本必须要加路径至少也要 ()/
和dd要求一样,因为是要调用dd的。所以就和dd命令要求一样了。
回复

使用道具 举报

57#
发表于 2010-1-30 14:45:04 | 只看该作者

回复 #58 chenall 的帖子

怪不得,我说例子都是直接写文件名,怎么我这里一定得写完整路径才行

#54楼的新版本 fat16下测试正常,我再把卡格式化成fat32测试一下,看样子可能跟fat32无关,之前fat16一样出问题

呆会再来报告
回复

使用道具 举报

58#
发表于 2010-1-30 14:45:22 | 只看该作者
新版本fat dir在FAT12/16下正常了。我再测试一下FAT32情况
回复

使用道具 举报

59#
 楼主| 发表于 2010-1-30 14:48:02 | 只看该作者
最好能测试一下创建、复制的功能,看看是否正常。。

因为我自己的测试条件有限,不能完全考虑到位。

另外为了提高复制的速度,最好使用(rd)做为临时中转盘,否则可能会很慢(和DD一样)
例子:
使用以下方式可能会比直接fat file copy (hd0,0)/bootmgr (hd1,0)/bootmgr快好倍(PXE上使用更是明显).

map --mem (hd0,0)/bootmgr (rd)
fat file copy (rd)+1 (hd1,0)/bootmgr

[ 本帖最后由 chenall 于 2010-1-30 14:49 编辑 ]
回复

使用道具 举报

60#
发表于 2010-1-30 15:03:40 | 只看该作者
fat32上测试,fat dir/fat file copy正常,下面的_SRS.ZIP是刚复制进去的。

[ 本帖最后由 zhaohj 于 2010-1-30 15:05 编辑 ]

Snap2.jpg (53.97 KB, 下载次数: 137)

Snap2.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-4 20:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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