엔비디아 지포스 드라이버 일부 840M, 940M 설치 불가 문제 해결 방법

개요

이 문서에서는 엔비디아에서 공식 배포되는 드라이버 패키지가 일부 840M, 940M 그래픽 칩셋을 가진 장치에서 설치되지 않는(“이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다”) 문제에 대해 원인 분석과 수정한 드라이버 패키지를 배포합니다.

대상

시스템은 HP Pavilion 14 n266tx 이며, 해당 시스템에는 지포스 840m 그래픽 칩셋이 포함되어 있습니다. 드라이버는 현재까지 해당 문제가 확인되는 Windows 10 x64 용 드라이버 패키지중 현 시점 최신버전(361.43)을 기준으로 합니다.




다른 윈도우 버전용 드라이버 패키지 중에서도 해당 문제가 발생하면 동일한 방법으로 적용이 가능하며, 위 시스템 외에도 지포스 840m이나 940m에서 최신버전의 드라이버를 설치하려 할 때 “이 그래픽 드라이버는 호환되는 그래픽 하드웨어를 찾지 못했습니다” 라는 메시지가 뜨고 설치가 진행되지 않다면 확인해보세요.


840m 940m 말고도 다른 엔비디아 지포스 그래픽을 가진 시스템에서 드라이버가 위와 같은 에러로 설치되지 않는다 해도 이 글을 확인해보세요.

원인

일부 840m, 940m을 위한 그래픽 드라이버가 353.62 버전 이후로 빠져 있는것을 확인하였습니다. 아래 그림1 은 353.62 드라이버 패키지 파일 중 nvhmi.inf 파일과, 그 이후 드라이버 패키지 파일에서의 nvhmi.inf을 비교한 사진인데, 아래와 같이 최신버전의 드라이버 패키지에서 비어있는 하드웨어 ID 4가지를 확인할 수 있었습니다.

  • DEV_1341 / SUBSYS_2165103C
  • DEV_1341 / SUBSYS_2166103C
  • DEV_1341 / SUBSYS_21DB103C
  • DEV_1347 / SUBSYS_80DB103C

해당 ID를 가진 840M과 940M은 드라이버 패키지 안의 inf파일에 드라이버가 정의되지 않았기 때문에 드라이버 설치 프로그램에서 확인이 되지 않고 설치가 진행되지 않는 것입니다.



위에 언급된 하드웨어 ID 외에도 다른 장치에서도 똑같이 뜬다면, 1. 해당 장치의 하드웨어 ID를 확인하고, 2. 해당 장치에서 설치가 가능한 버전을 찾고, 3. 설치가 가능한 버전의 드라이버 패키지와 설치가 되지 않는 최신 버전의 드라이버 패키지 안의 inf 파일들을 찾아 4. 장치의 하드웨어 ID를 기준으로 찾아보시기 바랍니다.

해결

궁극적인 해결 방법은 엔비디아측의 공식 드라이버가 배포되기 전까지 별다른 방법이 없습니다. 우선 한국 엔비디아 커뮤니티에 문의 글을 올려둔 상황이니 진행사항에 따라 글을 수정합니다. 현재로써는 문제가 되는 해당 inf 파일을 수정하여 임시로 해결 가능합니다.


설치가 가능한 구 드라이버에서 비어있는 하드웨어 id를 설치할 드라이버의 inf에 맞춰서 넣어주면 됩니다. 이 때 중간부분에 해당 ID는 어느 섹션의 드라이버 패키지로 설치할 것인지([NVIDIA_Devices.NTamd64.10.0] 부분) 지정해 주고, 맨 밑부분에 하드웨어 ID에 따른 드라이버 이름을 지정하는 곳에([Strings]) 넣어주고 저장한 후 다시 설치 프로세스를 실행해 보세요.



참고

inf파일을 수정한 후 설치 프로세스를 시작하면 정상적으로 설치 프로세스가 진행되는 것으로 보이나 설치 과정 중 실패할 수 있습니다. 이는 위에서 수정하여 추가한 하드웨어 ID에 대한 Windows의 드라이버 서명이 존재하지 않아 시스템에서 설치를 중단시키는 것입니다.


고급 부팅 옵션에서 드라이버 서명 사용 안함 옵션으로 부팅한 후 설치를 다시하게 되면 아래와 같은 메시지를 확인할 수 있습니다. 서명을 무시하고 게속 설치하도록 하면 정상적으로 설치가 가능합니다.





수정 패키지 배포

저도 이 문제 때문에 해결법을 찾고 있었기 때문에 위의 방법으로 만들어보았습니다. 일단 제가 필요해서 만들었기 때문에 다른 그래픽 칩셋에서 동일한 문제는 따로 해결하고 추가 배포할 생각은 없습니다.(심심하면 할 것 같습니다)


