S3C6410 CE6 RAM从128M升级到256M,修改config.bib和image_cfg.h,导致无法启动系统了。

lustring   2009-11-29 20:12 楼主
config.bib如下

  1. IF IMGMULTIXIP !

  2. #define     NKNAME       NK
  3. #define     RAMNAME      RAM
  4. #define     NKSTART      80100000

  5. IF SMDK6410_X5D
  6. #define     NKLEN        02100000    ; 33MB
  7. #define     RAMSTART     82200000
  8. #define     RAMLEN       01300000    ; 19MB (Will be auto-sized from the end of NK)
  9. ELSE
  10. #define     NKLEN        04F00000    ; 79MB (Max size, to match image_cfg.* files. This will be auto-sized)
  11. #define     RAMSTART     85000000
  12. #define     RAMLEN       09500000    ; 13MB (Will be auto-sized from the end of NK)
  13. ENDIF SMDK6410_X5D


  14. ;   Single XIP
  15. ;-----------------------------------------------------
  16. ;   NAME        ADDRESS     SIZE            TYPE
  17. ;-----------------------------------------------------
  18.     $(NKNAME)   $(NKSTART)  $(NKLEN)        RAMIMAGE
  19.     $(RAMNAME)  $(RAMSTART) $(RAMLEN)       RAM

  20. ENDIF


  21. IF IMGMULTIXIP

  22. #define     NKNAME          XIPKERNEL
  23. #define     SYSTEMNAME      NK
  24. #define     RAMNAME         RAM

  25. IF IMGPROFILER

  26. #define     NKSTART         80100000
  27. #define     NKLEN           00600000

  28. #define     SYSTEMSTART     80700000
  29. #define     SYSTEMLEN       038FC000

  30. #define     RAMSTART        80400000
  31. #define     RAMLEN          06100000

  32. ELSE

  33. #define     NKSTART         80100000
  34. #define     NKLEN           00300000

  35. #define     SYSTEMSTART     80400000
  36. #define     SYSTEMLEN       03BFC000

  37. #define     RAMSTART        80400000
  38. #define     RAMLEN          06100000

  39. ENDIF

  40. #define     CHAINSTART      83FFC000
  41. #define     CHAINLEN        00004000

  42. ;   Multiple XIP
  43. ;-----------------------------------------------------
  44. ;   NAME            ADDRESS         SIZE            TYPE
  45. ;-----------------------------------------------------
  46.     $(NKNAME)       $(NKSTART)      $(NKLEN)        RAMIMAGE
  47.     $(SYSTEMNAME)   $(SYSTEMSTART)  $(SYSTEMLEN)    NANDIMAGE
  48.     $(RAMNAME)      $(RAMSTART)     $(RAMLEN)       RAM
  49.     CHAIN           $(CHAINSTART)   $(CHAINLEN)     RESERVED

  50. ENDIF


  51. ; Common RAM areas

  52.     AUD_DMA     80002000    00002000        RESERVED
  53.     TEMPS       80010000    00010000        RESERVED
  54.     ARGS        80020800    00000800        RESERVED
  55.     DBGSER_DMA  80022000    00002000        RESERVED
  56.     SER_DMA     80024000    00002000        RESERVED
  57.     IR_DMA      80026000    00002000        RESERVED
  58.     SLEEP       80028000    00002000        RESERVED
  59.     EDBG        80030000    00020000        RESERVED
  60. IF SMDK6410_X5D
  61.     CMM         83500000    00300000        RESERVED
  62. ;    FIMG_BUF    82800000    00800000        RESERVED
  63.     DISPLAY     83800000    00400000        RESERVED
  64.     MFC_JPEG    83C00000    00400000        RESERVED
  65. ELSE
  66.         CMM         86500000    00300000        RESERVED
  67.         DISPLAY     86800000    00C00000        RESERVED
  68.         MFC_JPEG    87400000    00C00000        RESERVED
  69. ;        CMM         8E500000    00300000        RESERVED
  70. ;        DISPLAY     8E800000    00C00000        RESERVED
  71. ;        MFC_JPEG    8F400000    00C00000        RESERVED
  72. ENDIF SMDK6410_X5D




  73. CONFIG                  ; Other System Configuration for making image

  74.     COMPRESSION=ON      ; Binary compression for minimizing download transfer data
  75.     KERNELFIXUPS=ON     ; Kernel address fixup
  76.     AUTOSIZE=ON         ; ROM and RAM size will be resizing automatically for padding region

  77. IF IMGMULTIXIP

  78.     ROM_AUTOSIZE=OFF     ; you can measure how much rom is needed to each binary image if you set this flag as ON
  79.     RAM_AUTOSIZE=OFF     ; RAM size will be resizing automatically only when ROM_AUTOSIZE is ON
  80.     DLLADDR_AUTOSIZE=ON

  81.     XIPSCHAIN=$(CHAINSTART)

  82.     AUTOSIZE_ROMGAP=10000
  83.     AUTOSIZE_DLLADDRGAP=0
  84.     AUTOSIZE_DLLDATAADDRGAP=0
  85.     AUTOSIZE_DLLCODEADDRGAP=0

  86. ;
  87. ; ROMFLAGS is a bitmask of options for the kernel
  88. ;   ROMFLAGS    0x0000
  89. ;   ROMFLAGS    0x0001      Disallow Paging
  90. ;   ROMFLAGS    0x0010      Trust Module only
  91. ;
  92.     ROMFLAGS=0
  93.    
  94.    
  95. ELSE

  96. IF IMGTRUSTROMONLY
  97.     ROMFLAGS=10
  98. ELSE
  99.     ROMFLAGS=00
  100. ENDIF   ; END of IMGTRUSTROMONLY
  101.     ROMSTART = $(NKSTART)
  102.     ROMWIDTH = 32
  103.     ROMSIZE = $(NKLEN)

  104. ENDIF   ; END of IMGMULTIXIP

  105. IF IMGPROFILER
  106.     PROFILE=ON
  107. ELSE
  108.     PROFILE=OFF
  109. ENDIF



  110. IF IMGMULTIXIP
  111. #include "$(_TARGETPLATROOT)\FILES\MultipleXIP.bib"
  112. ENDIF


