안녕하세요?
오랜만에 글을 올리네요 ^^;
현재 개발하고 있는 개발 환경이 s3c2440이 아닌지라...
하지만 비슷한 코어(s5c73xx)라고 생각되기 때문에 이렇게 질문을 올립니다 ㅎ
현재 사용하는 커널은 linux-2.6.17이구요.
하드웨어 환경은 FPGA 환경입니다.
리눅스에서 USB GadgetFS를 이용하여 개발을 하고 있구요.
GadgetFS를 이용하여 UMS 어플리케이션을 개발하고 있고 PC와 연결 시에
대용량 저장장치로 인식은 잘 되지만, 파일 전송을 하는 경우에 아래와 같은
커널 패닉이 발생하네요. 참 지금 USB에서 패킷 전송은 DMA를 사용하고 있구요.
일단은 커널이나 하드웨어의 메모리쪽 동작이 불안하다고 생각되는데요. 아직은
정확한 원인을 파악하지 못하고 있습니다. 이상한 점은 리눅스가 구동이 되면
기본적으로 실행되는 linuxrc(init 프로세스)와 events 프로세스가 죽는 다는
점입니다. 혹시 아래와 같은 현상을 경험해보신 분들 혹은 아시는 분들 도움 좀
부탁드립니다^^ 아니면 아래와 같은 로그를 분석하는 법만이라도 ^^
p.s. 아래 로그에서 linuxrc가 먼저 죽은 것이 맞나요?
Unable to handle kernel NULL pointer dereference at virtual address 00000012
pgd = c0004000
[00000012] *pgd=00000000
Internal error: Oops: 1 [#1]
Modules linked in:
CPU: 0
PC is at drain_array+0x18/0xd0
LR is at cache_reap+0x68/0x1f0
pc : [<c0066b28>] lr : [<c0068420>] Not tainted
sp : c5eafefc ip : c5eaff18 fp : c5eaff14
r10: 00000000 r9 : 00000000 r8 : c027e8b0
r7 : c0195108 r6 : c01950c0 r5 : 00000001 r4 : 00000012
r3 : 00000000 r2 : 00000012 r1 : 00000000 r0 : c01950c0
Flags: nzCv IRQs on FIQs on Mode SVC_32 Segment kernel
Control: 5317F Table: 26004000 DAC: 00000017
Process events/0 (pid: 3, stack limit = 0xc5eae198)
Stack: (0xc5eafefc to 0xc5eb0000)
fee0: 000000be
ff00: 00000001 c01950c0 c5eaff48 c5eaff18 c0068420 c0066b20 00000000 c012fbc4
ff20: c02826a0 80000013 c00683b8 c02826a8 c02826a0 00000000 c5eaff88 c5eaff68
ff40: c5eaff4c c0040db4 c00683c8 c02826b0 c02826a8 c5eaff98 c5eae000 c5eaffc0
ff60: c5eaff6c c0040f44 c0040d30 ffffffff ffffffff 00000001 00000000 c002cd64
ff80: 00010000 00000000 00000000 c02917c0 c002cd64 00100100 00200200 c0040e30
ffa0: c5eae000 fffffffc c0297efc c02826a0 00000001 c5eafff4 c5eaffc4 c004494c
ffc0: c0040e40 00000001 ffffffff ffffffff 00000000 00000000 00000000 00000000
ffe0: 00000000 00000000 00000000 c5eafff8 c0032c08 c0044854 ffffffff ffffffff
Backtrace:
[<c0066b10>] (drain_array+0x0/0xd0) from [<c0068420>] (cache_reap+0x68/0x1f0)
r6 = C01950C0 r5 = 00000001 r4 = 000000BE
[<c00683b8>] (cache_reap+0x0/0x1f0) from [<c0040db4>] (run_workqueue+0x94/0x110)
[<c0040d20>] (run_workqueue+0x0/0x110) from [<c0040f44>] (worker_thread+0x114/0)
r7 = C5EAE000 r6 = C5EAFF98 r5 = C02826A8 r4 = C02826B0
[<c0040e30>] (worker_thread+0x0/0x158) from [<c004494c>] (kthread+0x108/0x134)
[<c0044844>] (kthread+0x0/0x134) from [<c0032c08>] (do_exit+0x0/0x894)
Code: e24cb004 e2524000 e1a01003 089da870 (e5943000)
<1>Unable to handle kernel NULL pointer dereference at virtual address 00000012
pgd = c5e98000
[00000012] *pgd=20011031, *pte=00000000, *ppte=00000000
Internal error: Oops: 1 [#2]
Modules linked in:
CPU: 0
PC is at kmem_cache_alloc+0x24/0x5c
LR is at cache_alloc_refill+0x50c/0x590
pc : [<c0066ff0>] lr : [<c0067534>] Not tainted
sp : c0297e88 ip : 00000012 fp : c0297e98
r10: c0281f20 r9 : 00000001 r8 : c63ed000
r7 : 000000d0 r6 : 00000000 r5 : c63ed000 r4 : a0000013
r3 : 80042000 r2 : c01950c0 r1 : 000000d0 r0 : c01950c0
Flags: NzCv IRQs off FIQs on Mode SVC_32 Segment user
Control: 5317F Table: 25E98000 DAC: 00000015
Process linuxrc (pid: 1, stack limit = 0xc0296198)
Stack: (0xc0297e88 to 0xc0298000)
7e80: 00000000 c0297ed0 c0297e9c c0067534 c0066fdc 0000000d
7ea0: c027eca0 000000d0 60000013 c0297f28 00000006 c0191198 00000000 fffffeff
7ec0: 00000000 c0297ee4 c0297ed4 c0067024 c0067038 001687ec c0297f04 c0297ee8
7ee0: c0079088 c0066fdc 00000401 c0297f28 00000006 ffffff9c c0297f24 c0297f08
7f00: c007b288 c0079074 c0296000 00168818 00000006 c0297f28 c0297f94 c0297f28
7f20: c0069820 c007b278 c0291d70 c0296000 00000001 00000000 ffffffff 00000000
7f40: c0291cc0 c002cd64 00000000 00000000 00000000 c0291cc0 c002cd64 00100100
7f60: 00200200 ffffffea ffffffff 001686e8 00168818 00000004 00000021 c001af84
7f80: c0296000 00000001 c0297fa4 c0297f98 c00698dc c00697b8 00000000 c0297fa8
7fa0: c001ade0 c00698cc 001686e8 00168818 001687ec 00000006 00000001 00000004
7fc0: 001686e8 00168818 00000004 beac9f34 00000001 00000000 00000001 00037720
7fe0: 00000000 beac9c88 00010a94 0006edd4 60000010 001687ec 00000000 00000000
Backtrace:
[<c0066fcc>] (kmem_cache_alloc+0x0/0x5c) from [<c0067534>] (cache_alloc_refill+)
r4 = 00000000
[<c0067028>] (cache_alloc_refill+0x0/0x590) from [<c0067024>] (kmem_cache_alloc)
[<c0066fcc>] (kmem_cache_alloc+0x0/0x5c) from [<c0079088>] (getname+0x24/0x10c)
r4 = 001687EC
[<c0079064>] (getname+0x0/0x10c) from [<c007b288>] (__user_walk_fd+0x20/0x6c)
r7 = FFFFFF9C r6 = 00000006 r5 = C0297F28 r4 = 00000401
[<c007b268>] (__user_walk_fd+0x0/0x6c) from [<c0069820>] (sys_faccessat+0x78/0x)
r7 = C0297F28 r6 = 00000006 r5 = 00168818 r4 = C0296000
[<c00697a8>] (sys_faccessat+0x0/0x114) from [<c00698dc>] (sys_access+0x20/0x24)
[<c00698bc>] (sys_access+0x0/0x24) from [<c001ade0>] (ret_fast_syscall+0x0/0x2c)
Code: e3840080 e121f000 e592c000 e1a00002 (e59c2000)
<0>Kernel panic - not syncing: Attempted to kill init!
scheduling관련인 듯 싶은데, thread에서 난거보니....
두번째는 주로 확실히 메모리 문제네요. 하지만 원인은 sw일지 hw일지
추적을 해봐야하는 문제입니다.
보통 이럴때는 커널에서 대용량 메모리를 잡은 후에 테스트를 하고
넘어갑니다만, 시스템따라 워낙 틀린 얘기니....정답이 없네요.