Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
19 years ago

kernel init problem

Hi

We have developed our own board with an Altera Stratix II and NIOS II Standard CPU. We download the kernel (2.6.16.11) to the SDRAM (32MB) using nios2-download, and nios2-terminal gives us the following output:

uClinux/Nios II

Altera Nios II support © 2004 Microtronix Datacom Ltd.

KERNEL -> TEXT=0x04000000-0x04173da8 DATA=0x04173da8-0x04182000 BSS=0x042520a0-0

x042520cf

KERNEL -> MEM=0x4253000-0x6000000 STACK=0x6000000-0x6000000

No Command line passed

Done setup_arch

Built 1 zonelists

Kernel command line:

trap_init reached

init_IRQ done

PID hash table entries: 256 (order: 8, 4096 bytes)

oom-killer: gfp_mask=0xd0, order=0

Stack from 04181e74:<0>

<0> 00000000<0> 04037d8c<0> 00000000<0> 00000042<0> 041765b0<0> 041765b0<0> 00000000<0> 00000000<0>

<0> 000000d0<0> 04173db0<0> 00000000<0> 0403937c<0> 00000000<0> deadbeef<0> deadbeef<0> 04181f04<0>

<0> deadbeef<0> 00000000<0> 00000000<0> 000000d0<0> 00000000<0> 04181f24<0> 040393e0<0> 04159b38<0>

<0> 00000000<0> 04159b38<0> 0406faec<0> 0424713e<0> deadbeef<0> deadbeef<0> 00000000<0> 04159b38<0>

<0> 00000000<0> 04159b30<0> 040706a0<0> 04181f40<0> 00000000<0> deadbeef<0> deadbeef<0> deadbeef<0>

<0> ffffffff<0> 00000000<0> deadbeef<0> 04000654<0> 00000000<0> 00000001<0> 00000000<0> 00000001<0>

Call Trace:<0>

<0> [<04005728>]<0> [<04004c0c>]<0> [<04005740>]<0> [<04000110>]<0>

Mem-info:

DMA per-cpu:

cpu 0 hot: high 6, batch 1 used:0

cpu 0 cold: high 2, batch 1 used:0

DMA32 per-cpu: empty

Normal per-cpu: empty

HighMem per-cpu: empty

Free pages: 0kB (0kB HighMem)

Active:0 inactive:0 dirty:0 writeback:0 unstable:0 free:0 slab:0 mapped:0 pagetables:0

DMA free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:32768kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0 0

DMA32 free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0 0

Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0 0

HighMem free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pages_scanned:0 all_unreclaimable? no

lowmem_reserve[]: 0 0 0 0

DMA: 0*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB

0*4096kB = 0kB

DMA32: empty

Normal: empty

HighMem: empty

0 pages of RAM

0 free pages

0 reserved pages

0 pages shared

0 pages swap cached

Kernel panic - not syncing: Out of memory and no killable processes...

We have found out that this has something to do with the call to local_irq_enable() in init/main.c (around line 500). If we comment out this line, the execution continues and stops after the "Memory available: " line. Reported memory on this line is correct.

We have a Altera Stratix II with Nios II evaluation board, and the kernel runs fine on this board.

We have successfully run memory tests using the memtest example included in the Nios II 6.0 examples.

Our board also have an SMC91111 ethernet controller.

Anyone has any ideas on how to solve this problem?

Regards

Hein Gustavsen