该怎么改呢!

除了这个地方还需要修改那些文件呢。

谢谢

回复评论 (50)

没整过,关注.
点赞  2009-11-29 20:25
bootloader的startup.s中对SP的初始化也要改,另外我的BSP中还改了两个文件,具体的忘了,明天帮你查下吧
点赞  2009-11-29 20:41
oemaddrtab_cfg.inc中g_oalAddressTable的空间大小也要修改一下
点赞  2009-11-29 20:48
另外看看RAM初始化部分针对128芯片了256的芯片有没有什么区别吧
点赞  2009-11-29 20:49
引用: 引用 4 楼 veabol 的回复:
另外看看RAM初始化部分针对128芯片了256的芯片有没有什么区别吧

有区别,有个寄存器叫RAMSIZE好像
点赞  2009-11-29 20:59
g_oalAddressTable

    ; mDDR 128 MB
        ;DCD     0x80000000, 0x50000000,  64     ; 64 MB DRAM
        DCD     0x80000000, 0x50000000,  128     ; 128 MB DRAM
        DCD                0x88000000, 0x58000000,  128      ; 128 MB Ext

红色部分是我在oemaddrtab_cfg.inc中添加的一句,然后在OAL\oal\init.c中添加了一个函数如下:
  1. BOOL OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)
  2. {
  3.         *pMemoryStart = 0x88000000;
  4.         *pMemoryLength = 0x08000000;
  5.         OALMSG(TRUE, (L"[OAL] OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)\r\n"));
  6.         return TRUE;
  7. }



系统启动的时候我看了一下调试信息,这个函数已经被调用了,但是进入系统后,我查看了一下内存,还是那么大,并没有增加呢

谢谢
点赞  2009-11-29 23:09
我刚刚看了一下,wince6的BSP中包含了三个start.s文件,一个是steploader中的,一个是eboot中的,还有一个是wince中OAL的,
bootloader中有一句mov          r3, #128                    ; 128MB DRAM
不知道是不更改这句呢,

