Linux의 장치 드라이버는 프로그램 / 프로세스입니까, 아니면 라이브러리입니까?


23

장치 드라이버는 자체적으로 실행되는 프로그램이거나 메모리에로드 된 라이브러리 (기능 그룹) 일 뿐이며 프로그램은 해당 기능 중 하나를 호출 할 수 있습니다 (따라서 자체적으로 실행되지 않음).

프로그램 인 경우 프로세스 ID가 있습니까? 예를 들어 다른 프로세스를 종료 할 수있는 것과 같은 방법으로 장치 드라이버를 종료 할 수 있습니까?


1
rmmod를 사용하여 드라이버를 "언로드"할 수 있지만 사용하지 않는 경우에만 가능합니다.
pjc50

답변:


35

Linux에서 많은 장치 드라이버는 라이브러리 나 프로세스가 아니라 커널의 일부입니다. 이러한 사용하여 장치 파일 (일반적으로 상호 작용 프로그램 /dev) 및 다양한 시스템 호출 등 open, read, write, ioctl...

그러나 예외가 있습니다. 일부 장치 드라이버는 커널 드라이버 스텁과 사용자 공간 라이브러리 ( 예 : UIO 사용)를 혼합 하여 사용합니다. 다른 것들은 전적으로 사용자 공간에서 구현되며 일반적으로 일부 비트 뱅킹 인터페이스 (UART 또는 GPIO) 위에 있습니다. 두 경우 모두 일반적으로 처리 중이므로 별도의 프로세스가 아니라 장치를 사용하는 프로세스 만 표시됩니다.

장치 드라이버를 "종료"하려면 장치 드라이버를 사용하는 모든 프로세스를 중지 한 다음 커널 모듈 (모듈로 빌드되었다고 가정) 및 선택적으로 사용하고 더 이상 필요하지 않은 다른 모듈을 제거해야합니다. 을 사용하여 시스템의 모듈을 나열하고 또는을 사용하여 모듈을 lsmod언로드 할 수 있습니다 . 둘 다 사용자가없는 경우에만 작동 합니다.rmmodmodprobe -rlsmod


2
용감하고 커널이로 컴파일 된 경우 사용 중이거나 제거되지 않도록 설계되지 않은 모듈을 강제로 언로드 CONFIG_MODULE_FORCE_UNLOAD할 수 있습니다 rmmod -f. 이는 단순히 커널을 신뢰할 수없는 상태로 만드는 것 외에는 커널을 손상시킵니다.
Ruslan

9

먼저 드라이버가 무엇인지 정의해야합니다. 장치 (예 : 카메라) 또는 하위 시스템 (예 : 파일 시스템)을 제어하는 ​​프로그램 또는 서브 루틴으로 정의하겠습니다. 시스템 프로그램이나 커널 서버 또는 사용자 영역 프로세스를 통해 직접 수행하는지 여부는 본질적으로 의미 론적 질문에 중요하지 않아야합니다.

경우에 따라 Linux는 실제 "드라이버"가 장치 트리 인 소프트웨어로 작성된 일반 프로토콜 만 제공합니다. 이는 하드웨어 매개 변수의 구성과 드라이버를 구성하는 데 사용할 소프트웨어입니다.

일반적으로 말하기 드라이버 인터페이스 및 프로토콜은 장치 트리 또는 udev 규칙에 의해 정의 된대로로드되는 커널 모듈을 사용하여 구현됩니다. 커널 모듈은 가장 엄격한 의미에서 프로세스 나 라이브러리가 아닙니다.

라이브러리는 특정 프로세스에로드 할 수있는 정적 코드 세트입니다. 최신 운영 체제는 이러한 라이브러리를 공유 메모리에로드합니다. 프로세스 자체는 여러 공유 라이브러리에 연결할 수 있습니다.

프로세스는 시스템 프로그램 또는 커널이 시스템 메모리 및 CPU 시간과 같은 자원을 할당 한 실행중인 프로그램입니다. 커널 모듈은이 패턴 자체를 따르거나 따르지 않을 수도 있지만 Linux에서는 사실상 프로세스로 간주되지 않습니다.

따라서 귀하의 질문에 대답하기 위해 운전자는 절차가 필요하지 않지만 가능합니다. 코드는 라이브러리에 존재할 수 있지만 드라이버는 커널 모듈 형태의 커널이든 사용자 영역 프로세스이든 프로그램을 통해 여전히 memery에로드됩니다.

드라이버의 총체가 실제로 무엇인지 고려할 때 의미 론적 논쟁이됩니다. 드라이버는 항상 프로그램이지만 장치 트리의 경우와는 달리 때로는 사용자 프로세스, 장치 트리 파일, udev 규칙 및 커널 모듈 일 수 있습니다. 프로세스와 모듈은 모두 라이브러리를 사용하여 구성합니다. 드라이버의 논리.


0

Linux 장치 드라이버는 기본적으로 커널 공간 라이브러리 입니다. 호출은 주로 상위 레벨 드라이버 또는이를 사용하는 사용자 공간 프로세스에 의해 시작됩니다.

이것에서 몇 가지 예외가 있습니다.

  • 커널 스레드는 드라이버에 의해서도 시작 / 중지 될 수 있으며 기본적으로 사용자 공간 부분이없는 프로세스입니다.
  • 인터럽트 핸들러는 사용자 공간 프로세스가 아니라 하드웨어에 의해 시작됩니다.

GNU Hurd와 같은 다른 시스템에서 드라이버는 기본적으로 프로세스와 상호 작용할 수있는 데몬입니다. Linux에서 드라이버는 라이브러리입니다. 두 가지 개념 모두 장점과 단점이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.