LKM(4)

명칭
lkm - 커널 모듈을 동적으로 로드하는 기능

해설
동적으로 로드하는 커널 모듈을 이용하는 것으로, 시스템 관리 책임자는 실행중의 시스템에 동적으로 기능을 더하거나 없애거나 할 수 있습니다. 더욱, 이 기능에 의해 소프트웨어 개발자는 스스로의 변경을 테스트하기 위해 빈번하게 재기동을 걸치는 일을 피하면서 커널의 새로운 구성부품을 개발할 수도 있습니다.

다양한 타입의 모듈을 시스템에 로드할 수가 있습니다. 후술 하도록(듯이), 정의된 모듈의 타입이 몇인가 있어, 이러한 타입마다 미리 결정할 수 있던 방법으로 모듈은 시스템에 부가됩니다. 게다가, 일반적인 타입도 있어, 이 타입에 대해서는 모듈은 그 자체가 로딩과 안 로딩을 처리하는 것과 합니다.

FreeBSD 시스템에서는 동적으로 로드하는 커널 모듈을 광범에 이용하고 있어, 대부분의 파일 시스템, NFS 클라이언트와 서버, 모든 화면 보호기, 그리고 iBCS2 (이)나 Linux 에뮬레이터등에 대해서 동적으로 로드하는 버젼을 제공하고 있습니다. 시스템과 함께 배포된 모듈은 /lkm 디렉토리에 있습니다.

lkm 인터페이스를 이용하려면 /dev/lkm 디바이스에 대해서 ioctl(2) 시스템 콜을 발행합니다. 통상, 동적으로 로드하는 커널 모듈에 관련되는 모든 조작은, modload(8) (와)과 modunload(8) (와)과 modstat(8) 의 프로그램에 의해 처리됩니다. 유저는 직접 /dev/lkm 에 관여할 필요는 없는 괄입니다.

모듈의 타입

시스템 콜 모듈
시스템 콜은 새로운 시스템 콜을 lkm 인터페이스를 통해 로드하는 것으로 옮겨놓는 것 (을)를 할 수 있습니다. 모든 시스템 콜을 옮겨놓을 수가 있습니다만, 그러나 ioctl(2) 시스템 콜에 관해서는 특별히 주위를 기울이지 않으면 안됩니다. 왜냐하면, 이 시스템 콜이 모듈의 로드와 언로드에 이용되고 있기 때문입니다.

시스템 콜 모듈이 언로드될 때는, 동적으로 로드 된 모듈에 의해 옮겨놓을 수 있고 있던 시스템 콜 (은)는 시스템 콜 테이블의 적정한 위치에 되돌려집니다.

가상 파일 시스템 모듈
가상 파일 시스템은 lkm 인터페이스를 통해 로드할 수 있습니다.

디바이스 드라이버 모듈
새로운 블록형과 캐릭터형의 디바이스 드라이버를 LKM (을)를 이용해, 시스템에 로드할 수가 있습니다. 디바이스 드라이버를 로드하는 경우의 주요한 문제는 액세스 하는 디바이스에 대응해 드라이버의 디바이스 노드가 존재해야 하는 것입니다. 이러한 디바이스 노드를 작성하려면 통상 드라이버의 로드가 성공했을 경우에 적절한 프로그램을 실행하는 듯 modload(8) (으)로 지정하는 일에 의해 실시합니다.

실행 클래스
이미지 activator (image activator)로서도 알려져 있습니다. 실행 클래스란, 이것에 의해 execve(2) 시스템 콜이 실행 가능 파일의 형식을 식별해 메모리에 로드 할 수 있는 것 같은 기구입니다.

잡모듈
잡모듈은, 현재 명확하게 정의된, 혹은 일반적이 되고 있는 확장을 위한 인터페이스가 없는 모듈입니다. 유저는 고유의 로더를 쓰지 않으면 안됩니다. 새로운 모듈의 로드시 및 언로드시에, 그 모듈을 유효화 및 무효화하기 위해서 필요한 모든 커널 데이터를, 이 로더가 조작합니다.

관련 파일
/dev/lkm
    lkm 인터페이스 디바이스
/lkm
    시스템과 동고 된 모듈의 바이너리가 놓여져 있는 디렉토리
/usr/include/sys/lkm.h
    모듈 타입의 정의가 놓여져 있는 파일
/usr/share/examples/lkm
    2 타입의 모듈을 실장하고 있는 원시 코드의 예

관련 항목
modload(8), modstat(8), modunload(8)

버그
모듈이 올바른 초기화에 실패해, 더욱 시스템이 이 실패를 찾아내는 것이 할 수 있었을 경우에는, 시스템은 즉시 패닉에 의한 재기동을 실시합니다.

시스템의 내부의 인터페이스가 변경되었을 경우에는, 낡은 채의 모듈은 자주 이 변경을 발견할 수 없기 때문에, 이러한 모듈은 로드 되었을 때에 자주 크래쉬 하든가 또는 불가해한 기능 부전을 일으킵니다.

저자
lkm 의 기능을 최초로 실장한 것은 Terrence R. Lambert 입니다. 동적으로 로드하는 파일 시스템을 실장한 것은 Garrett Wollman 입니다. 동적으로 로드하는 실행 클래스를 실장한 것은 David Greenman (와)과 Soren Schmidt (와)과 Garrett Wollman 입니다.

역사
이 lkm 기능은 SunOS 4.1. 3 이 실장한 동적으로 로드하는 커널 모듈과 기능이 유사하도록(듯이) 설계되고 있습니다.