BSP中还需要更改那些呢,config.bib需要修改吗,有人说可以不用修改,利用OEMGetExtensionDRAM 来扩展内存。还有一个imag_cfg.h文件中有一些宏定义,是否也需要修改呢!

太多了,晕了
点赞  2009-11-29 23:28
bootloader能起来了吗?

2440 做过,6410 没有搞过,呵呵。

这东西分为连续和非连续的内存扩展方法。
点赞  2009-11-30 00:37
#define _ISR_STARTADDRESS        (0x31Bfff00)
#define _MMUTT_STARTADDRESS        (0x31Bf8000)
#define _STACK_BASEADDRESS        (0x31Bf8000)
#define HEAPEND                        (0x31Bf0000)


这些定义看看你的BSP上有没有,也是需要修改的。

config.bib要改一下,“利用OEMGetExtensionDRAM 来扩展内存”不懂,如果你也不懂的话就改config.bib吧。
其它一些内存设置的内容你再研究研究吧,两个BANK的我也没改过

点赞  2009-11-30 08:53
引用: 引用 6 楼 so927 的回复:
g_oalAddressTable

? ? ; mDDR 128 MB
? ? ? ? ;DCD? ? 0x80000000, 0x50000000,? 64? ? ; 64 MB DRAM
? ? ? ? DCD? ? 0x80000000, 0x50000000,? 128? ? ; 128 MB DRAM
? ? ? ?DCD 0x88000000, 0x58000000,? 128? ? ? ; 128 MB Ext

红色部分是我在oemaddrtab_cfg.inc中添加的一句,然后在OAL\oal\init.c中添加了一个函数如下:
C/C++ codeBOOL OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{*pMemoryStart=0x88000000;*pMemoryLength=0x08000000;
    OALMSG(TRUE, (L"[OAL] OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)\r\n"));return TRUE;
}


系统启动的时候我看了一下调试信息,这个函数已经被调用了,但是进入系统后,我查看了一下内存,还是那么大,并没有增加呢

谢谢


不是在这里添加的。这里都没有链接这里,在platform Common的目录里
点赞  2009-11-30 10:37
引用: 引用 6 楼 so927 的回复:
g_oalAddressTable

? ? ; mDDR 128 MB
? ? ? ? ;DCD? ?  0x80000000, 0x50000000,? 64? ?  ; 64 MB DRAM
? ? ? ? DCD? ?  0x80000000, 0x50000000,? 128? ?  ; 128 MB DRAM
DCD                0x88000000, 0x58000000,? 128? ? ? ; 128 MB Ext

红色部分是我在oemaddrtab_cfg.inc中添加的一句,然后在OAL\oal\init.c中添加了一个函数如下:
C/C++ codeBOOL OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{*pMemoryStart=0x88000000;*pMemoryLength=0x08000000;
    OALMSG(TRUE, (L"[OAL] OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)\r\n"));return TRUE;
}


系统启动的时候我看了一下调试信息,这个函数已经被调用了,但是进入系统后,我查看了一下内存,还是那么大,并没有增加呢

谢谢

不连续的内存是要通过你这种方式进行回报给os
但是你的OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)实现时有问题的,之前我这边用过
点赞  2009-11-30 11:25
引用: 引用 7 楼 so927 的回复:
我刚刚看了一下,wince6的BSP中包含了三个start.s文件,一个是steploader中的,一个是eboot中的,还有一个是wince中OAL的,
bootloader中有一句mov? ? ? ? ? r3, #128? ? ? ? ? ? ? ? ? ? ; 128MB DRAM
不知道是不更改这句呢,

BSP中还需要更改那些呢,config.bib需要修改吗,有人说可以不用修改,利用OEMGetExtensionDRAM 来扩展内存。还有一个imag_cfg.h文件中有一些宏定义,是否也需要修改呢!

太多了,晕了

bootloader中有一句mov          r3, #128                    ; 128MB DRAM--》不用改,这个影响不到ce
config.bib和imag_cfg.h都是可改可不改的文件,取决于你程序中是否用到了这部分中的一些定义
点赞  2009-11-30 11:27
对啊,BSP也是要改的
点赞  2009-11-30 11:38
引用: 引用 11 楼 guopeixin 的回复:
引用 6 楼 so927 的回复:
g_oalAddressTable