이 문서에서 업로드하는 파일은 두가지입니다.

  • 위의 방법으로 수정한 inf 파일
  • 위의 방법으로 수정한 inf을 포함하는 361.43 드라이버의 자동 압축 풀림 패키지 파일

기존에 드라이버 패키지를 받으셨다면 inf 파일만 받으시고 드라이버 패키지가 풀린 곳에 적용시키면 됩니다. 기본 경로는 C:\에 엔비디아라는 풀더로 되어 있으며 안에 들어가면 드라이버 버전으로 풀더가 있고, 그 안에 디스플래이 드라이버라는 풀더가 있는데 이 안에 넣어주세면 됩니다. 해당 inf파일은 361.43 을 기반으로 수정하였으므로, 다른 버전 드라이버에서는 적용되지 않을 수 있습니다.


드라이버 패키지를 받으시지 않으셨다면 수정한 inf파일을 포함하는 자동 압축 풀림 패키지 파일을 다운로드 받으시면 됩니다. 드라이버 버전은 361.43이며 위의 inf파일을 적용 한 것 외에 추가적인 작업은 하지 않았습니다. 압축을 푸실때 경로 그대로 하시길 추천하며(자동으로 설치 프로그램을 시작할겁니다), 드라이버를 재패키징 하여 배포하는것은 라이센스 문제가 있을 수 있으므로 패키지는 이번 버전만 배포합니다.


추가적으로 이 후 버전도 똑같은 문제가 있을 경우 inf파일만 추가적으로 수정하여 배포 할거고, 공식적으로 문제가 해결된다면 배포를 중단합니다.

2016년 9월 3일 추가

 

대용량 파일이라 패키지 파일을 NAS에 업로드하여 링크로 제공하고 있었습니다. 그러나 NAS과 네트워크 관련 작업으로 인해 더이상 제공은 힘들 듯 하네요. 또한 굳이 패키지 파일을 배포할 필요성은 못느껴서 더이상 패키지 파일은 배포 중단합니다.

위의 방법으로 직접 적용하시는걸 추천드려요. 


다운로드

INF 파일 : nvhmi.inf
드라이버 패키지 파일 : NVIDIA GeForce Driver for 840940m.exe


Minny_

,

안드로이드의 특징

  • 애플리케이션 프레임워크 : 컴포넌트의 재사용과 대체가 가능
  • 달빅 가상 머신 : 모바일 장치에 최적화
  • 내장된 웹브라우저 : 오픈 소스인 WebKit 엔진
  • 최적화된 그래픽 : 자체 2D라이브러리로 2D 그래픽 지원 및 OpenGL ES 규격에 맞춰 3D 그래픽 지원
  • SQLite 데이터베이스 지원
  • 각종 오디오, 비디오 규격 지원
  • 블루투스, EDGE, 3G, WIFI지원
  • 카메라, GPS, 나침판, 가속도계 지원
  • 풍부한 개발 환경 제공

컴포넌트의 재사용

안드로이드 애플리케이션은 여러 개의 컴포넌트로 이루어져 있고, 이 컴포넌트는 다른 애플리케이션에서도 사용할 수 있다

자바 언어 사용

자바의 SE버전 중 AWT와 SWING을 제외한 모든 패키지를 사용할 수 있으며, 모바일 환경에서 속도도와 메모리 관리를 위해 자체적인 가상 머신을 사용한다(Dalvik, ART)

XML을 이용한 사용자 인터페이스 사용

함수를 호출하는 기존 절차적 방법을 사용하지 않고, (HTML과 비슷한)보다 진보된 방법인 선언적으로 정의하는 XML방법을 사용한다

첨단 기능 제공

카메라, GPS, 나침판, 가속도계와 같은 센서를 지원하고, 멀티미디어의 지원도 강력하다. 이를 이용한 라이브러리등도 제공한다.

개방적이고 풍부한 개발 환경 제공

누구나 가져다가 사용할 수 있고 무료로 제공된다. 오랜 기간 동안에 검증된 소프트웨어나 기존에 많이 사용되고 있는 개방적인 오픈소스를 제공하여 폐쇠적인 플랫폼과 비교해도 손색없다.

클라우드 컴퓨팅

음성 인식이나 사진 앱, 게임, 이메일, 연락처등을 서버에 저장하고 필요할때 불러오는 방법을 사용할 수 있다.


안드로이드의 구조

안드로이드는 운영체제, 미들웨어, 핵심 애플리케이션을 모두 포함하는 모바일 플랫폼, 구글에서는 안드로이드를 소프트웨어 스택(software stack)라고 부른다.

