zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:3386回复:19

关于CE的NK.bin的一个疑问

楼主#
更多 发布于:2005-04-13 17:15
各位大虾的一直以来对小弟的帮助,小弟感激不尽,在此衷心感谢.但是目前遇到了一个困惑的问题,就是S3C2410下面Nk.bin最大能做到多大.就我目前的试验有如下结果,希望大家给指个路,我要想做36M的NK.bin应该怎么办?
我用三星的SMDK试验中(Nand Flash64M+ SDRAM 64M配置,在config.bib中已经改变了NK=48M,RAM=16M,AUTOSIZE,ROMSIZE=48M),一般正常使用的NK(保留Eboot空间,NK从Nandflash第10个block开始)都在20M左右,没有问题,当组件变多,达到27.9M-28.7M时候,download NK就勉强能下到RAM里去,如果这个时候也选中了写入Bootmedia,也能写进去,但是重启系统就会在一个地方卡住启动不了了.怎样重起都起不来.我怀疑把系统的什么内容给重叠了.(好象是网卡的io空间)
当组件继续变多,NK达到28.7M以上时候,连NK也写不进去了,写到28.7M旧会死掉.同时这个时候发现NK.nb0变成了29.0M和NK.nb1的出现.(这似乎说明ROMSIZE没有发生变化仍是32M)
CE系统默认的是Nk和RAM各占32M的空间,而RAM里系统和应用程序又各占16M,我想问,这个是能改的吗?在哪里改?Eboot是不是也需要修改?Nand Flash也是一样,我想让系统占48M,留下resident flash 16M可以么,怎么改呢,目前好困惑~~~
wxl,wwei_wang,joyfly等大虾请支招啊

最新喜欢:

thinkerwinthinke...
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-14 13:44
首先,出现nk.nb1说明你的os image实际大小超过了romsize的值,你指定的romsize=48M?如果这样的话不应该超过的啊。

第二,“CE系统默认的是Nk和RAM各占32M的空间”

有这个默认?没有喔:))你可以把nk设大些,设autosize=on,这样系统在初始化的时候会自动帮你调整,不会浪费ram。

你要看看eboot烧写代码部分,看看是不是有什么和配置不匹配的地方,主要看关于flash的oemXXXX函数。

free的ram空间被ram file system和program共享,调整fsrampercent可以改变比例
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-27 18:16
我对Eboot的配置进行了修改也无济于事,依然写不进去,在RAM里写不全(还没到flash那地步),我一共修改了config.bib,loader.h,boot.bib三个文件的配置,但是PB编译出来是没问题的,NK.bin 29.1M,NK.nb0 45.0M,没有NK.nb1了.但是仍然不能全写.我感觉问题还是在Eboot可是不知道该怎么改了.
请大狭们指路哈~~
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-28 13:21
下载的时候使用的是NK.BIN,不是NK.NB0喔,BOOTLOADER会自动解析NK.BIN的数据块,并根据每块的数据的头部信息定位写入目标系统内存中的相应位置。如果生成了正确的NK.BIN还不对,你可以看看你的OEMMapMemAddr函数是否正确,对了,你在生成os image的时候,先在config.bib里面把地址指定到ram区,就是那个romstart。
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-08 13:09
下载进去的的确是NK.bin但是我检查了OEMMapMemAddr函数好象没有错误哦~~,另外什么叫\"在生成os image的时候,先在config.bib里面把地址指定到ram区,就是那个romstart\"呢,请大哥明示一下子.
我的config.bib如下:
#define NKNAME NK

; NK Start address
#define NKSTART 8C200000
#define NKLEN 02D00000
#define RAMSTART 8F000000
#define RAMLEN 00F00000

; Common RAM areas
......略


CONFIG

   COMPRESSION=ON
   KERNELFIXUPS=ON
   AUTOSIZE=ON

IF IMGPROFILER  
PROFILE=ON
ENDIF
IF IMGPROFILER !
PROFILE=OFF
ENDIF
 
   ROMFLAGS=0  

   ROMSTART=$(NKSTART)
   ROMWIDTH=32
   ROMSIZE=$(NKLEN)
在loader.h文件里面的相关定义如下:

// Flash Cache area defined in boot.bib
#define FLASH_CACHE                 0x8D000000UL
#define FLASH_CACHE_SIZE            0x02000000UL

// BinFS work area defined in boot.bib
#define BINFS_RAM_START   (0x8c021000 | CACHED_TO_UNCACHED_OFFSET)   // uncached
#define BINFS_RAM_LENGTH            0x5000


// Nk Memory reigions defined in config.bib...
//
#define ROM_RAMIMAGE_START          0x8C200000
#define ROM_RAMIMAGE_SIZE           0x02D00000

// Start addresses must match config.bib\'s RAMIMAGE
#define RAM_START                   0x8F000000
#define RAM_SIZE                    0x00F00000

#define DEFAULT_LAUNCHADDR          ROM_RAMIMAGE_START

// SDRAM
#define SDRAM_BASE  0x8C000000// defined in OEMAddressTable
#define SDRAM_SIZE   0x04000000//64 MB

看看有什么问题吗?应该是对的啊~~
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-09 14:06
你的
#define FLASH_CACHE 0x8D000000UL
#define FLASH_CACHE_SIZE 0x02000000UL
怎么用的?

你现在是边下载边烧flash?你先不要烧,直接下,然后运行,把你的romstart设为nkstart,然后在编译kern.exe时在sources里面指定exebase=nkstart
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-05-09 14:44
不是的,从串口的显示来看是先下载到RAM完了之后再一总写到flash里的.现在是写到RAM里都写不完,然后是PB报了一个什么配置不对,在串口上没有任何错误信息,所以就是难判断什么问题了啊~~
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-09 16:22
那就是你没用系统提供的flash相关的oem函数了,不过这个不要紧。下载不完就还没有执行三,肯定没输出了。

