Linux 드라이버 업데이트는 어떻게 작동합니까?

Linux 드라이버 업데이트는 어떻게 작동합니까?

내가 아는 한, Linux 시스템의 모든 업데이트에는 재부팅이 필요하지 않습니다. 그러나 업데이트를 완료하려면 Windows를 여러 번 다시 시작해야 합니다. 이는 현재 하드웨어가 사용 중일 수 있으므로 이해할 수 있으며 다시 시작하면 소프트웨어가 드라이버를 사용하고 있지 않습니다.

그러나 드라이버를 업데이트하고 싶지만 현재 이를 사용하고 있는 상황을 운영 체제(또는 Linux 등)는 어떻게 처리합니까?

답변1

Linux 업데이트가 커널에 영향을 미치는 경우 재부팅이 필요합니다. 드라이버는 커널의 일부입니다. 재부팅하지 않고 Linux에서 드라이버를 업그레이드할 수 있는 경우도 있지만 자주 발생하지는 않습니다. 업데이트 중에는 드라이버의 주변 장치 컨트롤러를 사용할 수 없으며 새 드라이버 버전은 실행 중인 커널과 호환되어야 합니다.

드라이버 제어 주변 장치를 사용하는 실행 중인 시스템으로 드라이버를 업그레이드하려면 기존 드라이버가 주변 장치를 새 드라이버가 시작할 수 있는 상태로 유지해야 합니다. 이전 드라이버와 새 드라이버는 클라이언트로부터의 연결 전환도 관리해야 합니다. 가능하지만 난이도는 운전자가 운전하는 차량에 따라 다릅니다. 예를 들어, 파일 시스템을 마운트 해제하지 않고 파일 시스템 업데이트를 수행하려면 매우 복잡한 일부 데이터 구조를 전환해야 하지만 하드웨어 측면에서 처리하기 쉽습니다(업데이트하기 전에 버퍼를 플러시하고 빈 캐시로 시작하기만 하면 됩니다). 이와 대조적으로 입력 드라이버는 클라이언트 측에서 열린 설명자 목록 등만 전송하면 되지만 하드웨어 측에서는 새 드라이버가 주변 장치의 상태를 알아야 하며 이벤트 누락을 방지하기 위해 주의 깊게 관리해야 합니다.

운영 체제 개발 중에 라이브 시스템에서 드라이버를 업데이트하는 것은 일반적인 관행입니다. 여기서 드라이버는 동적으로 로드 및 언로드될 수 있지만 일반적으로 주변 장치를 사용하는 동안에는 그렇지 않습니다. Linux 및 Windows와 같은 운영 체제에서는 일반적으로 프로덕션 환경에서 드라이버가 업데이트되지 않습니다. 실제로는 익숙하지 않은 고가용성 시스템에서 업데이트되는 것 같습니다.

일부 드라이버는 커널에 없습니다(예:퓨즈파일 시스템). 이렇게 하면 시스템의 나머지 부분을 업데이트하지 않고도 쉽게 업데이트할 수 있지만 여전히 드라이버를 더 이상 사용하지 않아야 합니다. 예를 들어 새 드라이버를 사용하려면 FUSE 파일 시스템 인스턴스를 제거하고 다시 마운트해야 합니다. 드라이버 버전).

Linux에는 재부팅하지 않고 커널을 업그레이드하는 메커니즘이 있습니다.ksplice,반점,부정 이득. 이는 최신 버전이 이전 버전과 대체로 호환되어야 하기 때문에 기술적으로 어렵습니다. 특히 데이터 구조가 정확히 동일한 바이너리 레이아웃을 가져야 합니다. 일부 배포판에서는 이 보안 업데이트 서비스를 제공합니다. 이러한 기능은 (아직은 아니지만) 메인라인 Linux 커널에서 사용할 수 있습니다. 메인라인 Linux 커널에서는 드라이버가 모듈로 로드되고 모듈이 언로드될 수 있으며 새 모듈이 실행 중인 커널과 호환되는 경우에만 드라이버를 업데이트할 수 있습니다.

답변2

대부분의 경우 드라이버가 설치 시 언로드 및 로드되는 Windows와 달리 Linux 드라이버 설치는 주로 파일 시스템에 바이너리 및 구성을 추가하고 최신으로 설정하는 것으로 구성된다는 점을 지적하여 Gilles의 답변에 추가하고 싶습니다. 버전 .

이는 시스템이 불안정하거나 알 수 없는 상태이기 때문에 재부팅하라는 Windows와 달리 Linux에서는 일반적으로 드라이버를 설치하기 전과 동일한 상태에 있음을 의미합니다.

또한 Linux에서 "새" 드라이버를 추가하려면 커널 모듈을 로드해야 하므로 일반적으로 새 드라이버를 추가할 때 재부팅이 필요하지 않습니다. Windows에서는 대부분의 장치가 일반 드라이버로 처리되므로 새 장치가 추가되면 드라이버도 제거됩니다.

마지막으로 커널에는 "재부팅 필요" 플래그가 없으므로 재부팅에 대한 권장 사항은 드라이버 도우미 유틸리티 개발자에게 달려 있습니다. 즉, 재부팅해야 하는 상황이 있을 수 있지만 재부팅하라는 지시가 없을 수도 있다는 뜻입니다. 그렇게 해야 합니다.

관련 정보