리눅스 커널

보안, 메모리 관리, 프로세스 관리, 네트워크, 장치 드라이버 같은 시스템 서비스를 제공, 하드웨어와 소프트웨어 스택 사이의 추상화 계층으로 동작하여 하드웨어가 다르더라도 균일한 환경을 제공

안드로이드 런타임

안드로이드 애필리케이션은 리눅스의 하나의 프로세스로 실행되고, 각 프로세스는 자신만의 가상 머신을 가진다.

라이브러리

  • 시스템 C 라이브러리 : BSD 기반의 표준 C 라이브러리를 제공
  • 미디어 라이브러리 : 오디오, 비디오 형식의 재색 및 녹음을 지원
  • Surface manager : 디스플레이 서브시스템을 관리하고 그래픽 레이어를 합성
  • LibWebCore : 웹 브라우저 구현 엔진
  • SGL : 기본 2D 그래픽 엔진
  • 3D 라이브러리 : OpenGL ES API 기반의 라이브러리
  • FreeType : 비트맵과 벡터 글꼴 렌더링
  • SQLite : 강력하고 가벼운 관계형 데이터베이스

애플리케이션 프레임워크(application framework)

프레임워크가 제공하는 기능을 이용하여 자신들의 애플리케이션을 개발할 수 있다.

애플리케이션(application)

안드로이드에서 모든 애플리케이션은 동일한 라이브러리를 사용하여 실행된다.


애플리케이션의 기초 개념

자바 코드를 컴파일하고 리소스와 결합하여서 안드로이드 패키지로 만든다. 하나의 apk 파일 안에 있는 모든 코드는 하나의 애플리케이션으로 간주된다.

각 애플리케이션은 리눅스 커널 상에서 ID를 부여 받으며, 다른 ID를 가진 애플리케이션에는 접근할 수 없다. 최소 권한의 법칙에 의해 필요한 작업을 할 수 있을 만큼의 권한만 가지고 권한이 없는 시스템 기능에 접근할 수 없다.

애플리케이션이 다른 애플리케이션들과 데이터를 공유해야 할 경우에는 동일한 ID를 부여 받아 같은 프로세스 안에서 동작할 수 있도록 설정 가능하다.

추가 권한이 필요할 경우 애플리케이션 개발 시 추가 권한을 요청할 수 있다.

애플리케이션 컴포넌트

애플리케이션은 컴포넌트로 구성되고 각 컴포넌트는 하나의 독립된 엔티티로 존재, 정해진 역활을 수행, 각 컴포넌트는 애플리케이션을 시작하는 진입점을 가질 수 있다.

  • 액티비티 : 사용자 인터페이스 화면을 가지고 특정한 작업을 담당한다
  • 서비스 : 백그라운드에서 작업이 필요하거나, 다른 작업을 방해하지 않으면서 독립적인 작업이 필요하거나, 원격 프로세스를 위한 작업을 할 때 사용한다.
  • 방송 수신자 : 디바이스의 상태나 제어, 또는 다른 애플리케이션에서 송출된 방송을 수신하여 액티비티를 실행하거나 서비스를 시작할 수 있다. 특정한 방송을 송출할 수 도 있다.
  • 콘텐트 제공자 : 데이터를 관리하고 다른 애플리케이션에게 데이터를 제공하는 컴포넌트이다. SQLite 데이터베이스나 웹에 저장하고 다른 애플리케이션과 데이터를 공유할 수 있다.

다른 애플리케이션에서 특정 애플리케이션의 컴포넌트를 공유하여 사용 가능하다. 즉 다른 애플리케이션에서 특정 애플리케이션의 특정 작업을 호출하여 작업하고 그 결과가 리턴되면 계속 작업을 할 수 있는 것.

다른 애플리케이션의 컴포넌트를 사용하기 위해서 인텐트라는 메시지를 전달하고, 안드로이드는 이 엔텐트를 분석하여 적절한 컴포넌트를 찾아 활성화 하고 실행한다. 인텐트는 필요한 작업을 지칭하는 액션과, 필요한 데이터의 URI로 구성되어 있다.


매니페스트 파일

애플리케이션을 실행하려면 애플리케이션안에 어떤 컴포넌트가 존재하는지를 안드로이드에게 알려줘야 하기 때문에 매니페스트 파일을 생성하고, 애플리케이션의 모든 컴포넌트가 선언되어 있다.

추가적으로 애플리케이션의 권한이나, 최소 실행 API, 하드웨어 사양등을 지정하는게 일반적이고, 추가로 컴포넌트를 실행할때 특정 데이터를 선언해 주기도 한다.

Minny_

,