2013-06-27 2 views
4

내 장치 중 하나의 드라이버를 업데이트하고 이전 드라이버를 kextunload하고 새 드라이버를 kextload하여 재시작이 더 이상 필요하지 않도록하고 싶습니다. 설치 후아직 인스턴스가있는 kext를 언로드하십시오.

내가하려고이 같은 모습을 어떻게

sudo kextunload /System/Library/Extensions/Driver.kext 

오류를 :

(커널) KEXT com.driver.Driver를 언로드 할 수 없습니다; 클래스에는 인스턴스가 있습니다. (커널) Kext com.driver.Driver 클래스 com_driver_Driver_USBAudioDevice에는 인스턴스가 1 개 있습니다. com.driver.Driver - (libkern/kext) kext가 사용 중이거나 보유 중 (언로드 할 수 없음)을 언로드하지 못했습니다.

장치가 ioreg에 없습니다. 이 인스턴스를 통해 드라이버를 언로드하지 못하게하는 방법은 무엇입니까? 당신이 kextstat 명령을 를 호출 할 경우

답변

6

, 그것은이 같은 정보를 원하시면 모든로드 된 커널 확장의 목록이 표시됩니다 : -

115 3 0xffffff7f814f4000 0x32000 0x32000 com.apple.iokit.IOAudioFamily (1.89fc11) < 114 5 4 3 1>

첫 번째 숫자 (115)는 커널 확장의 ID입니다.

결국 숫자 < 114 5 4 3 1>은이 특정 kext에서 참조하는 다른 커널 확장 ID입니다.

kext의 id를 다른 목록에 나열된 것과 일치 시키면 kextunload가 참조하는 참조입니다.

커널에 코드를 작성할 때 전역 변수는 전체 커널에서 전역 변수이므로 고유 한 이름이없고 다른 kext에서 사용되는 변수를 선언 한 경우 비슷한 문제가 발생합니다. 해결 방법은 모든 글로벌에 역방향 회사 URI (예 : com_apple_globalVarName)를 추가하는 것입니다.

+0

그래서 모든 참조 된 커널 확장을 언로드해야합니다. – Hedge

+0

내 경험에 비추어 볼 때, 다른 방법을 고칠 수는 없으므로 그렇게해야 할 것이라고 말하고 싶습니다. 고유하지 않은 전역 변수의 실수를 범한 경우 다른 kext가 문제를 일으키는 지 알지 못하기 때문에 컴퓨터를 재설정하는 것이 좋습니다. – TheDarkKnight

+1

그것은 내 운전자가 아니며 변경할 수도 없습니다. – Hedge

관련 문제