3027|8

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教关于IPSM的问题 [复制链接]

大侠好:
   目前修改了FLASH升级到64M,现在已经可以正常进入BOOT的MAIN中,用以前的PSM也可以进入到CE中,但是分区还是跟以前一样,在CE下可用的只有3M。
   现在我将IPSM中唯一可以修改的文件plat_api.c进行修改:
如下
UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr)
{
    static const PSM_OEMInfo oem_info = {
        /* PhysicalReadStartAddress      */   (VOID_PTR)0x00000000,
        /* PhysicalWriteStartAddress     */   (VOID_PTR)0x00000000,
        /* PhysicalBurstReadStartAddress */   (VOID_PTR)0x00000000,
        /* VirtualReadStartAddress       */   (VOID_PTR)0x86500000,  //OEMaddressTable 中定义的虚拟内存地址
        /* VirtualWriteStartAddress      */   (VOID_PTR)0x86500000,  //...
        /* VirtualBurstReadStartAddress  */   (VOID_PTR)0x86500000,  //...
        /* MaximumArrayLength        */       0x04000000,    //FLASH的大小 = 64M
        /* MaximumRegistrySize           */   0x00080000,    //这个是以前的没修改

        /* ManagedAreaStart               */  0x01A00000,    //目前内核还是26M

        /* ManagedAreaLength             ,*/ 0x02400000,   // 64M - 26M =0x02400000
               
        /*ManagedAreaLength = MaximumArrayLength - ManagedAreaStart*/                                       

        /* ReadBusWidth                  */   32,
        /* WriteBusWidth                 */   32,

        /* BurstReadBusWidth             */   0
    };

    /* Copy the local OEMInfo structure out to the caller's structure */
    *oem_info_ptr = oem_info;

    /* enable/disable polling for interrupts */
    Interrupts_Polling_Write = FALSE;
    Interrupts_Polling_Erase = TRUE;

    /* enable/disable HWRWW */
    Multiple_Partitions = FALSE;

    /* no polling for interrupts if HWRWW is enable */
    if (Multiple_Partitions)
    {
        Interrupts_Polling_Write = FALSE;
        Interrupts_Polling_Erase = FALSE;
    }
*oem_info_ptr = oem_info;
RETAILMSG (1, (TEXT("PLAT_DefineArrayParameters() ManagedAreaStart = 0x%X\r\n"),oem_info.ManagedAreaStart));
RETAILMSG (1, (TEXT("PLAT_DefineArrayParameters() ManagedAreaLength = 0x%X\r\n"),oem_info.ManagedAreaLength));
    /* All done; return with no errors */
    return(FALSE);
}
同时,将CONFIG.BIB中原来FLASH对应的虚拟地址0x8000 0000改成对应的0x86500000
以前的:IF FLASH_SIZE_32_MB
        NK   80080000 1A00000 RAMIMAGE   不知道为什么变成8008 0000了
ENDIF
现在也对应修改成:
        IF FLASH_SIZE_32_MB
        NK   86580000 1A00000 RAMIMAGE   个人觉得本来应该是86500000 ,但是也对应+8 0000(这个不是BOOT_FLASH_BASE_U_VIRTUAL的地址,BOOT_FLASH_BASE_U_VIRTUAL = BOOT_FLASH_BASE_C_VIRTUAL + 0x20000000)
----------------------------------------------------------------------------------------------------------
可是修改完了,将内核下进去:
打印信息如下:
Windows CE Kernel for ARM (Thumb Enabled) Built on Aug  4 2008 at 18:38:38
ProcessorType=0411  Revision=7
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 865813e4
USING_COPROCSUPPORT
DS1302_Initial
Sp=ffffc7cc
PSMFSD:DLL Process Attach
++++++PLAT_DefineArrayParameters() ManagedAreaStart = 0x1A00000
++++++PLAT_DefineArrayParameters() ManagedAreaLength = 0x2400000

Data Abort: Thread=9e5e5000 Proc=96c265f0 'filesys.exe'
AKY=00000003 PC=96c2b5a4(???+0x96c2b5a4) RA=865c227c(NK.EXE+0x0004227c) BVA=02921000 FSR=000004f6
PSMFSD:DLL Process Detach
Data Abort: Thread=9e5e5000 Proc=96c265f0 'filesys.exe'
AKY=00000003 PC=86588a1c(NK.EXE+0x00008a1c) RA=86588a08(NK.EXE+0x00008a08) BVA=03d81b30 FSR=00000007
        ENDIF
