Linux 커널 업그레이드 후 vmware 커널 모듈을 다시 컴파일해야 하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/827862

문제

Linux 커널 업그레이드 후 vmware-config.pl을 사용하여 일부 재구성 작업(일부 커널 모듈 빌드 포함)을 수행할 때까지 VMWare 서버를 시작할 수 없습니다.

Windows VMWare 호스트를 최신 Windows 서비스 팩으로 업데이트하는 경우 일반적으로 VMWare를 실행하기 위해 아무것도 할 필요가 없습니다.

VMWare가 Linux와 Windows에서 다르게 작동하는 이유는 무엇입니까?이 재컴파일 작업이 Windows보다 Linux 플랫폼에 어떤 이점을 제공합니까?

도움이 되었습니까?

해결책

가서 읽어보세요 Linux 커널 드라이버 인터페이스.

이 글은 Linux에 바이너리 커널 인터페이스가 없고 안정적인 커널 인터페이스가 없는 이유를 설명하기 위해 작성되었습니다.이 문서에서는 사용자 공간 인터페이스에 대한 커널이 아닌 _커널 내_ 인터페이스를 설명한다는 점을 기억하세요.커널 대 사용자 공간 인터페이스는 응용 프로그램이 사용하는 인터페이스인 syscall 인터페이스입니다.그 인터페이스는 시간이 지나도 _매우_ 안정적이며 깨지지 않습니다.최신 2.6 커널 릴리스에서도 여전히 잘 작동하는 0.9 이전 커널에 구축된 오래된 프로그램이 있습니다.이 인터페이스는 사용자와 애플리케이션 프로그래머가 안정적이라고 믿을 수 있는 인터페이스입니다.

이는 많은 Linux 커널 개발자의 견해를 반영합니다.커널 내 구현 세부 사항과 API를 언제든지 자유롭게 변경할 수 있으므로 훨씬 더 빠르고 더 나은 개발이 가능합니다.

커널 내 인터페이스를 릴리스마다 동일하게 유지하겠다는 약속 없이는 VMWare와 같은 바이너리 커널 모듈이 여러 커널에서 안정적으로 작동할 방법이 없습니다.

예를 들어, 새 커널 릴리스에서 일부 구조가 변경되면(더 나은 성능이나 더 많은 기능 또는 기타 이유로) 바이너리 VMWare 모듈은 이전 구조 레이아웃을 사용하여 치명적인 손상을 일으킬 수 있습니다.소스에서 모듈을 다시 컴파일하면 새로운 구조 레이아웃이 캡처되므로 필드가 제거되거나 이름이 바뀌거나 다른 목적이 지정된 경우 여전히 100%는 아니지만 작업 가능성이 더 높아집니다.

함수가 인수 목록을 변경하거나 이름이 바뀌거나 더 이상 사용할 수 없게 되면 동일한 소스 코드에서 다시 컴파일해도 작동하지 않습니다.모듈은 새 커널에 적응해야 합니다.모든 사람이 소스를 가지고 있어야 하고 소스를 적절하게 수정할 수 있는 사람을 찾을 수 있기 때문입니다."작업을 최종 노드로 푸시"는 네트워킹과 자유 소프트웨어 모두에서 일반적인 아이디어입니다.[주변에 있는]/[Linux 커널 외부 개발자의] 리소스가 [백본의]/[Linux 개발자의] 제한된 리소스보다 크기 때문에 전자가 더 많은 작업을 수행하도록 하는 절충안이 있습니다. 허용됩니다.

반면에 Microsoft는 바이너리 드라이버 호환성을 최대한 유지해야 한다는 결정을 내렸습니다. 독점 세계에서 플레이하고 있기 때문에 선택의 여지가 없습니다.어떤 면에서 이는 더 이상 움직이는 대상에 직면하지 않는 외부 개발자와 아무것도 변경할 필요가 없는 최종 사용자에게 훨씬 더 쉬워집니다.단점은 이로 인해 Microsoft가 이전 버전과의 호환성을 유지하도록 강요한다는 것입니다. 이는 Microsoft 개발자에게 (기껏해야) 시간이 많이 걸리고 (최악의 경우) 비효율적이며 버그를 발생시키고 앞으로의 진행을 방해합니다.

다른 팁

Linux에는 안정된 커널 ABI가 없습니다. 데이터 구조의 내부 레이아웃 등 버전에서 버전으로 변경됩니다. 새로운 커널에서 ABI를 사용하려면 VMware를 재건해야합니다.

반면에 Windows에는 서비스 팩에서 서비스 팩으로 변경되지 않는 매우 안정적인 커널 ABI가 있습니다.

Bdonlan의 답변에 추가하기 위해 ABI 호환성은 혼합 백입니다. 한편으로는 최신 버전의 커널과 함께 작동하는 이진 모듈 및 드라이버를 배포 할 수 있습니다. 반면에 커널 프로그래머는 많은 접착제 코드를 추가하여 뒤로 호환성을 유지하도록 강요합니다. Linux는 오픈 소스이기 때문에 커널 개발자도 허용되는지 여부도 마찬가지입니다, 이진 모듈을 배포하는 능력은 그렇게 중요하지 않습니다. 거꾸로 Linux 커널 개발자는 커널을 개선하기 위해 데이터 구조를 변경할 때 ABI 호환성에 대해 걱정할 필요가 없습니다. 장기적으로는 클리너 커널 코드가 발생합니다.

다양한 문화 환경과 기대에서 Linux와 Windows가 개발 된 결과입니다. http://www.joelonsoftware.com/articles/biculturalism.html. 요컨대 : Windows는 사용자에게 적합하도록 설계되었지만 Linux는 오픈 소스 개발자에게 적합하도록 진화합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top