u-boot+kernel不能正常运行

单独的u-boot可以正常运行,而kernel配合04000010版的uboot也能正常运行。但当前的uboot配合kernel却不能正常boot,会在kernel串口设置的地方出错。

整理尝试结果:

uboot.10Pelco + kernel   == OK

uboot.12Pelco + kernel   == No

uboot.10  + kernel == OK

uboot.12 + kernel = No

根据以上结果推断,10版可以,而12版不行,跟Pelco改动无关。

补充其他尝试:

uboot.12 + kernel.original == OK,

uboot.12Pelco + Kernel.original == OK

据此推断,还是uboot Pelco的部分的设置对Kernel Pelco的部分产生了影响产生了一些影响

Kernel中存在着一个驱动模块:

SERIAL_DRAM_LOG

实验将此模块禁止,发现可以正常驱动起来。因此可以确定肯定是这个模块的问题。


在u-boot中重新观察与SERIAL_DRAM_LOG相关的设置,一个最重要的宏,位于/include/configs/myboard.h

#define CONFIG_SERIAL_DRAM_LOG_ADDR  0xA0000000

此地址对应了具体的DDR的地址。目前设置的地址似乎与实际不符。

当前的Soc有2个DDR I/F,分别为(在非交织模式下)

DDR0: 0x8000 0000 ~ 0xBFFFFFFF     ==> 1GB

DDR1: 0xC000 0000 ~ 0xFFFFFFFF     ==> 1GB

但目前的板子实际空间为

DDR0:256MB, DDR1:256MB

因此,当在非交织模式下时的有效地址为:

DDR0: 0x8000 0000 ~ (0x9000 0000-1)

DDR1: 0xC000 0000 ~ (0xD000 0000-1)

另一种情况,交织模式下:

DDR0和DDR1不再是独立的空间了,而是交织在一起的,这样,总的空间范围为:

DDR0: 0x8000 0000 ~ (0xA000 0000 -1)


查询Soc的手册,发现2个DRAM控制模块被一个叫DMM的上层控制器控制,它可以控制整个RAM空间的地址分配。例如把DDR1放在80000000,而把DDR0放在A0000000,或者DDR0,1交织存放数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值