Olen kääntänyt arm-unknown-linux-uclibeabi toolchainin, jossa on uClibc. Tällä toolchainilla olen kääntänyt kernelin TI DaVinci DM644x alustalle. Käänsin myös busyboxin ja laitoin sen initrd:hen.
Kerneli on virallinen 30.10.1. Kerneli käynnistyy hyvin, käynnistää busyboxin init:in ja tulostaa Please press Enter to activate this console.
Inittabissa on console::askfirst:-/bin/hush. Kun painan Enter niin sama viesti tulostuu uudelleen, eikä hush käynnisty. Kun koitan laittaa kernelille parametrin init=/bin/hush
niin kerneli käynnistyy hyvin, mutta pysähtyy paniikkiin
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: hush Not tainted 3.10.1 #5
Backtrace:
[<c0011394>] (dump_backtrace+0x0/0x10c) from [<c0011690>] (show_stack+0x18/0x1c)
r6:cf836000 r5:c0443714 r4:c0461528 r3:00000204
[<c0011678>] (show_stack+0x0/0x1c) from [<c0311cd0>] (dump_stack+0x20/0x28)
[<c0311cb0>] (dump_stack+0x0/0x28) from [<c030f8cc>] (panic+0x8c/0x1e4)
[<c030f840>] (panic+0x0/0x1e4) from [<c0022558>] (do_exit+0x44c/0x898)
r3:cf83a000 r2:cf839e48 r1:00000004 r0:c03b41d3
r7:cece4038
[<c002210c>] (do_exit+0x0/0x898) from [<c0022b98>] (do_group_exit+0xb4/0xf0)
r7:ceed4040
[<c0022ae4>] (do_group_exit+0x0/0xf0) from [<c002d95c>] (get_signal_to_deliver+0x4ec/0x564)
r6:cf839ee4 r5:00000004 r4:cf838000 r3:00000000
[<c002d470>] (get_signal_to_deliver+0x0/0x564) from [<c030f348>] (do_signal+0xb0/0x3d4)
[<c030f298>] (do_signal+0x0/0x3d4) from [<c0011198>] (do_work_pending+0x64/0xc0)
[<c0011134>] (do_work_pending+0x0/0xc0) from [<c000eb1c>] (work_pending+0xc/0x20)
r6:cf838050 r5:a0000010 r4:b6f64250 r3:cf836000
Tulkintani mukaan hush poistui koodilla 4 joka tarkoittaa keskeytynyttä syscallia. Voisiko tuota debugata mitenkään?
Kernelin parametrit ovat console=ttyS0,115200n8 initrd=0x87000000,8M root=/dev/ram0 init=/bin/hush
Suoraan en osaa sanoa, mikä on vikana, mutta mahdollisesti lisää tietoa voisi saada nostamalla kernelin logleveliä. Lisäksi debug-vaiheessa kannattaa yleensä olla early printk päällä. Muistaakseni optio löytyy nimellä CONFIG_EARLY_PRINTK (taisi olla Kernel Hacking valikon alla menuconfigissa). Ehkä kannattaa myös kokeilla jollain muulla shellillä. Esim. bash pitäisi varmaankin toimia sillä optiot CONFIG_ASH=y sekä CONFIG_FEATURE_BASH_IS_ASH=y on asetettu BusyBox konfiguraatiosta.
console=ttyS0,115200n8 loglevel=7 initrd=0x87000000,8M root=/dev/ram0 init=/bin/bash
Eipä tullut mitään uutta. Vika on varmakin toolchainissa, kun käänsin sen itse. Täytyy koittaa crosstoolia.
Nyt sain homman toimimaan. Olin ilmeisesti kääntänyt toolchainin väärin, kun toimi emdebianin toolchainilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.