새소식

Programming

커널 매뉴얼(manpage) 만들기

  • -

man man 명령을 내려보면 9번 영역(section)에 커널 함수(Kernel routines)가 지정되어 있는데 표준이 아니라고 나옵니다(Non standard). 실제로 man printk 라고 명령 내리면 찾을 수 없다는 메시지가 발생합니다.


kernel.org나 다른 웹페이지에서는 커널에서 제공하는 api에 대한 man page가 존재하는데 왜 없을까요? 단순히 표준이 아니라서일까요? 검색해보니 linux-manual 이라는 이름으로 패키지가 제공되는 배포판도 있었습니다.[각주:1]

뭐 어쨌든 우분투와 그 기반 배포판인 민트 리눅스에서는 제공하지 않습니다.


이를 사용하려면 커널 소스를 받아다 포함된 man page 소스로 바이너리를 생성하고 이를 설치해줘야 합니다.


sudo apt-get source linux-image-$(uname -r)


소스 디렉토리에 가봅시다.


cd /usr/src/


ls 명령으로 뭐가 있는지 봅시다.


$ ls
bbswitch-0.7                     linux-source-3.13.0.tar.bz2
linux-headers-3.13.0-24          nvidia-331-331.113
linux-headers-3.13.0-24-generic  vboxhost-4.3.26
linux-source-3.13.0              virtualbox-guest-4.3.10


linux-source라고 시작하는 디렉토리가 하나 있습니다. 이 곳이 커널 소스가 저장된 곳입니다. uname-r 명령을 내리면 이 값과 약간 다르네요.


3.13.0-24-generic


뭐 어쨌든 수동으로 찾아들어가면 되니깐요.. cd 명령으로 또 들어가봅시다.


cd linux-source-3.13.0


man page 를 생성하는 명령은 man mandocs 인데 그냥 실행하면 패키지가 없다면서 실행되지 않습니다. 필요한 패키지부터 먼저 설치해줍니다.


sudo apt-get install xmlto 


위 명령으로 xmlto, xsltproc 의 두 가지 패키지가 설치됩니다.


이제 make mandocs 명령을 내리면 긴 시간동안 man page 를 생성합니다.


make mandocs


이제 생성된 man page를 설치만 하면 되는데요, 리눅스 원본(vanila) 소스에 포함된 설정(디렉토리 경로)이 우리 시스템(여기에선 Mint Linux 17)과 달라서 제대로 진행되지 않습니다.


Makefile에 고정값으로 들어간 부분을 찾아 수정해야 합니다. 이 시스템에는 /usr/share/man 디렉토리에 man page가 있습니다.

installmandocs: mandocs 를 찾아서 다음 부분을 수정해줍니다.


    mkdir -p /usr/local/man/man9/

    install Documentation/DocBook/man/*.9.gz /usr/local/man/man9/


복잡해 보이지만 local이란 글자만 share로 바꿔주면 됩니다.


    mkdir -p /usr/share/man/man9/
    install Documentation/DocBook/man/*.9.gz /usr/share/man/man9/


이제 당당하게 설치 명령을 내려줍니다.


make installmandocs


man printk 해서 결과가 잘 나오는지 확인해봅시다.


ps : 참고로 몇몇 함수는 없습니다? 예를 들면 copy_from_user를 찾으면 안나오고 copy_from_user_toio[각주:2]를 찾으면 그 함수는 나옵니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.