zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
阅读:3732回复:18

剩余nor flash 做成硬盘?????

楼主#
更多 发布于:2007-01-16 16:26
有没有人能提供psm软件包的啊?我给intel打电话,他们回答要找供应商,供应商说他们转型不作了。  
我自己试着添加fmd.cpp,已经修改注册表信息,但是都没有出现norflash文件夹。下面是主要问题:
public下的fmc.cpp是生成.lib,我把它改成.dll,但是由于.def中是DSK_XXX,与程序中不符,编译不能通过,不知道该怎么改?
还有就是我除了修改注册表还要修改config.bib吗?怎么改?直接留出一块作为resever?
对了我看了eboot下的main.c中好像有个函数直接把剩余flash设成part_extend(大概是,不记得了),是不是就不用再修改了?
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
沙发#
发布于:2007-01-16 19:03
用什么FLASH芯片,型号是什么?fmd.cpp是生成stratad_lib吧,你当然不能把它直接改成dll,你想生成动态库的话,需要连接fal.lib,像这样:
TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
           $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\fal.lib \

然后你把FMD.CPP驱动实现好了就可以了。
cool_harber
驱动小牛
驱动小牛
  • 注册日期2003-03-01
  • 最后登录2009-04-28
  • 粉丝0
  • 关注0
  • 积分524分
  • 威望132点
  • 贡献值0点
  • 好评度126点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-16 21:24
没有PSM的话用MS Flash也可以的嘛,CE自带
博客:www.cnblogs.com/harber
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-17 09:48
谢谢zhengshijie和cool_harber!
flash是intel 的J3 norflash
只要把fmd.cpp加载进来,修改注册表就可以了吗?不用修改config.bib和eboot吗?
还有就是有人说要在fmd中加入偏移地址,是否需要呢?
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-17 09:52
引用第1楼zhengshijie2007-01-16 19:03发表的“”:
用什么FLASH芯片,型号是什么?fmd.cpp是生成stratad_lib吧,你当然不能把它直接改成dll,你想生成动态库的话,需要连接fal.lib,像这样:
TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib
           $(_COMMONOAKROOT)lib$(_CPUINDPATH)fal.lib

然后你把FMD.CPP驱动实现好了就可以了。



这个我在sourse中加过,好像下载后系统会死机,一会儿我再加加看。
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
5楼#
发布于:2007-01-17 13:45
to zymxmu:
  我看了一下代码,wince500\public\common\oak\drivers\block\msflashfmd\strata\fmd.cpp
还有该目录下的stratad\sources stratad.reg等文件,有几点希望你能看到,
sources ->CDEFINES=$(CDEFINES) -DREAD_FROM_REGISTRY
定义了DREAD_FROM_REGISTRY,所以fmd.cpp->FMD_Init(...)->有关FLASH的起始地址,长度,所以stratad.reg中的:
 "MemBase"=dword:00000000      
   "MemLen"=dword:00000000
MemLen不能为0,请指定和你实际FLASH的长度,另外起始地址,你也需要考虑,偏移出eboot的存储空间来。比如说保留两个block,256K,我不知道你的硬件设计是怎样的,用了几片J3 NOR FLASH,一片的话好像只有32M,你的NK能放下吗?因为大多的系统都不用NOR FLASH来存储,所以我也没有做过,但是如果我要做的话,我会相信自己,朝着正确的方向,仔细看现有的驱动源码,不怕出问题,有什么问题直接面对它解决它。有什么问题可以和我交流。
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-17 15:35
太感谢了!我一定仔细再看看源码。
我用的pb4.2 ,板子用了2片j3 16M的flash。一共是32M,eboot好像是2个256k,nk大概是25M,剩下的作出可以存储数据的空间。
现在的reg是:"MemBase"=dword:B8380000    
                     "MemLen"=dword:01F80000
