【问题标题】:Kernel Panic issue in setup_arch() functionsetup_arch() 函数中的内核恐慌问题
【发布时间】:2017-01-23 11:58:35
【问题描述】:

我在使用linux-3.0 kernel 引导 armv7 板时遇到内核恐慌问题。错误信息如下: Memory policy: ECC disabled, Data cache writealloc <0>Kernel panic - not syncing: ERROR: Failed to allocate 0x1000 bytes below 0x0.

我认为这个问题与 menuconfig 中的某些配置有关,但无法确定是哪个配置导致了问题。当我尝试跟踪导致此问题的函数时,我得到了以下调用跟踪。

paging_init -&gt; early_alloc.clone.2 -&gt; memblock_alloc -&gt; memblock_alloc_base -&gt; __memblock_alloc_base -&gt; memblock_align_up -&gt; memblock_find_base -&gt; __memblock_alloc_base -&gt; panic

通过uboot引导参数:

bootargs=console=ttyS1,115200n8 root=/dev/nfs ip=1.2.3.4 nfsroot=10.22.33.27:/tftpboot/arm/ rootwait rw

【问题讨论】:

    标签: linux linux-kernel arm linux-device-driver


    【解决方案1】:

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

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

    另外请告知您遇到此错误的处理器。

    P.S.:假设编译内核镜像(uImage/bZimage)的 LOADADDR 和 DDR 配置是正确的。

    【讨论】:

    • 我使用的是linux-3.0,它不支持dts。处理器是armv7。我检查了内存拆分,它是您指定的3G/1G。我应该改变它吗?我在问题中添加的引导参数。
    • 哦,所以您正在尝试 NFS 引导。我认为 1GB 内存对于内核空间来说已经足够了。但是您的设备 IP(在您的引导参数中提到的 1.2.3.4)对我来说也不是很好(两个 IP 应该在同一个域中)。您可以尝试根据以下示例设置引导参数: setenv ipaddr 10.0.0.2; setenv 网络掩码 255.255.255.0; setenv serverip 10.0.0.1 tftpboot 0x12000000 uImage;tftpboot 0x18000000 myfile.dtb setenv bootargs enable_wait_mode=off console=ttyS0,115200 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 会将东西加载到一些疯狂的位置(或根本不加载)。
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2012-02-08
    • 2015-12-11
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多