한 달 만에 M4 Mac Mini용 Linux GPU 드라이버 만들기

2 days ago 10

Cody Ho와 Niklas가 약 한 달 만에 M4 Mac Mini와 MacBook Neo용 OpenGL ES 3.0 완전 준수 GPU 드라이버를 개발함 기존 하이퍼바이저로 macOS의 GPU 동작을 관찰하고 재생하면서 AGX 펌웨어 ABI를 역공학했으며, Apple 바이너리를 보지 않는 클린룸 방식으로 실험을 공개함 Codex와 Claude를 활용해 커널 드라이버와 사용자 공간 구성 요소를 구현했으며, 작은 실행 캡처와 명확한 테스트가 진행을 가로막던 문제를 푸는 데 중요했음 하드웨어를 빠짐없이 분석하기보다 Mesa 기능 구현에 필요한 역공학을 수행하는 방식이 훨씬 빨랐으며, Khronos 적합성 테스트가 개발 기준으로 작동함 M4 Mac Mini에서 Chrome과 Firefox의 WebGL 및 합성이 동작하고 Minecraft 200fps를 달성했지만, 일반 사용자 배포와 업스트림 반영에는 추가 테스트와 사람의 검토가 필요함 개발 범위와 클린룸 방식 목표는 M4 Mac Mini와 MacBook Neo에서 OpenGL, 이후 Vulkan까지 적합성을 갖춘 GPU 드라이버를 구현하는 것임 GPU가 없으면 모든 렌더링을 CPU로 처리해야 하며, 속도와 전력 효율이 크게 떨어짐 통상 수년이 걸리는 작업을 며칠 안에 끝내려 했으나, 실제로는 약 한 달이 걸림 개발 과정에서 사용자 공간 드라이버와 Linux 커널 드라이버를 구현함 실시간 탐침 실험만으로 M4, A18 Pro, M5 대부분의 사용자 공간 동작을 역공학함 자체 중간 표현(IR)/셰이더 컴파일러, 명령 스트림 생성기 등 사용자 공간 구성 요소를 새로 만듦 앞서 만든 하이퍼바이저의 실행 추적으로 AGX 펌웨어 ABI 전체를 처음부터 역공학함 Apple 바이너리는 열어보지 않았으며, 하이퍼바이저의 하드웨어 실행 추적과 직접 만든 셰이더만 분석함 필요한 Apple 바이너리 블롭은 내부를 들여다보지 않는 불투명 객체로 취급하고, 지인이 작성한 문서를 바탕으로 별도 구현함 캡처한 메모리 페이지에서 셰이더를 발견하면 해당 페이지를 버리고 자체 셰이더로 대체함 두 agx-re 저장소에 모든 실험을 공개해 작업의 출처를 검증할 수 있도록 함 문서에 있는 Claude의 ‘클린룸이 아니다’라는 헤더는 지시를 혼동한 결과로 보고 있으며, 해당 문서에 클린룸을 훼손하는 정보는 없다고 판단함 드라이버는 커널 공간과 사용자 공간으로 나뉨 커널은 펌웨어 통신, 버퍼 할당, 스케줄링을...

Read Entire Article