[질문] 제가 고친 커널로 부팅시 에러가 나며 멈춰버립니다.
글쓴이: munin / 작성시간: 목, 2003/07/10 - 3:30오후
지금 진행하는 프로젝트가 있어 커널(와우리눅스 7.0 (2.2.17))을 약간 수정해서 컴파일 시켰습니다. 컴파일은 잘 되어 'lilo'를 수정하여 부팅시키는 과정에 서 다음과 같은 에러가 나며 뭠춰 버립니다. 고수님들의 도움 부탁드립니다.
INIT: Entering runlevel :3 Unable to handle kernel NULL pointer dereference at virtual address 0000001b current->tss.cr3=1f7bc000 , %cr3 = 1f7bc000 *pde = 00000000 Oops : 0000 CPU : 0 EIP : 0010[<c011c9d6>] EFLAGS : 00010286 eax : ffffffff ebx : df798000 ecx : df798000 edx : bffffc78 esi : 00000003 edi : bffffc78 ebp : bffffc58 esp : df799fb4 ds : 0018 es : 0018 ss : 0018 process rc (pid : 10, process nr : 7, stackpage = df7999000) stack : bffffc78 bffffc58 df798000 c0109f5c 00000007 00000000 00000003 bffffc78 bffffc58 000000bf 0000002b 0000002b 000000bf 400fd98f 00000023 00000246 bffffc3c 0000002b call Trace : [<c0109f5c>] code : 83 78 1c 00 75 0a b8 f7 ff ff ff e9 39 01 00 00 b9 a0 bb 25 INIT : ID "1" respawning too fast : disabled for 5 minutes INIT : ID "2" respawning too fast : disabled for 5 minutes INIT : ID "3" respawning too fast : disabled for 5 minutes INIT : ID "4" respawning too fast : disabled for 5 minutes INIT : ID "5" respawning too fast : disabled for 5 minutes INIT : ID "6" respawning too fast : disabled for 5 minutes INIT : no more processes left in this runlevel
손으로 일일이 다 치려니..정말 힘들군요..--;
꼭 부탁드립니다.
Forums:
Re: [질문] 제가 고친 커널로 부팅시 에러가 나며 멈춰버립니다.
일단 Oops 메세지 자체로는 정확한 판단은 어려울거 같습니다.
그러나 일단 제가 보기에는 어디서 (-1)을 리턴하고
그에대하여 처리가 안된듯 합니다.
짐작일뿐이지만 EAX = 0xffffffff 인것을 보고 이런 생각이 드는군요.
좀더 디버깅을 하려면 어디까지는 정상적으로 되었나를 확인해볼필요가
있을거 같구요. 그 이후 절차에서 (-1)을 리턴하는 경우를
확인해보시면 어떨지요?
EIP 값 적어 놓으시구요....call trace 값이 더 많이 있
EIP 값 적어 놓으시구요....
call trace 값이 더 많이 있을텐데 하나만 적어 놓으신건가요???
원래 커널로 부팅하시구요.........system.map 파일있죠..그걸로 call trace 값을 쳐서 대충 근처에 있는 주소로 함수찾아서 디버깅해보세여....칼같이 나옵니당...
정보공유는 자신감의 표현입니다
EIP 값 적어 놓으시구요...->위에 있습니다.. EIP :001
EIP 값 적어 놓으시구요...->위에 있습니다.. EIP :0010 [<c01109d6>]
call trace 값이 더 많이 있을텐데 하나만 적어 놓으신건가요??? -> 하나만 나왔습니다.
원래 커널로 부팅하시구요.........system.map 파일있죠..그걸로 call trace 값을 쳐서 대충 근처에 있는 주소로 함수찾아서 디버깅해보세여....칼같이 나옵니당...-->무슨 말씀을 하시는건지..제가 이해를 못하겠군요..^^;;
제가 워낙 실력이 딸려서..^^;
자세한 설명 다시 부탁 드리겠습니다.
修身齊家治國平天下
printing eip : c01f192bcall trace :
printing eip : c01f192b
call trace :
c011141e , c0180643 , c01166c0 , c0180a67 , c0107fca , c0108148
c01051a0 , c010a1a8
저는 이렇게 나왔습니다.
그럼 System.map 파일을 볼까요?
우선 제일 처음 나온 c011141e 를 찾아 보았습니다.
c0110ce0 T panic
c0110dd0 T print_tainted
c0110e30 T do_syslog
c0111130 T sys_syslog
c0111190 t __call_console_drivers
c01111f0 t _call_console_drivers
c0111260 t call_console_drivers
c0111350 t emit_log_char
c01113c0 T printk
c01114d0 T acquire_console_sem
c0111500 T release_console_sem
c0111590 T console_conditional_schedule
c01115c0 T console_print
c01115e0 T console_unblank
c0111610 T register_console
c0111790 T unregister_console
c0111810 T tty_write_message
중간만 짤라서 보여드립니다...대충 주소값 근처로 가닌깐...printk 이군요...
자 다음은 c0180643 를 찾아 보겠습니다.
c017fb40 t rtl8139_open
c017fc80 t rtl_check_media
c017fd20 t rtl8139_hw_start
c017fe20 t rtl8139_init_ring
c017fe70 t rtl8139_thread
c0180000 t rtl8139_tx_clear
c0180020 t rtl8139_tx_timeout
c01800f0 t rtl8139_start_xmit
c01801f0 t rtl8139_tx_interrupt
c01803a0 t rtl8139_rx_err
c0180490 t rtl8139_rx_interrupt
c0180880 t rtl8139_weird_interrupt
c01809e0 t rtl8139_interrupt
c0180ae0 t rtl8139_close
주소값을 보아하니 rtl8139_rx_interrupt 인것 같군요......
이런식으로 콜트레이스에 나온 함수를 순서대로 적습니다.
그럼 소스를 볼까요..
rtl8139_rx_interrupt 함수에서 printk 쓴부분을 집중적으로 봅니다.
제가 __FUNCTION__ 을 안적어 줬군요...
이제 찾았습니다...
+++++++++++++++++++++++++++++++++++++++++++++++
물론 위의 상황을 제가 걍 만들어 서 보여 드린거구요...call trace 값이 하나 밖에 나오지 않았다면 우선 그거라도 System.map 파일을 보시구요...
계속 Try 해보는 수밖에 없을것 같군요...
도움이 안되어서 지송해여..^^
늦게 봤네여...lilo 를 수정하셨다구요...쩝..그럼 도움이 더 안될것 같군요..
정보공유는 자신감의 표현입니다
[quote="merely_c"]생략[/quote]좋은 정보인거
좋은 정보인거 같아서 여기서 끝나면 아까운거 같은 생각이 듭니다.
강좌로 써서 올려주시면 안될까요? 정말로 좋은 정보인거 같은데....
댓글 달기