12 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi Hippo,

    I followed as you suggested and I am getting some strange results.

    I am using now "kernel.config" file given in download with buildroot package.

    Only change I made is Prints enable at nios-uart and jtag-uart is disable.

    But still I am facing same issue.

    Strange thing is when I add 2-3 printk statements, for changing size of the

    kernel, it boots fine.

    Both conditions boot prints are pasted below.

    Some other observation I have made....

    I added some device support for changing kernel size and same issue I have face

    with big vmlinux (elf executable) size also (17 MB, 16 MB, 15MB), just removing or adding a dummy printk make kernel boot perfectly fine.

    Added support: network, mtd, jffs2, ext2, ext3, kernel hacking. (all with in hw design)

    Kernel with same size with different support enable or disabled gives different crashing results or boot prefectly fine.

    For certain build if work fine it "always" works fine, never get crashed.

    If certain build crash it always crashes.

    For testing I am using Altera given hardware design with changed memeory map

    path: \altera\kits\nios2_51\examples\verilog\niosII_stratixII_2s60_ES\full_featured

    In future I have to add support for other devices, I can&#39;t relly on adding printk fix.

    I need a proper solution or either why its happening.

    I put prints in initramfs.c and ramfs is in safe region.

    Also large memory >1MB allocation in kernel config is enable.

    Current kernel size is coming ~7 MB.

    I tested SDRAM also and its passing all tests.

    Any Idea what is going wrong.

    CRASHING PRINTS

    <div class='quotetop'>QUOTE </div>

    --- Quote Start ---

    uClinux/Nios II

    Altera Nios II support © 2004 Microtronix Datacom Ltd.

    KERNEL -> TEXT=0x01000000-0x010adf1c DATA=0x010adf1c-0x010b8000 BSS=0x01117f20-0

    x01117f34

    KERNEL -> MEM=0x1118000-0x2000000 STACK=0x2000000-0x2000000

    No Command line passed

    Done setup_arch

    Built 1 zonelists

    Kernel command line:

    PID hash table entries: 128 (order: 7, 2048 bytes)

    Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

    Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

    Memory available: 15072k/16384k RAM, 0k/0k ROM (695k kernel code, 424k data)

    Mount-cache hash table entries: 512 (order: 0, 4096 bytes)

    initramfs_START =0x10c1b20 initramfs_END =0x110d320

    initramfs_size=0x4b800

    Linux NoNET1.0 for Linux 2.6

    NIOS serial driver version 0.0

    ttyS0 (irq = 4) is a builtin NIOS UART

    io scheduler noop registered

    io scheduler deadline registered

    Freeing unused kernel memory: 340k freed (0x10b8000 - 0x110c000)

    oom-killer: gfp_mask=0xd0

    DMA per-cpu:

    cpu 0 hot: low 2, high 6, batch 1

    cpu 0 cold: low 0, high 2, batch 1

    Normal per-cpu: empty

    HighMem per-cpu: empty

    Free pages: 13588kB (0kB HighMem)

    Active:62 inactive:251 dirty:0 writeback:0 unstable:0 free:3397 slab:120 mapped:

    0 pagetables:0

    DMA free:13588kB min:512kB low:640kB high:768kB active:248kB inactive:1004kB pre

    sent:16384kB pages_scanned:2097664 all_unreclaimable? yes

    lowmem_reserve[]: 0 0 0

    Normal free:0kB min:0kB low:0kB high:0kB active:0kB inactive:0kB present:0kB pag

    es_scanned:0 all_unreclaimable? no

    lowmem_reserve[]: 0 0 0

    HighMem free:0kB min:128kB low:160kB high:192kB active:0kB inactive:0kB present:

    0kB pages_scanned:0 all_unreclaimable? no

    lowmem_reserve[]: 0 0 0

    DMA: 79*4kB 1*8kB 1*16kB 0*32kB 1*64kB 2097664*128kB 1*256kB 1*512kB 0*1024kB 0*

    2048kB 3*4096kB = 268514452kB

    Normal: empty

    HighMem: empty

    oom-killer: gfp_mask=0xd0

    DMA per-cpu:

    cpu 0 hot: low 2, high 6, batch 1

    cpu 0 cold: low 0, high 2, batch 1

    Normal per-cpu: empty

    HighMem per-cpu: empty[/b]

    --- Quote End ---

    PASSING PRINTS

    <div class='quotetop'>QUOTE </div>

    --- Quote Start ---

    uClinux/Nios II

    Altera Nios II support © 2004 Microtronix Datacom Ltd.

    KERNEL -> TEXT=0x01000000-0x010adf88 DATA=0x010adf88-0x010b8000 BSS=0x01117f40-0

    x01117f54

    KERNEL -> MEM=0x1118000-0x2000000 STACK=0x2000000-0x2000000

    No Command line passed

    Done setup_arch

    Built 1 zonelists

    Kernel command line:

    PID hash table entries: 128 (order: 7, 2048 bytes)

    bfr local_irq_enable

    Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)

    Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)

    aft local_irq_enable

    Memory available: 15072k/16384k RAM, 0k/0k ROM (695k kernel code, 423k data)

    Mount-cache hash table entries: 512 (order: 0, 4096 bytes)

    initramfs_START =0x10c1b40 initramfs_END =0x110d340

    initramfs_size=0x4b800

    Linux NoNET1.0 for Linux 2.6

    NIOS serial driver version 0.0

    ttyS0 (irq = 4) is a builtin NIOS UART

    io scheduler noop registered

    io scheduler deadline registered

    Freeing unused kernel memory: 340k freed (0x10b8000 - 0x110c000)

    main.c: aft free_initmem

    init started: BusyBox v1.2.0-pre0 (2006.04.26-14:48+0000) multi-call binary

    BusyBox v1.2.0-pre0 (2006.04.26-14:48+0000) Built-in shell (msh)

    Enter &#39;help&#39; for a list of built-in commands.

    # # # # # # # [/b]

    --- Quote End ---

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    it is really strange.

    how do you run the kernel? do you use nios2-download?

    Or, is cache flushed properly in the boot loader?

    if it crashes, will it fail at the same place?

    check the kernel link script, and the link map output.

    check the required align of different sections.

    check if there are (junk) dos2unix in the make scripts.

    I did find problems in cpu_idle loop of arch/nios2nommu/kernel/process.c for new kernels.

    I follow those codes of SH / MIPS to fix the problem.