강좌 & 팁
리눅스는 해도 해도 여러가지 기능들이 새롭게 나오고 신기하기만 하다.
디버깅과 관련해서 지금까지 거의 커널 로그를 통해서 진행했지만
최근의 고성능 cpu 와 멀티 코어에서는 그 일들이 막연한 추측을 할수 밖에 없거나
너무나 많은 연관성으로 힘든 작업이 되어가고 있다
최근에는 디버깅 장비를 연결해서 사용하기도 하고 커널의 디버깅 기능을 이용해 보려고 노력중이다.
디버깅 장비야 뭐 그림의 떡이기도 하고 쓰는 사람들이야 업에츼 지원을 받겠지만
우리같이 가난한 개발자들은 몸이 좀 고생을 해 줘야 한다.
커널에는 perf 툴이 있다.
당연히 리묵스 머신이 돌아갈때 사용할수 있다.
각종 심볼들의 정보 시스템콜이벤트 트레이싱등을 유저레벨에서 사용할수 있게 해준다.
커널을 개발 단계에서 사용할때는 장비가 도움이 되겠지만
개발제품에 대한 안정성을 테스트하거나 오랜 기간 에이징을 걸면서 로깅을 할때는
장비를 걸수도 없고.... 이런 툴을 사용해야 할것 같다.
그래서... 컴파일을 해보았다.
쉽단다... 커널의 tools/perf 디렉토리에서 make 만 치면 된단다.
그래서 해봤다.... 잘 될리가...
당연히 크로스 환경에서 컴파일을 해보았는데 뭐 없다고 난리고 컴파일 자체도 되질 않았다.
아래 메세지를 보자
util/symbol.c: In function 'elf_read_build_id':
util/symbol.c:1465:3: error: unknown type name 'GElf_Nhdr'
util/symbol.c:1466:19: error: request for member 'n_namesz' in something not a structure or union
util/symbol.c:1467:19: error: request for member 'n_descsz' in something not a structure or union
util/symbol.c:1473:11: error: request for member 'n_type' in something not a structure or union
util/symbol.c:1474:11: error: request for member 'n_namesz' in something not a structure or union
util/symbol.c: In function 'sysfs__read_build_id':
util/symbol.c:1530:3: error: unknown type name 'GElf_Nhdr'
util/symbol.c:1536:12: error: request for member 'n_namesz' in something not a structure or union
util/symbol.c:1537:12: error: request for member 'n_descsz' in something not a structure or union
util/symbol.c:1538:11: error: request for member 'n_type' in something not a structure or union
util/symbol.c:1539:11: error: request for member 'n_namesz' in something not a structure or union
이제 고난의 길이다. 웹서치도 해보았는데... arm 에서 컴파일한 자료가 잘 보이질 않는다.
이툴은 컴파일 머신에 설치된 각종 라이버러리와 의존성을 심하게 갖는다.
난 x86 에서 했으니 아마 안될것 같다. 된다해도 너무 많은 길을 돌아갈 것 같다.
결론은 native compile 머신에서 빌드를 하는 것이다.
다행히 에프에이리눅스는 arm navtive 머신이 있다.
오늘은 여기까지만 실험해 봅니다.
괜히 x86 머신에서 perf 툴을 크로스 빌드하시는 분이 없기를 바라면서....