? ? ; mDDR 128 MB
? ? ? ? ;DCD? ?? 0x80000000, 0x50000000,? 64? ?? ; 64 MB DRAM
? ? ? ? DCD? ?? 0x80000000, 0x50000000,? 128? ?? ; 128 MB DRAM
DCD 0x88000000, 0x58000000,? 128? ? ? ; 128 MB Ext

红色部分是我在oemaddrtab_cfg.inc中添加的一句,然后在OAL\oal\init.c中添加了一个函数如下:
C/C++ codeBOOL OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{*pMemoryStart=0x88000000;*pMemoryLength=0x08000000;
? ? OALMSG(TRUE, (L"[OAL] OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)\r\n"));return TRUE;
}


系统启动的时候我看了一下调试信息,这个函数已经被调用了,但是进入系统后,我查看了一下内存,还是那么大,并没有增加呢

谢谢


不连续的内存是要通过你这种方式进行回报给os
但是你的OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)实现时有问题的,之前我这边用过


请问一下这个函数该怎么实现呢,谢谢
点赞  2009-11-30 13:21
引用: 引用 10 楼 gooogleman 的回复:
引用 6 楼 so927 的回复:
g_oalAddressTable

? ? ; mDDR 128 MB
? ? ? ? ;DCD? ? 0x80000000, 0x50000000,? 64? ? ; 64 MB DRAM
? ? ? ? DCD? ? 0x80000000, 0x50000000,? 128? ? ; 128 MB DRAM
? ? ? ?DCD 0x88000000, 0x58000000,? 128? ? ? ; 128 MB Ext

红色部分是我在oemaddrtab_cfg.inc中添加的一句,然后在OAL\oal\init.c中添加了一个函数如下:
C/C++ codeBOOL OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{*pMemoryStart=0x88000000;*pMemoryLength=0x08000000;
? ? OALMSG(TRUE, (L"[OAL] OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)\r\n"));return TRUE;
}


系统启动的时候我看了一下调试信息,这个函数已经被调用了,但是进入系统后,我查看了一下内存,还是那么大,并没有增加呢

谢谢


不是在这里添加的。这里都没有链接这里,在platform Common的目录里



googleman,您是指什么不是添加再这里呢,是oalAddressTable,还是OEMGetExtensionDRAM 函数

点赞  2009-11-30 13:55
OEMGetExtensionDRAM 是微软提供的接口的了,在platform下的Common下面。
点赞  2009-11-30 13:56
OEMGetExtensionDRAM (LPDWORD pMemoryStart, LPDWORD pMemoryLength)的声明和实现都有问题
它的第一个参数其实是一个数组的指针,数据的每个元素是一个section结构体,结构体中指出来了你声明的内存的起始位置,长度和属性信息
另外,最大支持16个section(记不太清楚了)
kernel下代码进行memory代码初始化的会去以指针的方式引用该函数,你看一下就明白了
点赞  2009-11-30 14:15
楼上说的有道理,先试试再说
点赞  2009-11-30 14:33
PLATFORM\COMMON\SRC\COMMON\OTHER\memory.c
中有
BOOL OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{
    return FALSE;
}
没有代码,直接返回了FALSE

