저는 *nix 기반 시스템용 "에뮬레이트된 GPU 드라이버"를 작성하는 데 열정을 쏟고 있습니다. 즉, 디버그 메시지와 함께 X API 호출에 응답하는 드라이버(분명히 X 서버 뒤에)를 작성하고 싶습니다.
즉, *nix 시스템이 실제 GPU를 갖도록 속이고 싶습니다. 따라서 콘솔 기반 시스템에서 GUI 가속 패키지에 대한 테스트베드를 만들 수 있습니다.
이제 *nix 콘솔 기반 시스템에서 GUI 가속 패키지를 실행하면 실제 GPU(또는 내 의견으로는 더 나은 GPU 드라이버)가 부족하여 종료됩니다.
그래서 나는 알고 싶습니다:
- 가능합니까? (*nix를 속여 실제 GPU를 갖도록 GPU 드라이버 작성)
- 코딩을 시작하기 전에 어떤 리소스를 추천하시나요?
- 온라인에 비슷한 프로젝트가 있나요?
추신: 저는 숙련된 ANSI-C 프로그래머이지만 *nix에서 실제 커널/드라이버 개발에 대한 단서가 없습니다(USB 드라이버 개발에 대한 일부 튜토리얼을 읽어보십시오). 따라서 이러한 영역에 대한 몇 가지 질문이 있습니다. 리소스는 다음과 같습니다. 대단히 감사합니다. 미리 감사드립니다.
답변1
귀하의 요구 사항을 고려할 때 귀하가 직접 드라이버를 작성할 필요는 없을 것 같습니다. 당신은 사용할 수 있습니다LLVM 파이프라인, 귀하의 요구 사항을 충족한다고 생각합니다. 특히 '진짜 드라이버'다.일부단어의 의미이며 X11을 실행하는 데 필요하지 않습니다.
llvmpipe는 OpenGL 셰이더를 즉시 CPU의 기계 언어로 변환하고 실행하여 해석하는 가상 GPU를 생성합니다. 그것은 부분을 사용합니다LLVM이를 가능하게 하는 인프라입니다.
그러나 그것은아마실제로 일어나는 일은 llvmpipe가 이를 호출하는 바이너리에 의해 연결되기 때문에 귀하의 요구 사항을 충족합니다. 즉, 이는 커널에서 실행되는 실제 실시간 드라이버가 아닙니다. 대신 libGL.so
OpenGL 셰이더를 해석하는 대안을 만듭니다 .
소스 코드에서 3D 그래픽 가속 프로그램을 컴파일할 수 없으면 llvmpipe를 사용하여 좋은 효과를 내지 못할 수도 있습니다. (그러나 이것이 자신의 프로그램을 디버깅하는 데 도움이 되기를 원하므로 문제가 되지 않습니다.)
질문에 필요한 내용에 대한 추가 정보를 제공할 수 있습니다. 구체적으로: 코드를 디버그해야 하는 이유운전석 쪽에서? 필요한 디버깅 코드를 프로그램 자체(또는 프로그램 자체)에 넣을 수 없는 이유는 무엇입니까? 호출이 실패하면 X 라이브러리와 OpenGL 라이브러리 모두 오류 원인에 대한 정보를 제공합니다. 디버깅을 용이하게 하기 위해 프로그램에서 이 정보(및 커널 메시지)를 사용할 수 없는 이유는 무엇입니까? 커널에 구현된 가상 드라이버를 사용하여 드라이버 측에서 얻는 디버깅 정보가 실제 시스템에서 실제로 일어나는 일과 일치할 것으로 기대하는 이유는 무엇입니까? 더 중요한 것은, 프로그램이 낮은 수준의 문제를 생성하는 경우 해당 문제가 실제 세계에서 실행될 때 다른 GPU 및 드라이버에서도 동일할 것이라고 가정하는 이유는 무엇입니까?당신은 이러한 질문에 대한 완벽한 답을 얻을 수 있습니다(게다가 뭔가 빠졌을 수도 있지만)이렇게 설명해 주시면 질문에 대한 답변이 더 쉬울 것 같습니다.
(그런데 llvmpipe의 흥미로운 응용 프로그램은 3D 가속 버전으로만 작성된 GUI를 활성화하지만 3D 가속이 없는 컴퓨터에서도 여전히 실행된다는 것입니다. 이론적으로 이는 3D 가속을 사용할 수 없는 상황에서 도움이 될 것입니다. 내부적으로 GNOME 쉘 실행, 실제로 작동하려면 일부 개발 작업이 필요할 수 있지만 그놈 쉘은 자동으로 구현되지 않을 수 있는 일부 구성 관련 가정을 한다고 생각합니다.일부 성능 문제. Unity는 Ubuntu 12.10의 실제 작업 예제입니다.단 하나의 버전, 별도의 "Unity 2D" 구현이 아닌 llvmpipe 위에서 실행될 수 있습니다. )