<1> was linux kernel print before it hung up;
<2> which instruction execution case kernel dead;
<3> i use objdump tool,find which line in mxcuart_rx_chars case kernel dead.
this is too odd.
<1>
modules linked in:
CPU: 0 Not tainted (2.6.35.3-01262-g5adda37-dirty #203)
PC is at mxcuart_rx_chars+0x38/0x228
LR is at mxcuart_int+0x74/0x20c
pc : [<c022eda0>] lr : [<c022f228>] psr: 20000193
sp : d3029c50 ip : 00000000 fp : 00000000
r10: d3029c5f r9 : 00000004 r8 : d3029c5e
r7 : 00000100 r6 : c06e23ac r5 : 00000100 r4 : c0669be8
r3 : d5112000 r2 : 0000408d r1 : c0669be8 r0 : c0669be8
Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user
Control: 10c5387d Table: 832ec019 DAC: 00000015
Process init (pid: 1, stack limit = 0xd30282e8)
Stack: (0xd3029c50 to 0xd302a000)
<2>
[<c022eda0>] (mxcuart_rx_chars+0x38/0x228) from [<c022f228>] (mxcuart_int+0x74/0x20c)
[<c022f228>] (mxcuart_int+0x74/0x20c) from [<c00a1798>] (handle_IRQ_event+0x24/0xe4)
[<c00a1798>] (handle_IRQ_event+0x24/0xe4) from [<c00a3a34>] (handle_level_irq+0xd4/0x16c)
[<c00a3a34>] (handle_level_irq+0xd4/0x16c) from [<c003906c>] (asm_do_IRQ+0x6c/0x8c)
[<c003906c>] (asm_do_IRQ+0x6c/0x8c) from [<c0039a8c>] (__irq_svc+0x4c/0xcc)
<3>
static void mxcuart_rx_chars(uart_mxc_port *umxc)
{
volatile unsigned int ch, sr2;
unsigned int status, flag, max_count = 256;
sr2 = readl(umxc->port.membase + MXC_UARTUSR2);
while (((sr2 & MXC_UARTUSR2_RDR) == 1) && (max_count-- > 0)) {
c022ed98: ea000072 b c022ef68 <mxcuart_rx_chars+0x200>
ch = readl(umxc->port.membase + MXC_UARTURXD);
c022ed9c: e5943004 ldr r3, [r4, #4]
c022eda0: e5933000 ldr r3, [r3]
c022eda4: f57ff05f dmb sy
c022eda8: e58d3008 str r3, [sp, #8]
hello,weidong
i had send the complete boot log to you! thank you!
Hello,Pan,
The issue you met should be from settings in init.rc. please modify all UART rights in init.rc and try !
chmod 777 /dev/ttymxc0
chmod 777 /dev/ttymxc1
chmod 777 /dev/ttymxc2
chmod 777 /dev/ttymxc3
chmod 777 /dev/ttymxc4
Then try to boot your board.
Weidong
hellp .weidong
i don't think the problem is relate with the uart limits of authority. because in my android system. ,/dev/ttymxc0-4 all have 777 mode . if /dev/ttymxc* don't have rx mode, in the user space can't access uart device driver.
why device driver read uart rx register , it go wrong,
did you see the context in the log.
Kernel panic - not syncing: Fatal exception in interrup
it happen fatal ececption in the irq_function.
it was caused by ch = readl(umxc->port.membase + MXC_UARTURXD);
the instruction cause c022eda0: e5933000 ldr r3, [r3]