1.2. LXR

리눅스 소스코드는 압축된 양만 해도 약 20MB 정도되는 방대한 양이다. 게다가 많은 양의 소스 코드에 산재해 있는 많은 함수나 정의를 찾기란 여간 힘든 것이 아니다.

예를 들어 root 파일 시스템을 마운트하는 부분에 대해 분석하고 싶다면 과연 어디서 부터 시작해야할 것인가? 시작하는 곳을 찾는 것 까진 했다고 해도 그럼 역으로 어디서 마운트를 실행하는가?

소스 코드 분석에 가장 필요한 것이 내가 알고 싶은 함수/변수/정의가 어디에 있는가와 어디에서 불려 지는가 일것이다.

보통은 grep을 사용해 찾아보고 하나씩 열어 보는 방법을 동원하는데 이게 너무 힘들다. 그래서 리눅스 커널 관련 프로젝트 중에 하나인 lxr 프로젝트를 소개 한다.

lxr은 linux cross reference 정도의 의미로 이해하면 되겠고 리눅스 소스 코드의 모든 함수/변수/정의 등에 대한 크로스 레퍼런스를 온라인으로 제공한다. URL은 http://lxr.linux.no다. 여기에서 원하는 버전을 사용해 찾아가면 쉽게 접근할 수 있을 것이다.

예를 들어 커널의 시작인 start_kernel()을 분석하는 중에 처음 나오는 함수인 lock_kernel()이 어디에 있는지 알고 싶다면 lock_kernel()을 클릭해본다. 그럼 lock_kernel이 함수로 정의된 소스 코드, 매크로로 정의된 소스 코드 그리고 lock_kernel이 불린 위치가 차례로 열거 된다.

정의를 알고 싶으면 정의에 해당하는 것을 클릭하면 정의되어 있는 소스 코드로 가게되고 불린 위치를 원하면 불린 위치가 적힌 곳을 클리하면 해당 소스 코드로 이동하게 된다.