喔,对了,你看看这个:
#define FLASH_CACHE 0x8D000000UL
#define FLASH_CACHE_SIZE 0x02000000UL

#define ROM_RAMIMAGE_START 0x8C200000
#define ROM_RAMIMAGE_SIZE 0x02D00000
你的FLASH_CACHE_SIZE只有32M,但是你的image有35M喔,把你的FLASH_CACHE_SIZE 改大些
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-05-09 20:27
对,还没有到该写入flash的那一步.现在只是写到RAM里去.
大哥我已经照改了,还是不行,没有任何的变化.我的cachesize已经改成0x02D0000UL了
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-10 15:00
对了,你用PB下的啊,那你在环境变量里面设那个什么64M RAM没有?你试试,我忘了名字了:(
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-10 16:14
是IMGRAM64但是环境不让我添加这个变量.不知道为什么.
他提示说,the variable IMGRAM64 is a build option variable,the checkbox, \"Eable Image Larger than 32MB\",that controls that variable is located on the Build Options table.然后就只能点取消.是怎么回事?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-10 16:29
那你把那个CHECKBOX钩上试试呢
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-10 16:35
而且我已经允许了Larger than 32MB这个选项.没有任何改观.

现在的问题很是恼人啊,一直都得不到好的解决.究竟是什么原因呢.
我把这里的一些问题说一下,看看对不对,同时也供大家借鉴一下.
我的问题遇到的有:
ROMstart       决定NK的开始位置
ROMLen         决定NK的长度(大小),也即生成NK.nb0的大小
RAMStart       决定系统RAM的开始位置,通常位于连结于NK之后的位置
RAMLen         决定系统RAM的长度(大小)
               这个Len决定了以后系统内存和应用程序内存的总和(然后再对半分给二者)
FLASH_CACHE    决定了flash缓存的开始位置,我的理解这个位置没有什么特殊要求,只要在Eboot之后就可以了吧
FLASH_CACHE_SIZE    决定flash缓寸长度,大小上应该等于NKLen长度

COMPRESSION    决定NK.bin是最小压缩版还是和NK.nb0一样大
ROMWIDTH       决定ROM数据宽度
AUTOSIZE       自动调整ROM和RAM的大小(但是看上去没有起作用啊)

请wxl_50685330大哥指正一下.




[编辑 -  5/10/05 by  zouyingmyfriend]
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-10 16:48
wxl大哥,你以前有没有碰到过这种情况?
都应该改还有哪些地方呢,感觉上好象还有什么地方的设置不对似的.
我改过了config.bib  boot.bib  loader.h这么几个地方如前面所贴.看样子好象和RAM的设置有关.但是改动RAMLEN又没有改变.
怎么办是好?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-10 17:54
基本是了,不过AUTOSIZE有用喔:))当你的NK.NB0后面有空闲的话CE会把它还给SYSTEM RAM,不会浪费,这很好。

你这样吧,看看你的FLASH相关代码,看看关于下载的OS IMAGE大小的处理,会不会是代码里面定死了不能超过32M啊,你原来写的FLASH CACHE就是32M。你说你的FLASH烧写是下载完后一次进行的,仔细看看源代码,下载过程应该是没有问题的,对了,再看看OEMMapMemAddr这个理面对地址的判断,是不是覆盖了64M。
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-05-10 18:31
LPBYTE OEMMapMemAddr( DWORD dwImageStart, DWORD dwAddr )
{
    //EdbgOutputDebugString(\"OEMMapMemAddr: 0x%x, 0x%x, \", dwImageStart, dwAddr);

    if ( g_ImageType & IMAGE_TYPE_MXIP )
    {
        DWORD i, Length=0;

        // we don\'t know the segments length, so parse our BIN table for the length
        for ( i = 0; i < g_BINRegionInfo.dwNumRegions; i++ )
        {
            if ( (dwAddr >= g_BINRegionInfo.Region.dwRegionStart) &&
                 (dwAddr <  g_BINRegionInfo.Region.dwRegionStart + g_BINRegionInfo.Region.dwRegionLength) )
            {
                dwAddr = (dwAddr - g_BINRegionInfo.Region.dwRegionStart) + FLASH_CACHE + Length;
                break;
            }

            // bump length
            Length += g_BINRegionInfo.Region.dwRegionLength;
        }
    }

    //EdbgOutputDebugString(\"0x%x \\r\\n\", dwAddr);

    return (LPBYTE)dwAddr;
}

没有问题吧??
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-05-11 14:53
嗯,没什么问题。
对了,你的NK.BIN分REGION了?分REGION会对NK.BIN的RECORD有影响吗?要不你把函数里面的地址值打印出来,跟踪一下下载过程呢
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-05-12 15:28
郁闷啊郁闷~~~
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-05-12 15:32
看样子根本就是PB的问题啊~~
 

[编辑 -  5/12/05 by  zouyingmyfriend]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-05-12 16:12
你打开OEMMapMemAddr那个函数的调试跟踪了吗?你看看每个RECORD的起始地址和长度都是不是对的,到下载后期特别注意看看调试信息。我不知道分REGION的NK.BIN有没有什么特别的。

最后也还是试试重装一个PB吧:))对了,如果实在不行你可以去找BLCOMM的源代码,在PRIVATE里有,重编译这个库加调试看看下载后期的函数什么地方出问题了
根据地的兄弟们,团结就是力量
游客

返回顶部