我有个疑问,就是MemLen是指nk的大小还是多余的空间的大小?
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
7楼#
发布于:2007-01-17 16:31
你的MemBase为什么是B8380000?你不是基于S3C2440上的吗?如果是我觉得应该是B2000000,因为它的虚拟地址空间起始地址是0X92000000,加上512M到uncache的地址0xB2000000.MemLen你看fmd.cpp的应用应该是指的FLASH空间的大小,你可以起始地址加上偏移,MemLen减去偏移。因为你是两片组成的,所以注册表里需要加上这项"IsPairedFlash"=dword:1,另外麻烦你把你的硬件平台信息给的充分一些,FLASH的具体型号,CPU等。
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-01-17 19:14
"MemBase"=dword:B8380000    "MemLen"=dword:01F80000 是开发板自带的注册表信息。原本把B8380000 开始的01F80000长度的flash都分给nk。我把它改为"MemBase"=dword:BA080000
"MemLen"=dword:00180000 。不知道对否?
ARM是pxa255; flash是E28F128J3
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-01-17 19:18
还有一点我不明白,就是这样生成的stratad.dll是否是注册表中要用到的哪个?因为我看到fmd.cpp前面有提到利用fal.lib生产flashdrv.dll,可是注册表中的又是stratad.dll,不知道注册表中stratad.dll到底是怎么来的?
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-01-17 23:54
除非你的OS在ram中运行,否则做不到的。
24xx之类的CPU,OS存在NAND Flash中,但是运行都是在RAM中的,而不是XIP
如果是要做到这一点,除了IPSM,还可以用Flash FX之类的,不过都要收费
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-01-18 09:48
os是在ram中运行的,在main.c中有个BP_ReadData函数,就是在把flash中nk拷到ram中再运行。
买软件领导不让啊,说要不行,就要我自己写      
大家再帮我看看,有什么地方需要修改的,今天我再仔细看下源码,看能不能整理出头绪?
cool_harber
驱动小牛
驱动小牛
  • 注册日期2003-03-01
  • 最后登录2009-04-28
  • 粉丝0
  • 关注0
  • 积分524分
  • 威望132点
  • 贡献值0点
  • 好评度126点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-01-18 22:16
怎么弄得这么复杂
用Intel 的nor flash很容易的啊。
PB自带的MS Strata Flash驱动就可以,你在帮助里面找一下,很容易。
直接从catalog里面选这个特征加上。
然后在platform.reg里面参照wince500\public\common\oak\drivers\block\msflashfmd\strata
下的注册表规定好你要用的nor flash的真实地址和大小就可以了。
博客:www.cnblogs.com/harber
wenzai
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2011-03-04
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望424点
  • 贡献值0点
  • 好评度309点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-01-19 09:41
是的,如果是在RAM中运行,那么设置一下注册表就可以了,按默认的设置,NORFLASH没有直接出现,但是在存储管理器可以看到。在debug模式下就是测试到了。

; @CESYSGEN IF CE_MODULES_STRATAD
; HIVE BOOT SECTION
; END HIVE BOOT SECTION
; StrataFlash block driver.
#include "$(DRIVERS_DIR)\block\msflashfmd\strata\stratad\stratad.reg"
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\StrataFMD]
   "MemBase"=dword:ba100000      
   "MemLen"=dword:00100000
; @CESYSGEN ENDIF CE_MODULES_STRATAD
zhengshijie
驱动小牛
驱动小牛
  • 注册日期2003-07-11
  • 最后登录2009-03-18
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望217点
  • 贡献值0点
  • 好评度199点
  • 原创分3分
  • 专家分0分
14楼#
发布于:2007-01-19 10:34
引用第9楼zymxmu2007-01-17 19:18发表的“”:
还有一点我不明白,就是这样生成的stratad.dll是否是注册表中要用到的哪个?因为我看到fmd.cpp前面有提到利用fal.lib生产flashdrv.dll,可是注册表中的又是stratad.dll,不知道注册表中stratad.dll到底是怎么来的?

stradad.dll不需要自己去把stratad_lib.lib fal.lib连接生成,在makefile里就有,很多public/common目录下的库,不是单个生成dll的,它们会集中在,public/common/cesysgen/makefile 可以看到,
stratad:: ceddk fal
                @set TARGETLIBS=$(OWNSTATICLIB) $(CEDDKLIB) $(SG_INPUT_LIB)\fal.lib
                -@xcopy /I $(OWNSTATICLIB) $(SG_OUTPUT_OAKLIB)
这个就会生成stratad.dll,其它像PUBLIC/COMMON/OAK/CSP/ARM/INTEL/PXA25X/下的驱动库,也可以在makefile里看到,
!ELSEIF "$(_TGTCPUFAMILY)"=="ARM"
csp:: pxa255_csp pxa27x_csp s3c2410x_csp s3c2440x_csp

