임베디드 리눅스의 디버깅이라...


자 일단 컴파일은 어디서 하느냐?

두가지 방법이 있읍니다.

하나는 크로스 컴파일이 되어 있는 리눅스 PC에서
또하나는 Cygwin과 같은 환경을 이용하여
리눅스를 에뮬레이터가 돌아가는 윈도우 환경에서

물론 저희는 Cygwin은 안해 봤기때문에 설명은 곤란하고.
( 사실 지금 열심히 추진 중입니다. )
리눅스 PC에 크로스 컴파일 환경을 설정하는 것은
하우투 문서에 있읍니다.
당연히 보셨겠지요? ^^

물론 컴파일은 arm-linux-gcc 라고 하는 형식으로 하죠...

그럼 디버깅은 ...

제 나름대로 정리한다면 3가지로 나눌수 있지 않을까 하네요...

첫번째는 커널 디버깅 방법
두번째는 디바이스 드라이버 디버깅 방법
세번째는 응용 프로그램 디버깅 방법

저희는 커널 디버깅과 디바이스 드라이버 디버깅은
오직 printk에만 의존합니다.

왜?

다른 툴들을 사용하지 않아서 익숙하지도 않고
대부분 printk 만으로도 충분하더군요..

조금 귀찮아서 그렇지 ...

그냥 의심가는 부분에 printk 로 메세지를 찍는 거죠

보통 printk 문장은 메인 콘솔인 시리얼로 나옵니다.

어플리케이션은
어떤 분들은 gdb 를 사용하신다고 하십니다.
임베디드 리눅스에서는 리모트 gdb를 의미합니다.

하지만 이것 역시 저희는 사용하지 못했읍니다.
그냥 printf 문을 이용해서 추적해 가지요...

더구나

응용 프로그램은 PC 리눅스에서 먼저 수행 시켜보고
이상 없으면 arm 용으로 포팅하는 과정을 거치기 때문에

대부분의 에러는 PC 리눅스에서 수행한 경우에
걸러져 나옵니다.

PC 리눅스에서 GDB나 DDD를 사용하면 편하죠..
이런 자료는 인터넷이나 책자에 사용법들이
많이 소개 되어 있읍니다.