系统就执行到这不走了,请问是什么原因造成的呢??

最新回复

现在我有两个问题和一个疑问请教: 问题1:我以前的OEMaddresstable中的部分:         DCD BOOT_FLASH_BASE_C_VIRTUAL,        BOOT_FLASH_BASE_PHYSICAL, 32        ; (8000 0000, 0000 0000) nCS0: BOOT ROM         DCD CS2_L_BASE_C_VIRTUAL,        CS2_L_BASE_PHYSICAL,          8        ; (8200 0000, 0800 0000) nCS2         DCD CS2_H_BASE_C_VIRTUAL,        CS2_H_BASE_PHYSICAL,          8        ; (8280 0000, 0A00 0000) nCS2         DCD CS3_L_BASE_C_VIRTUAL,        CS3_L_BASE_PHYSICAL,          8        ; (8300 0000, 0C00 0000) nCS3         DCD CS3_H_BASE_C_VIRTUAL,        CS3_H_BASE_PHYSICAL,          8        ; (8380 0000, 0E00 0000) nCS3         DCD CS4_L_BASE_C_VIRTUAL,        CS4_L_BASE_PHYSICAL,          1        ; (9670 0000, 1000 0000) nCS4         DCD CS4_H_BASE_C_VIRTUAL,        CS4_H_BASE_PHYSICAL,          1        ; (9680 0000, 1200 0000) nCS4         DCD CS5_L_BASE_C_VIRTUAL,        CS5_L_BASE_PHYSICAL,          1        ; (9690 0000, 1400 0000) nCS5         DCD CS5_H_BASE_C_VIRTUAL,        CS5_H_BASE_PHYSICAL,          1        ; (96A0 0000, 1600 0000) nCS5 从FLASH往下的nCS2~nCS5是干什么的呢??我可否将它们都设置成1,或者干脆删除掉??我搜了一下BSP没看到哪用到这些东西! 如果可以我就可以给nCS0对应的FLASH分配64M的内存空间了! 问题2:我对照了一下其他BSP的PSM和CONFIG.BIB,发现还有一种 NK    800B8000的情况 ;       Name | Virtual/Cached | Size | Region Type MEMORY IF IMGFLASH !     IF MMXIP_MEMMAP !         NK    800B8000  02000000 RAMIMAGE     ; SDRAM 32MB: [800B 8000 -> 820B 7FFF]         RAM   820B8000  01C00000 RAM          ; SDRAM 28MB: [820B 8000 -> 83CB 7FFF] 请问这个B8000是从哪来的呢?? 问题3: 请问 PSM中的    /* VirtualReadStartAddress       */   (VOID_PTR)0xA0000000,    /* VirtualWriteStartAddress      */   (VOID_PTR)0xA0000000,    /* VirtualBurstReadStartAddress  */   (VOID_PTR)0xA0000000, 这个值是否 = BOOT_FLASH_BASE_U_VIRTUAL??? 以前我的PSM和OEMaddressTable刚好能对应上: #define BOOT_FLASH_BASE_PHYSICAL                        0x00000000 #define BOOT_FLASH_BASE_C_VIRTUAL                        0x80000000 #define BOOT_FLASH_BASE_U_VIRTUAL        (BOOT_FLASH_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET) 如果是这样的话,我现在的BOOT_FLASH_BASE_C_VIRTUAL为0x86500000,那么BOOT_FLASH_BASE_U_VIRTUAL = 0xA650 0000 可是我看资料和其他的BSP发现这个地方好象还是有条件的,貌似是以什么形式启动 (即BOOT_FLASH_BASE_U_VIRTUAL = 0x80000000 + 0x20000000 = 0xA0000000)  详情 回复 发表于 2009-3-3 21:42
点赞 关注

回复
举报

195

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
ding!
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你怎么用以前的PSM可以识别3M的空间?
什么都没有修改吗?包括config.bib还有PSM的配置定义


