板子是OK2440Ⅳ,在编译时候出出现各种问题,再次罗列一下!
1. NMAKE : U1073: don't know how to make 'D:\WINCE500\public\common\sdk\lib\ARMV4I\retail\ndis.lib'
解决:修改D:\WINCE500\PLATFORM\SMDK2440A\Src\Drivers\DM9000A中的sources文件,
SOURCELIBS= \$(_PROJECTROOT)\cesysgen\sdk\lib\ARMV4I\retail\Ndis.lib \
改成SOURCELIBS= \$(_PROJECTROOT)\cesysgen\sdk\lib\ARMV4I\debug\Ndis.lib \
因为在板子出厂时,内核都是release模式下的,所以对于sources文件下的路径就没有问题,但是我们是debug模式下编译,sources文件自己手动修改下就没有问题了!那为什么编译其他模块的时候没有问题呢,读者可以查看drivers下的其他模块的sources文件,都没有表明是release还是debug模式,所以不会出错!
2.Can not open input file D:\WINCE500\PBWorkspaces\s3c2440_demo2\RelDir\smdk2440a_ARMV4I_Debug\postproc\nlscfg.inf
解决:nlscfg.inf是什么东东呢,原来一查,是National Language Support config,有关语言支持的,打开看看:
007f 0403 0406 0407 0807 0c07 1007 1407 0409 0809 0c09 1009 1409 1809 1c09 2009
2409 2809 2c09 3009 3409 040a 080a 0c0a 100a 140a 180a 1c0a 200a 240a 280a 2c0a 300a
340a 380a 3c0a 400a 440a 480a 4c0a 500a 040b 040c 080c 0c0c 100c 140c 180c 040f 0410
0810 0413 0813 0414 0814 0416 0816 041d 081d 0421 042d 0436 0438 043e 083e 0441 0456
LOC_INCLUDELOCALES
提示找不到,那就到手动去D:\WINCE500\PUBLIC\COMMON\OAK\FILES里面手动复制到release目录下,或者在PB里面copy files to release directory
3.can not find file D:\WINCE500\PBWorkspaces\s3c2440_demo2\RelDir\smdk2440a_ARMV4I_Debug\i2c.dll'on disc
简单,手动复制过来!!!
4. Ram start overlaps rom binary
这个问题很常见,网上一搜一大堆,但是具体是什么原因引起的,很多初学者还是搞不清楚的,只知道按照网上的方法修改,我来说说这是为什么,自己的理解,请拍砖。
系统物理地址的分配布局情况很重要
看看 D:\WINCE500\PLATFORM\SMDK2440A\Src\Inc\oemaddrtab_cfg.inc
g_oalAddressTable
; DCD 0x80000000, 0x30000000, 128 ; 128 MB SDRAM-1 BANK 6
DCD 0x80000000, 0x30000000, 64 ; 64 MB SDRAM-1 BANK 6
DCD 0x88000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x8A000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8C000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x90000000, 0x10000000, 8 ; nGCS2: PCMCIA/PCCARD
DCD 0x90800000, 0x48000000, 1 ; Memory control register
DCD 0x90900000, 0x49000000, 1 ; USB Host register
DCD 0x90A00000, 0x4A000000, 1 ; Interrupt Control register
DCD 0x90B00000, 0x4B000000, 1 ; DMA control register
DCD 0x90C00000, 0x4C000000, 1 ; Clock & Power register
DCD 0x90D00000, 0x4D000000, 1 ; LCD control register
DCD 0x90E00000, 0x4E000000, 1 ; NAND flash control register
DCD 0x90F00000, 0x4F000000, 1 ; Camera control register
DCD 0x91000000, 0x50000000, 1 ; UART control register
DCD 0x91100000, 0x51000000, 1 ; PWM timer register
DCD 0x91200000, 0x52000000, 1 ; USB device register
DCD 0x91300000, 0x53000000, 1 ; Watchdog Timer register
DCD 0x91400000, 0x54000000, 1 ; IIC control register
DCD 0x91500000, 0x55000000, 1 ; IIS control register
DCD 0x91600000, 0x56000000, 1 ; I/O Port register
DCD 0x91700000, 0x57000000, 1 ; RTC control register
DCD 0x91800000, 0x58000000, 1 ; A/D convert register
DCD 0x91900000, 0x59000000, 1 ; SPI register
DCD 0x91A00000, 0x5A000000, 1 ; SD Interface register
; DCD 0x92000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
DCD 0x00000000, 0x00000000, 0 ; end of table
当oal启动的时候,把所有的物理地址全部映射到虚拟地址80000000~A0000000的地址空间,而这又分两部分,下面的64M为Ram+rom的空间,上面的为程序运行的空间,你编译的nk.bin文件在这64M中存放,在上面其他内存里运行。config.bib文件中有详细的描述,
MEMORY
NK 80200000 02800000 RAMIMAGE ;40M
; RAM 82400000 05c00000 RAM
RAM 82A00000 01600000 RAM
所以说你的ROM+RAM最大只能是64M,你编译的nk.bin文件大于你设定的大小,自己修改,我就改为40M了,相应的RAM的开始地址就要往后挪了,大小也 要变小了! 最后拷贝到realease目录下,make image就好了。