index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3197回复:26

磁盘读写问题

楼主#
更多 发布于:2002-03-10 17:06
请教高手,如何把一个磁盘(Windows操作系统不能识别)的数据读写到另一个磁盘(windows系统),说说大概的思路,我一点都不懂,多谢啊!
pinta
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2004-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-14 18:46
to singwoo:
不共享内存,两块DSP相互独立。一般DSP内集成ROM和RAM,如果程序不大,片内的就足够用了。
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-14 16:59
1.一个程序在没有操作系统的情况下运行是没有问题的.
2.如果你能访问硬盘的话,那文件系统就没有问题了.fat16比较
容易些,不过每个分区不能很大. 我有fat16的资料,但都是日文的.
如果想要,我可以发给你.fat资料其实网上特别多的.

另,我也请教个菜问题:
你是用采集板上的dsp和主dsp共享内存的呀?还是采集板作为主
dsp的外设来搞的呀?



singwoo
pinta
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2004-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-14 15:46
to singwoo:
采集器的处理器是一块DSP,在一次实验中需要采集的数据量非常大,几百兆是有了。
完成对硬盘读写的难度并不大,控制板上也要用一块DSP。
问个比较菜的问题,一个程序在没有操作系统的情况下能运行吗?
我现在的思路是:访问硬盘BIOS,得到关于FAT的个数,所占用扇区数和根目录的大小及位置等参数。当数据到达时,先在根目录写文件名,再在FAT处分配簇号,根据簇号计算物理扇区地址,最后将数据写入相应的扇区,以上工作由DSP完成。这样硬盘中的数据是可以被操作系统识别的。
现在的问题是我手中关于FAT的资料不全,能给我提供些帮助吗?
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-14 10:00
请问各位:
没有盘符的硬盘怎么访问,VxD能够访问多大的硬盘空间。
谢谢!
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-14 00:40
to pinta:
   不敢指点啦,自己非常菜的。

一个采集器,一块控制板加一块硬盘。你的处理器是什么样的呢?
RAM大概有多大呢?文件系统比较耗资源的。cache的大小对于读写速度是挺关键的。

我认为像你这样的系统没必要用硬盘,除非你采集的数据量非常大。
而且实现硬盘也较难些,还要熟悉ata命令。

还不去用一块flash来做呢,实现比较简单。flash读写比较简单,
同样可以实现文件系统。加USB接口的话,网上的资料非常多。

要简单实现文件系统的话,
1。简单点定义几个读写的函数,文件系统最终调用这几个底层函数来工作。
如:
init(char drvno, char* data);
read( char drvno,long start_sector_no,long nb_of_sector_to_read,char* buffer_data);
write(char drvno,long start_sector_no,long nb_of_sector_to_write,char* buffer_data);
close(char drvno,char* data);
其中read,write函数把扇区号转换成flash的block number后读写flash。

2。看看posix文档中对文件系统标准函数的接口定义。
3。利用hash表来快速访问文件cache.

还有一种方法较难,但不用自己做电子硬盘.找块带usb主控制器
(ohc 较容易些)的cpu,用一个rtos,自己实现一个usb
主机协议栈,并简单定义一个类似于微软那样的驱动程序接口。
写个mass storage 驱动程序就行了。你自己做的协议栈,
写usb驱动程序的话就太easy了,有兴趣还可以接些鼠标呀,
键盘等usb设备呢。

呵呵,胡乱说说。
singwoo
pinta
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2004-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-03-13 20:07
to singwoo:
现在一个数据采集系统一般是通过一个PCI卡将数据传入计算机,为了将系统小型化,我计划抛开计算机而将数据直接写入硬盘。这样系统变为一个采集器,一块控制板加一块硬盘。完成数据采集后,可以通过USB将数据读入计算机(这时要在控制板上加USB控制器),或者
更简单一点直接将硬盘卸下,挂在计算机上做从盘,以完成数据的后续处理。
但是,写入硬盘的数据要被操作系统识别,所以要研究FAT。可苦于手中资料不全(关于FAT的),要是你做过独立于OS的可移植文件系统(FAT),请指点一二,谢谢了。

singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-03-12 17:18
to index:
这回正确了.原文件掉了一些信息.如fat12字符等.

to pinta:
用linux的分区工具查硬盘格式是指用来了解硬盘分区上的文件系统类型而已.


我现在正在研究直接读写硬盘,并想在硬盘上建立操作系统可以识别的文件系统.

你想建立一个新的文件系统让操作系统识别?
我做过独立于OS的可移植文件系统(FAT),对你的这个东西挺感兴趣的,呵呵.  


singwoo
pinta
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2004-12-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-03-12 16:39
关于FAT16的资料可以在DOS使用手册中找到。
请教singwoo,我现在正在研究直接读写硬盘,并想在硬盘上建立操作系统可以识别的文件系统,所以对你所说的,用linux的分区工具查硬盘格式很感兴趣,你能不能说得清楚一些,谢谢了。
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-03-12 16:02
singwoo:
我格式化后再做了一遍,是空盘,结果如下。这回对了吗?
附件名称/大小 下载次数 最后更新
2002-03-12_debug.out.txt (3KB)  0
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-03-12 16:02
singwoo:
我格式化后再做了一遍,是空盘,结果如下。
附件名称/大小 下载次数 最后更新
2002-03-12_debug.out.txt (3KB)  0
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-03-12 15:41

呵呵,不用谢.
不过你那个debug.out里的信息有点问题.建议format后再
输出一下debug.out.

还有,对boot sector parse时要注意字节顺序.
非intel 80x86的cpu要注意字节对齐.  
singwoo
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-03-12 15:24
非常感谢singwoo:
我是按你的方法做的,用的是软盘。结果是:

附件名称/大小 下载次数 最后更新
2002-03-12_debug.out.txt (3KB)  2
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-03-12 14:56

而我的意思是让你试一下软盘.因为你先想了解fat的格式.
而软盘是fat12的格式.比较简单.

我猜你出错的原因是你用你的那块不能识别硬盘来试的.
既然在windows下不能识别,当然要出错的了.

还有一种方法可以得到boot sector,就是用 norton diskedit
非常老了,但很管用.(只能在dos下用)

fat表信息和dir信息的索引的确在boot sector.你parse
一下就可以得到了.老早我做过fat文件系统的.

不好意思,QQ不能上.我不在国内.晚上我在家可以上QQ.
我的QQ是84070533











singwoo
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-03-12 14:23
singwoo:
你是说我这样做出现了问题吗?我是说怎么从其中获得fat表和dir信息
我的QQ:76300124
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-03-12 14:08
to index:
1. 这个方法在我机器上是没问题的.win98,win2000都没有问题.
2. boot sector 中有fat表和dir信息.
singwoo
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-03-12 13:47
singwoo:我按你的方法做了,结果与我前面说的有点类似,都有“Non-System diskette
Replace and press any key to reboot ”
这些东西,只是多了地址及16进制表示,这是boot sector吗,怎么获得fat表的大小,cluster的大小等信息
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-03-12 12:59
[quote]我读取了软盘的一个扇驱(利用此网站的一个vxd程序),from head=0 track=0 sector=1,并把它存入一个TXT文件中,结果是
“?
singwoo
index
驱动牛犊
驱动牛犊
  • 注册日期2002-03-10
  • 最后登录2002-08-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-03-12 12:28
我读取了软盘的一个扇驱(利用此网站的一个vxd程序),from head=0 track=0 sector=1,并把它存入一个TXT文件中,结果是
“?
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-03-12 12:15
请介绍一个流程:假设是fat16,我要获得上面的文件,应先读什么区,再根据什么读取什么,一个流程。多谢!


fat16那就太简单了.
1.先读 mbr,读出你想要处理的分区的起始扇区(boot sector).
2.读出boot sector中fat表的大小,cluster的大小等信息.
3.利用以上信息确定dir根目录的起始扇区.
4.在目录表中查找你想处理的文件的目录项.
5.根据目录项中起始扇区号,结合fat表,就可读取文件的数据了.

建议,用软盘先试,软盘没有mbr的,所以直接可以从第二步开始.
用debug 读取head= 0,cylinder 0,sector 1)扇区就是boot sector 了.
singwoo
上一页
游客

返回顶部