当前位置: 技术问答>linux和unix
关于linux内核和SDRAM的问题
来源: 互联网 发布时间:2017-04-28
本文导语: 问题背景: 在arm板子上面配有两片SDRAM,64M*2=128M,分别挂在bank6和bank7上面。由bootload进行地址映射,且把参数传给linux内核。 1、当我把SDRAM的参数128M传给内核后(两片内存),内核启动、文件系统跑起来什么的都正...
问题背景:
在arm板子上面配有两片SDRAM,64M*2=128M,分别挂在bank6和bank7上面。由bootload进行地址映射,且把参数传给linux内核。
1、当我把SDRAM的参数128M传给内核后(两片内存),内核启动、文件系统跑起来什么的都正常。问题在于当我在执行CP(或者mv、dd)命令时,只要我复制的文件大小大于20M时,系统就会崩溃,打印出Oops消息。如果小于20M就没事。
2、当我把SDRAM的参数64M传给内核后(一片内存),内核启动、文件系统跑起来什么的都正常。而且CP命令也正常,100多M都没有问题。
基于这问题,我想知道内核是怎样判断SDRAM是多大的??怎么初始化SDRAM。为什么会出现上面的那个问题??
{
PS:1、网上看了一些资料,是从bootload那边参数传过来的,直接用。
2、内核本身会再对SDRAM进行一次初始化,并进行把不连续的物理地址映射成连续的虚拟地址。
}
大家知道的能否帮忙指导下!!在下感激不尽啊!!
在arm板子上面配有两片SDRAM,64M*2=128M,分别挂在bank6和bank7上面。由bootload进行地址映射,且把参数传给linux内核。
1、当我把SDRAM的参数128M传给内核后(两片内存),内核启动、文件系统跑起来什么的都正常。问题在于当我在执行CP(或者mv、dd)命令时,只要我复制的文件大小大于20M时,系统就会崩溃,打印出Oops消息。如果小于20M就没事。
2、当我把SDRAM的参数64M传给内核后(一片内存),内核启动、文件系统跑起来什么的都正常。而且CP命令也正常,100多M都没有问题。
基于这问题,我想知道内核是怎样判断SDRAM是多大的??怎么初始化SDRAM。为什么会出现上面的那个问题??
{
PS:1、网上看了一些资料,是从bootload那边参数传过来的,直接用。
2、内核本身会再对SDRAM进行一次初始化,并进行把不连续的物理地址映射成连续的虚拟地址。
}
大家知道的能否帮忙指导下!!在下感激不尽啊!!
|
根据我之前看的uboot代码及资料,最后sdram等许多板子相关信息,都通过uboot传递给内核了,内核会不会检查SDRAM,我不了解
|
bank6:0x30000000-0x34000000 (映射虚拟地址:0xc0000000-0xc4000000)。
bank7:0x38000000-0x3c000000 (映射虚拟地址:0xc4000000-0xc800000
把bank6:0x30000000-0x34000000 (映射虚拟地址:0xc0000000-0xc4000000)
改为:bank6:0x30000000-0x33ffffff (映射虚拟地址:0xc0000000-0xc3ffffff)
bank7同上
bank7:0x38000000-0x3c000000 (映射虚拟地址:0xc4000000-0xc800000
把bank6:0x30000000-0x34000000 (映射虚拟地址:0xc0000000-0xc4000000)
改为:bank6:0x30000000-0x33ffffff (映射虚拟地址:0xc0000000-0xc3ffffff)
bank7同上
|
这个问题有点稀奇,友情帮顶。
|
bank7改为 :bank7:0x38000000-0x3bffffff (映射虚拟地址:0xc4000000-0xc7ffffff