제가 겪었던 일을 예로 들면, 신입때 선임자가 진행하던 프로젝트를 맡게 되었습니다. 그 프로젝트는 원인을 알 수 없는 버그로 인해서 잠시 중단이 된 상태였는데 그건 바로 장비가 기동한 후 얼마 안 지나면 커널 패닉이 발생하면서 죽는 문제였습니다. 죽는 시간은 중구난방이었지요. 한달동안 고생해서 결국 원인을 찾았는데 간단한 문자 디바이스 드라이버 소스에 문제가 있었습니다. 버퍼에 카운트를 증가시키는 변수가 있었는데 한계값이 되면 초기화 시켜주는 부분이 없어서 오버플로우가 발생한 것이었습니다.
그 후로도 드라이버 작성할 때 보면 메모리 맵을 잘못 잡아 주거나 혹은 에러 처리를 확실하게 안 해서 메모리가 할당 안 된 상태에서 접근하려고 한다던가 하는 문제로 커널 패닉이 많이 발생했었습니다.
한가지 조언 드리면, 백문이불여일타라고 프로젝트를 수행하면서 계속 시행착오를 경험하는게 도움이 될것 입니다.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
어떻게 보면 kernel debugging 정보를 어떻게 얻느냐에 대한 질문과 비슷하다고 생각되는데, 맞나요? 암튼 그렇게 생각한다고 가정하면, Linux Device Driver 책에 debugging 정보를 어떻게 얻는지 그리고 kernel debugger가 몇개 있는데 이러한 것들이 뭐가 있는 지 등에 대해서 검색해보시면 되지 않을까요? 또한 직접 panic 함수 처리를 분석해보시는 것도 도움이 될거 같습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
수억 가지 원인과
수억 가지 원인과 경로가 있습니다.
가장 흔하게 일어나는 일은 역시 메모리 참조 관련한 일입니다.
제가 겪었던 일을 예로 들면, 신입때 선임자가 진행하던 프로젝트를 맡게 되었습니다. 그 프로젝트는 원인을 알 수 없는 버그로 인해서 잠시 중단이 된 상태였는데 그건 바로 장비가 기동한 후 얼마 안 지나면 커널 패닉이 발생하면서 죽는 문제였습니다. 죽는 시간은 중구난방이었지요. 한달동안 고생해서 결국 원인을 찾았는데 간단한 문자 디바이스 드라이버 소스에 문제가 있었습니다. 버퍼에 카운트를 증가시키는 변수가 있었는데 한계값이 되면 초기화 시켜주는 부분이 없어서 오버플로우가 발생한 것이었습니다.
그 후로도 드라이버 작성할 때 보면 메모리 맵을 잘못 잡아 주거나 혹은 에러 처리를 확실하게 안 해서 메모리가 할당 안 된 상태에서 접근하려고 한다던가 하는 문제로 커널 패닉이 많이 발생했었습니다.
한가지 조언 드리면, 백문이불여일타라고 프로젝트를 수행하면서 계속 시행착오를 경험하는게 도움이 될것 입니다.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
임베디드 리눅스 관련 프리렌서 지향
답변은 감사합니다..
ㅎㅎㅎㅎㅎ
이러저러한 이유로 패닉이 일어 나는건 알고 잇지만... 이야기 하신데로 수억가지 경로와 방법이 있는데...
이걸 어떻게 알 방법이 없나 싶어서 글을 올렸습니다.
제가 지금 다시 생각해도 너무 무모한 이야기 엿던것 같네요..ㅎㅎㅎ
아는 만큼 보인다고,
아는 만큼 보인다고, 예전엔 커널 패닉 메시지가 나오면 속수무책이었는데 조금씩 알아가니까 어느정도 디버깅이 가능해 지더군요. 공부엔 왕도가 없습니다. 닥치는 대로 공부하는게 왕도입니다.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
임베디드 리눅스 관련 프리렌서 지향
어떻게 보면 kernel
어떻게 보면 kernel debugging 정보를 어떻게 얻느냐에 대한 질문과 비슷하다고 생각되는데, 맞나요? 암튼 그렇게 생각한다고 가정하면, Linux Device Driver 책에 debugging 정보를 어떻게 얻는지 그리고 kernel debugger가 몇개 있는데 이러한 것들이 뭐가 있는 지 등에 대해서 검색해보시면 되지 않을까요? 또한 직접 panic 함수 처리를 분석해보시는 것도 도움이 될거 같습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
수억가지 중에서
수억가지 중에서 BUG();나 panic(); 호출에 의한 패닉도 있죠...
커널 초기 root를 찾는데 실패했거나 init을 실행하지 못했거나...(혹은 init이 죽었거나)
혹은 커널내부 자료구조에서 예상치 못한 상황에서 BUG() 같은게 많이 숨어있더군요...
# man bug # man
이라고 입력해봤습니다... ㅠㅠ
댓글 달기