4463|9

57

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教2450/51/16 MLC编译中文问题 [复制链接]

各位大侠,有没有谁在用2450、51、16的BSP,使用MLC模式的?我遇到了一个奇怪的问题,编译英文的时候,没有任何问题,可以正常生成文件;但在编译中文的时候,报空间不够,后来我就修改了config.bib文件,可以编译通过了,但不能下载,下载报错。这里我有个疑惑的地方,就是有关NK的空间和chain等的空间分配问题。我先把config.bib贴出来,让大家帮我出出主意:

MEMORY
#define        CHAIN_ADDRESS        81D00000
#define        CHAIN_LENGTH        00001000

        XIPKERNEL        80200000        00300000        RAMIMAGE
        NK                80500000        01900000        NANDIMAGE
        CHAIN                $(CHAIN_ADDRESS)        $(CHAIN_LENGTH)        RESERVED
       
        RAM                80500000        03B00000        RAM
       
        FLASH               92000000  00100000  RESERVED
...
CONFIG
...
        ROMSTART = 80200000
        ROMWIDTH = 32
        ROMSIZE = 02000000
...

我这里有一个疑问:XIPKERNEL 起始地址是80200000,长度是00300000,NK起始地址是80500000,这个好理解,连续分配的,然后NK占用长度是01900000,这样它结束的地址应该是81E00000,但奇怪的就是chain起始地址却是81D00000,在NK的空间内,然后占用1000空间。这是为什么?哪位知道的,给小弟讲讲啊。。。

我现在编译中文总是报超出空间里,我就把NK占用的长度改成了01F00000,这样它结束的地址是82400000,我也按照上面那样,在NK结束的最后1M的地方留给chain,这样chain的启示地址我修改成了82300000,长度不变。编译是可以通过了,但下载不了,报“非法bin”错。。。为什么?哪位大哥给下指点啊,急。

最新回复

同意楼上,字库文件太大。  详情 回复 发表于 2009-12-9 13:37
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你没有试过改成连续的看看吗?
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
ROMSTART = 80200000
ROMWIDTH = 32
ROMSIZE = 02000000 --------------你的NK可以这么大吗?貌似超过32M了。

你的和2440有较大差别,不在能力范围之内了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
顶一下。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
都用到了XIP,这个功能不错。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
是啊,现在XIP貌似很流行似的。。。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
在网上搜了个帖子,帖在这里:

XIP实现总结.
step1:修改config.bib文件.
内核子集XIPKERNEL的SIZE根据你自己编译出来的XIPKERNEL.BIN实际大小调整,
XIPKERNEL BASE=8C200000,XIPKERNEL SIZE = 0013F000 内存类型是RAMIMAGE
CHAIN BASE = XIPKERNEL BASE + XIPKERNEL SIZE; CHAIN SIZE = 00001000 内存类型是RESERVED
NK BASE = CHAIN BASE + CHAIN SIZE;NK SIZE根据你平台定制的实际NK.BIN的大小调整, 内存类型是 NANDIMAGE
RAM BASE = NK BASE + NK SIZE; RAM SIZE = 90000000 - RAM BASE, 内存类型是 RAM.
pdwXIPLoc 是一个指定地址的全局变量,用于InitRomChain(),它的地址必须等于CHAIN BASE.
XIPSCHAIN=8C33F000 也必须等于CHAIN BASE.

关于BIB文件中的MEMORY部分的定义可以从帮助文档中找到答案,搜索MEMORY Section
Name        Address        Size        Type
内存区域名字 起始地址     区域空间    内存类型

内存类型的取值分别有FIXUPVAR,NANDIMAGE,RAM,RAMIMAGE,RESERVED.
大家可以特别注意看一下NANDIMAGE的解释
Specifies that RAM should overlap these regions when building an run-time image that uses BINFS.
The overlapping regions are stored in NAND but are fixed up to virtually appear as though they do not overlap.

When the kernel accesses these regions, BINFS responds by intercepting the request. BINFS accesses NAND and returns the proper data to the kernel.