我在PLATFORM\DEVICEEMULATOR\SRC\OAL\OALLIB\init.c中找到了一个此函数的实现代码
  1. BOOL
  2. OEMGetExtensionDRAM(
  3.     LPDWORD lpMemStart,
  4.     LPDWORD lpMemLen
  5.     )
  6. {
  7.     typedef volatile unsigned long MegOfExtendedRam_t[1024 * 1024 / sizeof (unsigned long)];
  8.     MegOfExtendedRam_t *MegsOfRam = (MegOfExtendedRam_t *)EXTENDED_RAM_BASE;
  9.     DWORD each_meg;
  10.     const DWORD dwPageSize = 4096;        // PAGE_SIZE in ceddk isn't valid until later in boot

  11.     OALMSG(OAL_FUNC, (L"++OEMGetExtensionDRAM\r\n"));

  12.     // Employ a simple memory test to see that all N meg's are there.
  13.     // NB: Because an empty memory bus can "float" data for several
  14.     // cycles and appear as valid memory, discharge the bus before
  15.     // verifying the data.
  16.     //
  17.     // The probe is nondestructive, to allow the contents of extension
  18.     // RAM to be preserved across soft resets
  19.     try {
  20.         for (each_meg = 0; each_meg < EXTENDED_RAM_MEGS; ++each_meg)
  21.         {
  22.             unsigned long temp0 = MegsOfRam[each_meg][0];
  23.             unsigned long temp1 = MegsOfRam[each_meg][1];

  24.             MegsOfRam[each_meg][0] = 0x55555555UL;        // Write pattern
  25.             MegsOfRam[each_meg][1] = ~0x55555555UL;        // Discharge
  26.             if (MegsOfRam[each_meg][0] != 0x55555555UL)        // Verify patern
  27.                 break;
  28.             MegsOfRam[each_meg][0] = ~0x55555555UL;        // Write pattern-not
  29.             MegsOfRam[each_meg][1] = 0x55555555UL;        // Discharge
  30.             if (MegsOfRam[each_meg][0] != ~0x55555555UL)
  31.                 break;

  32.             MegsOfRam[each_meg][0] = temp0;
  33.             MegsOfRam[each_meg][1] = temp1;
  34.         }
  35.     } except (EXCEPTION_EXECUTE_HANDLER) {
  36.         OALMSG(OAL_FUNC, (L"--OEMGetExtensionDRAM\r\n"));
  37.         return FALSE; // no extension DRAM
  38.     }

  39.     *lpMemStart = EXTENDED_RAM_BASE;
  40.     *lpMemLen = each_meg * sizeof (MegOfExtendedRam_t);
  41.     OALMSG(OAL_LOG_INFO, (L"OEMGetExtensionDRAM: found 0x%08x bytes of ram at 0x%08x\r\n",
  42.         *lpMemLen, *lpMemStart));

  43.     // adjust by RAM FMD amount
  44.     if(g_dwExtensionRAMFMDSize != 0) {
  45.         if((g_dwExtensionRAMFMDSize & (dwPageSize - 1)) != 0) {
  46.             OALMSG(OAL_LOG_WARN,
  47.                 (L"OEMGetExtensionDRAM: g_dwExtensionRAMFMDSize 0x%08x not a multiple of %u\r\n",
  48.                 g_dwExtensionRAMFMDSize, dwPageSize));
  49.         } else if(*lpMemLen < g_dwExtensionRAMFMDSize) {
  50.             OALMSG(OAL_LOG_WARN,
  51.                 (L"OEMGetExtensionDRAM: 0x%08x bytes of extension ram not enough to satisfy FMD request for 0x%0x bytes\r\n",
  52.                 *lpMemLen, g_dwExtensionRAMFMDSize));
  53.         } else {
  54.             g_pvExtensionRAMFMDBaseAddr = (PVOID) EXTENDED_RAM_BASE;
  55.             *lpMemStart = EXTENDED_RAM_BASE + g_dwExtensionRAMFMDSize;
  56.             *lpMemLen -= g_dwExtensionRAMFMDSize;
  57.                 OALMSG(OAL_LOG_INFO, (L"OEMGetExtensionDRAM: reserving 0x%08x bytes of ram at 0x%08x for RAMFMD\r\n",
  58.                     g_dwExtensionRAMFMDSize, g_pvExtensionRAMFMDBaseAddr));
  59.         }
  60.     }

  61.     OALMSG(OAL_LOG_INFO, (L"OEMGetExtensionDRAM: returning 0x%08x bytes of ram at 0x%08x\r\n",
  62.         *lpMemLen, *lpMemStart));

  63.     OALMSG(OAL_FUNC, (L"--OEMGetExtensionDRAM\r\n"));

  64.     return TRUE;
  65. }


有点搞不明白了
点赞  2009-11-30 14:44
123下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复