#-------------------------------------------------------------------------------
#
# Intel PXA255 (XScale "Cotulla") CSP drivers.
#
pxa255_csp: pxa255_lcd pxa255_serial pxa255_pdd16550 pxa255_wavedev pxa25xusbfn pxa255_sdhc

pxa255_lcd pxa255_drvlib pxa255_ser16550 pxa255_serpdd::
    @echo Copying $@.*
    -@xcopy /I /D /Q $(SG_INPUT_LIB)\$@.* $(SG_OUTPUT_OAKLIB) >nul $(SG_XCOPYREDIRECT)

pxa255_serial:: com_mdd2 ser_card2 ser16550 pxa255_ser16550 pxa255_serpdd pxa255_drvlib ceddk
    @set TARGETLIBS=$(SG_OUTPUT_OAKLIB)\com_mdd2.lib $(SG_OUTPUT_OAKLIB)\ser_card2.lib \
        $(SG_OUTPUT_OAKLIB)\ser16550.lib \
        $(SG_OUTPUT_OAKLIB)\pxa255_ser16550.lib \
        $(SG_OUTPUT_OAKLIB)\pxa255_serpdd.lib \
        $(SG_OUTPUT_OAKLIB)\pxa255_drvlib.lib \
        $(SG_OUTPUT_OAKLIB)\ceddk.lib

pxa255_pdd16550:: oo16550 pxa255_drvlib ceddk
    @set TARGETLIBS=$(OWNSTATICLIB) \
        $(SG_OUTPUT_OAKLIB)\pxa255_drvlib.lib \
        $(SG_OUTPUT_OAKLIB)\ceddk.lib \
        $(SG_OUTPUT_OAKLIB)\com_mdd2.lib \
        $(SG_OUTPUT_OAKLIB)\serpddcm.lib \
        $(SG_OUTPUT_OAKLIB)\oo16550.lib \

pxa255_wavedev:: wavemdd pxa255_drvlib
    @set TARGETLIBS=$(OWNSTATICLIB) \
        $(SG_OUTPUT_OAKLIB)\wavemdd.lib \
        $(SG_OUTPUT_OAKLIB)\pxa255_drvlib.lib
由此推论,你不需要自己生成这个stratad.dll了,编译的PB自动会为你生成,你所要做的是把stratad.reg的内容包含到你的platform.reg中去就可以了,就用stratad.dll 替换flashdrv.dll。改好注册表,希望能帮助你明白为什么stratad.dll会自动生成。
zymxmu
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2010-07-12
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-01-19 14:39
终于在控制面板的存储信息中看到了,3.45M的信息了。
太感谢大家了!
city_lovelace
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-06-28 15:27
请问zymxmu:
       你最后是怎么解决的?我也试图编译一个strata.dll出来,但是def文件中的DSK_Open等函数怎么处理?platform.reg怎么配置?
city_lovelace
驱动牛犊
驱动牛犊
  • 注册日期2007-06-26
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-06-28 15:39
我是这样做的,最后发现根本就不会调用FMD_Init,不知道问题出在什么地方?请各位高手指点
1、把public下的strata目录拷贝到我的BSP目录下,修改stratad中的SOURCE文件为
         TARGETTYPE  = DYNLINK
      并引用相应的lib文件;
2、编译的时候发现stratad.def文件中的export的函数全为DSK_Open、DSK_Init...,同时还没有DLLMain函数,也不知道怎么修改,只好把fmd.c中以FMD_打头的函数定义在strata.def中
3、编译通过,将stratad.dll加入platform.bib,然后将stratad.reg的内容加入到platform.reg,并修改下面的内容
        "MemBase"=dword:81000000      
        "MemLen"=dword:00200000
buaadallas
驱动牛犊
驱动牛犊
  • 注册日期2005-03-16
  • 最后登录2007-10-18
  • 粉丝0
  • 关注0
  • 积分470分
  • 威望47点
  • 贡献值0点
  • 好评度47点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-07-02 15:44
zymxmu 把你最后实现的方法总结一下,告诉一下大家吧,一起进步^_^!
游客

返回顶部