NK  80080000 1A00000 RAMIMAGE  不知道为什么变成8008 0000了
你的前面80000是不是留出来给bootloader之类的用的?
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 hzdysymbol 的回复:
你怎么用以前的PSM可以识别3M的空间?
什么都没有修改吗?包括config.bib还有PSM的配置定义


NK  80080000 1A00000 RAMIMAGE  不知道为什么变成8008 0000了
你的前面80000是不是留出来给bootloader之类的用的?


config.bib没有修改,PSM也没有修改,发现可以运行
后来发现原来我只改了OEMaddressTable中定义的虚拟地址,连BOOT中的MAIN中FLASH_IMG_START都没改成现在用的地址

现在我将BOOT中的所有用到8000 0000这个虚拟地址的地方,和config.bib中都做了修改

也将PSM中的改成现在相应的虚拟地址
/* VirtualReadStartAddress      */  (VOID_PTR)0xA6500000,  //OEMaddressTable 中定义的虚拟内存地址(NO CACHE)
/* VirtualWriteStartAddress      */  (VOID_PTR)0xA6500000,  //...
/* VirtualBurstReadStartAddress  */  (VOID_PTR)0xA6500000,  //...

其他不改就可以通过
但是还是识别剩余3M多空间没变!

可是把下面的改成这样:
         /* MaximumArrayLength            */   0x04000000,    (64M)
        /* MaximumRegistrySize           */   0x00080000,   
  
        /* ManagedAreaStart              */   0x01A00000,     (内核26M)
        /* ManagedAreaLength             */   0x02000000,      (剩余30M多)  
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 
接上(一不小心点了“提交回复”):

可是把下面的改成这样:
        /* MaximumArrayLength            */  0x04000000,    (64M)
        /* MaximumRegistrySize          */  0x00080000,  
  
        /* ManagedAreaStart              */  0x01A00000,    (内核26M)
        /* ManagedAreaLength            */  0x02000000,      (剩余30M多)
就会出现异常:
PLAT_DefineArrayParameters*****-----is running---
Data Abort: Thread=9e5e5000 Proc=96c265f0 'filesys.exe'
AKY=00000003 PC=96c2b5a4(???+0x96c2b5a4) RA=865c21e8(NK.EXE+0x000421e8) BVA=02921000 FSR=000004f6
PSMFSD:DLL Process Detach
Data Abort: Thread=9e5e5000 Proc=96c265f0 'filesys.exe'
AKY=00000003 PC=8658899c(NK.EXE+0x0000899c) RA=86588988(NK.EXE+0x00008988) BVA=03d81b30 FSR=00000007
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

6
 
        /* MaximumArrayLength            */  0x04000000,    (64M)
        /* MaximumRegistrySize          */  0x00080000,  
  
        /* ManagedAreaStart              */  0x01A00000,    (内核26M)
        /* ManagedAreaLength            */  0x02000000,      (剩余30M多)
这几个值原来是怎么样的?
改大了就有问题,是不是你的地址空间分配还有问题?
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 hzdysymbol 的回复:
        /* MaximumArrayLength            */  0x04000000,    (64M)
        /* MaximumRegistrySize          */  0x00080000,  
  
        /* ManagedAreaStart              */  0x01A00000,    (内核26M)
        /* ManagedAreaLength            */  0x02000000,      (剩余30M多)
这几个值原来是怎么样的?
改大了就有问题,是不是你的地址空间分配还有问题?


原来32M的是:
/* MaximumArrayLength            */   0x01F00000,
/* MaximumRegistrySize           */   0x00080000,
/* ManagedAreaLength             */   0x00500000,
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
“改大了就有问题,是不是你的地址空间分配还有问题? ”
应该没问题啦?
我把改的地方都列出来:
1、DCD BOOT_FLASH_BASE_C_VIRTUAL,        BOOT_FLASH_BASE_PHYSICAL, 64
               ; (8650 0000, 0000 0000) nCS0: BOOT ROM
   DCD PCMCIA_S1_CMN_C_VIRTUAL,        PCMCIA_S1_CMN_PHYSICAL,          32               
              ; (8000 0000, 3C00 0000) PCMCIA S1 COMMON MEM Space
   将这两个地方的虚拟地址互换,并将所有定义处都修改了对应的虚拟地址
