Linux setup_arch()函数中的内核死机问题

Linux setup_arch()函数中的内核死机问题,linux,linux-kernel,arm,linux-device-driver,Linux,Linux Kernel,Arm,Linux Device Driver,在使用linux-3.0内核启动armv7主板时,我面临一个内核死机问题。错误消息如下所示: 内存策略:禁用ECC,数据缓存写LOC 内核死机-不同步:错误:未能分配0x0以下的0x1000字节。 我认为这个问题与menuconfig中的某个配置有关,但无法得到哪一个正是问题所在。当我试图跟踪导致这种情况的函数时,我得到了以下调用跟踪 pagin\u init->early\u alloc.clone.2->memblock\u alloc\u base->memblock\u alloc\u

在使用
linux-3.0内核
启动armv7主板时,我面临一个内核死机问题。错误消息如下所示:
内存策略:禁用ECC,数据缓存写LOC
内核死机-不同步:错误:未能分配0x0以下的0x1000字节。

我认为这个问题与menuconfig中的某个配置有关,但无法得到哪一个正是问题所在。当我试图跟踪导致这种情况的函数时,我得到了以下调用跟踪

pagin\u init->early\u alloc.clone.2->memblock\u alloc\u base->memblock\u alloc\u base->memblock\u align\u up->memblock\u find\u base->memblock\u alloc\u base->panic

通过uboot引导参数:


bootargs=console=ttys1115200n8 root=/dev/nfs ip=1.2.3.4 nfsroot=10.22.33.27:/tftpboot/arm/rootwait rw

看起来您的内核试图加载的地址高于实际分配的地址。因此,您需要查看从u-boot提示符传递的DTS文件(如果使用设备树)或引导参数

您可以从内核菜单配置检查内存分配, 内核功能--->内存拆分--->3G/1G用户/内核拆分

另外,请告诉您面临此错误的处理器


注意:假设用于编译内核映像(uImage/bZimage)和DDR配置的LOADADDR是正确的。

我使用的是
linux-3.0
,它不支持
dts
。处理器是
armv7
。我已经检查了内存分割,它是u指定的
3G/1G
。我应该换吗?我在问题中添加了引导参数。哦,那么您正在尝试NFS引导。我认为1GB的内存足以容纳内核空间。但是你的设备IP(1.2.3.4在引导参数中定义)在我看来也不是很好(两个IP应该在同一个域中)。您能否尝试根据以下示例设置启动参数:setenv ipaddr 10.0.0.2;setenv网络掩码255.255.255.0;setenv服务器IP 10.0.0.1 tftpboot 0x12000000 uImage;TFTPOOT 0x18000000 myfile.dtb setenv bootargs enable_wait_mode=off console=TTYS0115200 rootwait root=/dev/nfs nfsroot=10.0.0.1:/home/nfs_folder/ip=10.0.0.2 RW没有dtb文件NP。在这种情况下,您只需要加载内核映像。tftpboot,但请确保loadaddr正确。Linux启动汇编程序应重新定位到正确的地址。我认为“loadaddr”并不重要,除了必须有内存,否则u-boot会将东西加载到一些疯狂的位置(或者根本不加载)。