ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 입출력제어(ioctl)
    개발 2017. 2. 11. 13:10


    리눅스는 크게 시스템 영역(kernel)과 사용자 영역(user space)을 분리해서 악의적으로 만든 사용자 애플리케이션이 시스템 핵심 영역에 침범 할 수 없도록 만들어졌다. 하지만 애플리케이션을 개발하다보면 커널 영역내에 있는 함수들을 사용해야 할 일이 있는데 이런 경우 커널에서는 기본적으로 시스템 콜을 이용해 커널영역에 있는 함수들을 사용 할 수 있도록 지원한다. 하지만 시스템 콜은 기껏 해야 300개 정도 등록 할 수 있는데 모든 사용자 애플리케이션이 시스템 콜에 필요한 함수를 등록하기엔 수가 부족하다.


    이때 사용 할 만한 툴이 ioctl이다. ioctl은 유저영역에 있는 애플리케이션이 현재 동작 중인 드라이버에 값을 전달하거나 받아 올 수 있도록 한다. 동작 과정을 간단히 그림으로 설명해보면 다음과 같다.


    User 영역에 있는 application은 현재 등록되어있는 "/dev/[device]"파일을 open하고 필요한 명령어들을 ioctl로 전달한다. 입력한 device파일을 등록한 모듈은 이 드라이버를 등록 했을 때 ioctl command에 맞춰 처리할 루틴을 설정해두면 User에서 받아온 argument로 값을 전달 받거나 또는 다시 전달 할 수 있다.


    주로 개발한 드라이버에 사용자 애플리케이션 영역에서 접근 하고 싶을 때 사용한다. 프린터에 주로 사용하는 것 같다.


    '개발' 카테고리의 다른 글

    클라우드 가상화와 Docker  (2) 2017.03.05
    클라우드 컴퓨팅(Cloud Computing)  (0) 2017.02.25
    자동차시장 오픈소스 - 2  (0) 2017.01.31
    자동차 시장 오픈소스 - 1  (0) 2017.01.15
    이런 오픈 소스도 있다!  (0) 2017.01.07

    댓글

Designed by Tistory.