유저레벨에서 커널에 있는 API 를 동작시키는 인터페이스는 시스템 콜로써 항상 사용되는 것이다.
하지만 커널 레벨에서 사용자 공간의 어플리케이션을 실행하는 것은 그다지 알려져 있지 않다.
하지만 가만히 생각해 보면 핫플러그인과 같이 USB 가 꼽히면 자동으로 마운트되는 것을 우리는 알고 있다.
과연 어플리케이션에서 주기적으로 USB 꼽힌 것을 체크해서 마운트 하는 것일까?
그렇지 않다.
커널 레벨에서 USB가 인식되면 종류에 따라 마운트를 시켜주는 함수가 실행되게 된다.
혹은 모듈이 필요하면 모듈까지도 로딩을 시켜준다.
이런 인터페이스가 가능한 커널 함수를 소개한다.
그 인터페이시의 이름은 usermodehelper API 이다.
그 API를 한번 살펴보면
usermod 헬퍼 API 핵심함수
call_usermodehelper_setup 사용자 지역 호출을 위한 핸들러 준비
call_usermodehelper_setkeys 헬퍼의 세션 키 설정
call_usermodehelper_setcleanup 헬퍼의 정리 함수 설정
call_usermodehelper_stdinpipe 헬퍼의 stdin 파이프 작성
call_usermodehelper_exec 사용자 지역 호출 호출
이정도로 구성되어 있다.
자료구조를 살펴보면
kernel/kmod.c#L117
117struct subprocess_info {
118 struct work_struct work;
119 struct completion *complete;
120 char *path;
121 char **argv;
122 char **envp;
123 struct key *ring;
124 enum umh_wait wait;
125 int retval;
126 struct file *stdin;
127 void (*cleanup)(char **argv, char **envp);
128};
의외로 아주 간단한 구조를 갖고 있다.
이제 사용자 모드 헬퍼 API 의 내부구조를 살펴보자.
kernel_execve 를 사용하여 커널 공간 커널모듈 로더로 사용하는 구현을 한다.
kernel_execve 는 부팅시 init 프로세스를 시작하는데 사용되는 함수이며 사용자 모드 헬퍼 API는 사용하지 않는다.
#include <linux/kmod.h> 추가 --> call_usermodehelper() 함수 사용가능!!
< call_usermodehelper : 커널에서 유저레벨 응용프로그램 실행하게 해줌!! >
'Embedded Lab > linux, x86' 카테고리의 다른 글
[LVM NTFS 포맷 및 확장] (0) | 2013.01.01 |
---|---|
[커널에서 쉘명령하기 system()함수] (0) | 2013.01.01 |
[DiskSim4.0 + SSDSim(MS)설치 방법] (0) | 2012.12.26 |
[DiskSim4.0 + SSDSim(MS)설치 방법] (0) | 2012.12.26 |
[리눅스 32비트 / 64비트 구분방법] (0) | 2012.12.26 |