This enables a device with NAND to execute in place out of NAND, freeing up RAM for use by the system.

Romimage generates one binary (.bin) file for each NANDIMAGE entry.

NANDIMAGE sections must be page aligned.


MEMORY
    XIPKERNEL    8C200000  0013F000  RAMIMAGE
    CHAIN    8C33F000  00001000  RESERVED
    NK      8C340000  00D00000  NANDIMAGE
    RAM                8D040000  02FC0000  RAM
;    RAM                8C340000  03CC0000  RAM
    pdwXIPLoc    00000000    8C33F000    FIXUPVAR
;  FLASH  92000000  00100000  RESERVED

; Common RAM areas
    AUD_DMA            8c002000  00000800  RESERVED
    SDIO_DMA            8c010000  00010000  RESERVED
    ARGS                8C020800  00000800  RESERVED
    DBGSER_DMA          8c022000  00002000  RESERVED
    SER_DMA            8c024000  00002000  RESERVED
    IR_DMA              8c026000  00002000  RESERVED
;    EDBG                8c030000  00020000  RESERVED
;    CAMERA                    8c050000  000A0000  RESERVED
    DISPLAY            8c100000  00100000  RESERVED   


;
; ROMFLAGS is a bitmask of options for the kernel
;  ROMFLAGS    0x0001      Disallow Paging
;  ROMFLAGS    0x0002      Not all KMode
;  ROMFLAGS    0x0010      Trust Module only
;
CONFIG
    AUTOSIZE=ON
;    ROM_AUTOSIZE=ON
    DLLADDR_AUTOSIZE=ON
    COMPRESSION=ON
    KERNELFIXUPS=ON
    XIPSCHAIN=8C33F000
    PROFILE=OFF

      ROMFLAGS=00


ROMSTART=8C200000  
ROMWIDTH=32
ROMSIZE=00D00000
【注】PB能生成XIP.BIN,这项一定要定义XIPSCHAIN=8C33F000,不然生成不了XIP.BIN的。

step2:
注册表的修改,platform.reg
; HIVE BOOT SECTION
; @CESYSGEN IF CE_MODULES_SDNPCID

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Support BINFS Section
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Add BinFS to partition table
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
    "21"="BINFS"

[HKEY_LOCAL_MACHINE\System\StorageManager\BINFS]
    "Folder"="BINFS"
    "FriendlyName"="Bin FileSystem"
    "Dll"="binfs.dll"
    "Paging"=dword:1
; MountFlags:
; 0x10 specifies that this file system is to be mounted as an external
;      ROM filesystem shadowing the \windows directory
; 0x1 specifies that the mountpoint \BINFS is to be hidden
;
    "MountFlags"=dword:10
    "BootPhase"=dword:0

[HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash]
    "DriverPath"="Drivers\\BuiltIn\\MSFlash"
    ; LoadFlags 0x01 == load synchronously
    "LoadFlags"=dword:1
    "Order"=dword:0
;    "MountFlags"=dword:10
    "BootPhase"=dword:0
    "Flags"=dword:1000

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\MSFlash]
        "Prefix"="DSK"
        "Order"=dword:0
        "Dll"="smflash.dll"        
        "Profile"="MSFlash"
;        "MountFlags"=dword:10
        "FriendlyName"="MSFLASH Driver"
        "BootPhase"=dword:0
        "Flags"=dword:1000

; Bind BINFS to the block driver
[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash]
    "DefaultFileSystem"="BINFS"
    "PartitionDriver"="mspart.dll"
    "AutoMount"=dword:1
    "AutoPart"=dword:1
    "Folder"="NandFlash"
    "Name"="Microsoft Flash Disk"
    "BootPhase"=dword:0
    "Flags"=dword:1000
    "MountAsHidden"=dword:1
    "MountAsRom"=dword:1