2、在EBOOT的MAIN中:FLASH_IMG_START 0x86580000(原来是0x80080000)
3、在CONFIG.BIB中
        IF FLASH_SIZE_32_MB
        NK   86580000 1A00000 RAMIMAGE
        ENDIF
      
        IF IMGFLASH
        ROMSTART=86580000
        ROMWIDTH=32
        ENDIF
   (此二处原来都是80080000)
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
现在我有两个问题和一个疑问请教:
问题1:我以前的OEMaddresstable中的部分:
        DCD BOOT_FLASH_BASE_C_VIRTUAL,        BOOT_FLASH_BASE_PHYSICAL, 32        ; (8000 0000, 0000 0000) nCS0: BOOT ROM
        DCD CS2_L_BASE_C_VIRTUAL,        CS2_L_BASE_PHYSICAL,          8        ; (8200 0000, 0800 0000) nCS2
        DCD CS2_H_BASE_C_VIRTUAL,        CS2_H_BASE_PHYSICAL,          8        ; (8280 0000, 0A00 0000) nCS2
        DCD CS3_L_BASE_C_VIRTUAL,        CS3_L_BASE_PHYSICAL,          8        ; (8300 0000, 0C00 0000) nCS3
        DCD CS3_H_BASE_C_VIRTUAL,        CS3_H_BASE_PHYSICAL,          8        ; (8380 0000, 0E00 0000) nCS3
        DCD CS4_L_BASE_C_VIRTUAL,        CS4_L_BASE_PHYSICAL,          1        ; (9670 0000, 1000 0000) nCS4
        DCD CS4_H_BASE_C_VIRTUAL,        CS4_H_BASE_PHYSICAL,          1        ; (9680 0000, 1200 0000) nCS4
        DCD CS5_L_BASE_C_VIRTUAL,        CS5_L_BASE_PHYSICAL,          1        ; (9690 0000, 1400 0000) nCS5
        DCD CS5_H_BASE_C_VIRTUAL,        CS5_H_BASE_PHYSICAL,          1        ; (96A0 0000, 1600 0000) nCS5

从FLASH往下的nCS2~nCS5是干什么的呢??我可否将它们都设置成1或者干脆删除掉??我搜了一下BSP没看到哪用到这些东西!
如果可以我就可以给nCS0对应的FLASH分配64M的内存空间了!
问题2:我对照了一下其他BSP的PSM和CONFIG.BIB,发现还有一种 NK    800B8000的情况
;       Name | Virtual/Cached | Size | Region Type
MEMORY
IF IMGFLASH !
    IF MMXIP_MEMMAP !
        NK    800B8000  02000000 RAMIMAGE     ; SDRAM 32MB: [800B 8000 -> 820B 7FFF]
        RAM   820B8000  01C00000 RAM          ; SDRAM 28MB: [820B 8000 -> 83CB 7FFF]
请问这个B8000是从哪来的呢??
问题3:
请问 PSM中的
   /* VirtualReadStartAddress       */   (VOID_PTR)0xA0000000,
   /* VirtualWriteStartAddress      */   (VOID_PTR)0xA0000000,
   /* VirtualBurstReadStartAddress  */   (VOID_PTR)0xA0000000,

这个值是否 = BOOT_FLASH_BASE_U_VIRTUAL???
以前我的PSM和OEMaddressTable刚好能对应上:
#define BOOT_FLASH_BASE_PHYSICAL                        0x00000000
#define BOOT_FLASH_BASE_C_VIRTUAL                        0x80000000
#define BOOT_FLASH_BASE_U_VIRTUAL        (BOOT_FLASH_BASE_C_VIRTUAL + CACHED_TO_UNCACHED_OFFSET)
如果是这样的话,我现在的BOOT_FLASH_BASE_C_VIRTUAL为0x86500000,那么BOOT_FLASH_BASE_U_VIRTUAL = 0xA650 0000
可是我看资料和其他的BSP发现这个地方好象还是有条件的,貌似是以什么形式启动
(即BOOT_FLASH_BASE_U_VIRTUAL = 0x80000000 + 0x20000000 = 0xA0000000)
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表