内核在SDRAM中运行的问题
大家好,我在移植uclinux内核到DM270时遇到如下问题:将编译好的内核通过bootloader下载到板子上的SRAM中,可以正常启动内核;然后修改内核中相关的地址,重新编译后下载到板子的 SDRAM(型号是HY57V561620BT-H)中,却无法启动内核。单步运行发现内核运行到start_kernel中的第一个printk函数时,无法运行下去。可是我单步进入到该printk函数中,却能通过此函数。
不知现在这种情况是否跟SDRAM的初始化有关,我在初始化SDRAM后,编写了测试程序来对SDRAM进行读写,证明能够对SDRAM进行正常的读写。如果与初始化没有关系的话,为何在SRAM能够运行的内核,在SDRAM中去无法启动呢? 我感觉问题出在 ” 然后修改内核中相关的地址 “ ,这里的地址也许不止一个,可能有好几个地方和原来的 SRAM 相关,如果有其中哪怕一个你没有改好,就会出问题的。 :? 感谢版主的回复。
关于地址修改的部分,有如下几处:
1.linux-2.4/include/asm/arch/memory.h中的DRAM_BASE(修改为SDRAM的物理基地址0x00900000),DRAM_SIZE(修改为SDRAM的实际大小64M,共两片),PHYS_OFFSET(未使用内核原来的公式计算,直接指定为DRAM_BASE)
2.linux-2.4/arch/armnommu/config.in中的define_hex DRAM_BASE(修改为0x00900000),define_hex DRAM_SIZE(修改为0x04000000)
3.linux-2.4/arch/armnommu/Makefile中的TEXTADDR(修改为0x01310000)
4.linux-2.4/arch/armnommu/kernel/setup.c中的define MEM_SIZE修改为(64*1024*1024)
现在感觉不是地址的问题。昨天跟踪内核运行,发现内核运行到start_kernel->setup_arch—>bootmem_init这个函数时跑飞,感觉是跟uclinux的内存初始化有关。请问大家uclinux对于内存初始化是否对外围存储器,如SDRAM有特殊要求?与内存初始化有关的内核文件还有哪些呢? 恩,你的板子外扩内存为64M??是64Mbit,还是字节阿?
我的板子外扩内存为32M字节,但修改uclinux内核后,系统启动不起来。但uclinux系统内存大小修改为8M,16M后,就可以启动,不知道啥原因? 总共是两片SDRAM,每片是32M字节(4Banks x 4M x 16Bit)。通过片选来选择是否选用第二片(我是片选使用第二片的,共64M字节)。
请问rootlinger,你的SDRAM的型号是啥?你所说得“修改uclinux内核后,系统启动不起来”的具体表现是什么?串口有输出么?“uclinux系统内存大小修改为8M,16M后”也就是说你在内核的参数设置时将SDRAM的物理空间大小设为8M,16M?
昨天又跟踪内核,发现无法通过bootmem_init的原因是在bootloader中设置内核启动参数时关于SDRAM的地址和空间大小设置不正确所引起的。现在可以通过此函数,但在下面的paging_init这个函数,又出现了问题。不知道是不是还和SDRAM的地址及空间的设置有关。继续跟踪! francois_wei,你好!我的sdram型号HY57v281620hct(4Banks x 2M x 16Bit),共两片,组成32M内存.“修改uclinux内核后,系统启动不起来”的具体表现是串口没有任何东西.
能否说一下,你是怎么跟踪内核的吗?用啥工具? 用的是CCS。那就是说你修改了SDRAM的空间大小,串口就能正常打印出启动信息了么? rootlinger方便告知你的QQ么?
我的是38566905
互相帮助啦! 你用什么bootloader? 把你的操作过程列出来给大家看看.
我们的没有问题,用的就是uClinux中的默认的配置.
页:
[1]