;    "MountFlags"=dword:00000004
;    "MountHidden"=dword:00000000

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash\FATFS]
    "FriendlyName"="FAT FileSystem"
    "Dll"="fatfsd.dll"
    "Flags"=dword:00280014
    "Paging"=dword:1
    "CacheSize"=dword:0
    "EnableCacheWarm"=dword:0
    "EnableCache"=dword:1
    "MountAsBootable"=dword:1
    "MountAsRom"=dword:1
;    "MountAsRoot"=dword:1
; @CESYSGEN ENDIF CE_MODULES_SDNPCID
; END HIVE BOOT SECTION

step3:
    系统选用的文件系统必须是RAM and ROM Filesystem,不能用ROM Only.

step4:
    要知道内核子集XIPKERNEL.BIN必须包含的modules和Files是那些,根据我的实践得出,下面这些文件是必需的:
    "nk.exe",
    "coredll.dll",
    "filesys.exe",
    "fatfsd.dll",
    "diskcache.dll",
    "fatutil.dll",
    "binfs.dll",
    "fsdmgr.dll",
    "mspart.dll",
    "smflash.dll",

    "boot.hv",
其它的可选.

step5:
    使用preromimage.bat和processbib.exe程序,把它们拷贝到你的PLATFORM/SMDK2440/FILES/目录下.

到此改动就算结束了,下面就是开始Build and Sysgen.
生成了XIP.BIN之后烧写到NAND FLASH上,需要你的BOOT支持分区,在烧写的时候自动创建BINFS分区和FAT分区,如果不幸的你用的不是EBOOT的话又不能创建BINFS和FAT分区的话就麻烦大了.
系统起来之后可以看到有个BINFS目录和一个NandFlash目录.

step6:
    最后一步,修改一下ce.bib的
    XIPKERNEL    8C200000  0013F000  RAMIMAGE
    CHAIN    8C33F000  00001000  RESERVED
    NK      8C340000  00D00000  NANDIMAGE
;    RAM                8D040000  02FC0000  RAM
    RAM                8C340000  03CC0000  RAM
使RAM的起始地址等于NK的起始地址,这里就是放大了RAM的空间,用命令行方式romimage ce.bib,生成XIPKERNEL.BIN的文件烧到NAND FLASH中去就可以了,有人有问题了发现XIPKERNEL.BIN太小烧不进去,在OEMVerifyMemory()判断里把它判断成了IMAGE_TYPE_RAMIMAGE,所以不写到FLASH了.把这段代码注释掉就好了.
/* comment for fix if the image too small and locate in range,then the image type will change to ram image and cause the image can not write to flash.
    // Is it a ram image?
    else if ((dwStartAddr >= ROM_RAMIMAGE_START) &&
        ((dwStartAddr + dwLength - 1) < (ROM_RAMIMAGE_START + ROM_RAMIMAGE_SIZE)))
    {
//      RETAILMSG(1, (TEXT("Downloading RAM image\r\n")));
        g_ImageType = IMAGE_TYPE_RAMIMAGE;
        return TRUE;
    }
*/
好了,完成,你的程序内存将会是61774K左右.
有疑问吗?我没有提到InitRomChain()函数,实践证明,你不写这个函数,不在OEMInit()里调用它也没有问题.让人感觉是多此一举.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
这个问题,我也碰到了,如果只编译英文的,生成的NK.bin是18M多,并且生成一个nk.nb0.
如果在设置里面将中文设置成为默认语言,生成的NK.bin有30多M,并且会生成nk.nb0,nk.nb1.

解决的方法:
个人觉得是三星的官方BSP的问题,因为它的BSP我没有做任何修改,就出现这种问题。像我碰到的一些莫名奇妙的问题,用了三星最新版的BSP就解决了。
还有一个可能性,就是PB没有升级,像2450的BSP是要最新版的PB才能正常使用的,如果还不知道PB的升级包怎么安装的兄弟估计编译出来问题肯定很多。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
老大,你选中文的时候,如果不选则使用中文压缩字体,产生的镜像当然大了,呵呵。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
同意楼上,字库文件太大。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
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
快速回复 返回顶部 返回列表