阅读:3732回复:18
剩余nor flash 做成硬盘?????
有没有人能提供psm软件包的啊?我给intel打电话,他们回答要找供应商,供应商说他们转型不作了。
我自己试着添加fmd.cpp,已经修改注册表信息,但是都没有出现norflash文件夹。下面是主要问题: public下的fmc.cpp是生成.lib,我把它改成.dll,但是由于.def中是DSK_XXX,与程序中不符,编译不能通过,不知道该怎么改? 还有就是我除了修改注册表还要修改config.bib吗?怎么改?直接留出一块作为resever? 对了我看了eboot下的main.c中好像有个函数直接把剩余flash设成part_extend(大概是,不记得了),是不是就不用再修改了? |
|
沙发#
发布于: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驱动实现好了就可以了。 |
|
板凳#
发布于:2007-01-16 21:24
没有PSM的话用MS Flash也可以的嘛,CE自带
|
|
|
地板#
发布于:2007-01-17 09:48
谢谢zhengshijie和cool_harber!
flash是intel 的J3 norflash 只要把fmd.cpp加载进来,修改注册表就可以了吗?不用修改config.bib和eboot吗? 还有就是有人说要在fmd中加入偏移地址,是否需要呢? |
|
地下室#
发布于:2007-01-17 09:52
引用第1楼zhengshijie于2007-01-16 19:03发表的“”: 这个我在sourse中加过,好像下载后系统会死机,一会儿我再加加看。 |
|
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来存储,所以我也没有做过,但是如果我要做的话,我会相信自己,朝着正确的方向,仔细看现有的驱动源码,不怕出问题,有什么问题直接面对它解决它。有什么问题可以和我交流。 |
|
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的大小还是多余的空间的大小? |
|
7楼#
发布于:2007-01-17 16:31
你的MemBase为什么是B8380000?你不是基于S3C2440上的吗?如果是我觉得应该是B2000000,因为它的虚拟地址空间起始地址是0X92000000,加上512M到uncache的地址0xB2000000.MemLen你看fmd.cpp的应用应该是指的FLASH空间的大小,你可以起始地址加上偏移,MemLen减去偏移。因为你是两片组成的,所以注册表里需要加上这项"IsPairedFlash"=dword:1,另外麻烦你把你的硬件平台信息给的充分一些,FLASH的具体型号,CPU等。
|
|
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 |
|
9楼#
发布于:2007-01-17 19:18
还有一点我不明白,就是这样生成的stratad.dll是否是注册表中要用到的哪个?因为我看到fmd.cpp前面有提到利用fal.lib生产flashdrv.dll,可是注册表中的又是stratad.dll,不知道注册表中stratad.dll到底是怎么来的?
|
|
10楼#
发布于:2007-01-17 23:54
除非你的OS在ram中运行,否则做不到的。
24xx之类的CPU,OS存在NAND Flash中,但是运行都是在RAM中的,而不是XIP 如果是要做到这一点,除了IPSM,还可以用Flash FX之类的,不过都要收费 |
|
11楼#
发布于:2007-01-18 09:48
os是在ram中运行的,在main.c中有个BP_ReadData函数,就是在把flash中nk拷到ram中再运行。
买软件领导不让啊,说要不行,就要我自己写 大家再帮我看看,有什么地方需要修改的,今天我再仔细看下源码,看能不能整理出头绪? |
|
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的真实地址和大小就可以了。 |
|
|
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 |
|
14楼#
发布于:2007-01-19 10:34
引用第9楼zymxmu于2007-01-17 19:18发表的“”: 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会自动生成。 |
|
15楼#
发布于:2007-01-19 14:39
终于在控制面板的存储信息中看到了,3.45M的信息了。
太感谢大家了! |
|
16楼#
发布于:2007-06-28 15:27
请问zymxmu:
你最后是怎么解决的?我也试图编译一个strata.dll出来,但是def文件中的DSK_Open等函数怎么处理?platform.reg怎么配置? |
|
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 |
|
18楼#
发布于:2007-07-02 15:44
zymxmu 把你最后实现的方法总结一下,告诉一下大家吧,一起进步^_^!
|
|