[완료]그래픽 카드 혹은 컨트롤러 드라이버 개발 How-to

jeongheumjo의 이미지

안녕하세요?

제가 회사에서 새로 리눅스를 사용하게 되었는데 완전 초보라서 이곳에 질문을 올립니다.
부디 조언을 해주시리라 믿으며 적어봅니다 .. ^^

Android-x86 프로젝트의 리눅스를 사용합니다. 그걸 범용 x86 PC에서 개발해야 하는건데요,
제가 해야하는 것이 그래픽 카드 혹은 그래픽 컨트롤러(보드 내장형의 경우)의 디바이스 드라이버를 개발하는 것입니다.

아시겠지만 Android 는 커널 2.6을 사용해서 모바일 플랫폼을 구현한 것인데 모바일용으로 최적화를 하느라고 커널에서 x86용의 대부분의 불필요한 것들을 다 제거가 된 상태입니다. Android-x86 프로젝트는 제거되었던 것들을 다시 추가하고 보완하면서 x86에서 안드로이드를 사용할 수 있게 하려는 것이구요.

현재 상태에서 제 PC, G31 칩셋이며 GMA3100 을 그래픽 컨트롤러로 온보드되어있는 시스템에서 lsmod를 해보면 i915 라는 드라이버가 보입니다. 그런데 GMA3100을 제대로 사용하지 못하는 것 같아요. 무비를 재생해보면 끊기고 느리거든요. 아마도 소프트웨어 가속 에뮬레이터를 사용하고 있는 것 같습니다.

제가 이루어내야 하는 것은 OpenGL ES 2.0 이 지원되는 그래픽카드를 찾고 그 드라이버를 개발하는 방법을 찾아내는 정도 입니다. 나중에는 실제 개발을 해야하고요.

그런데 제가 리눅스의 왕초보인데다가 안드로이드도 처음보는 것인데 게다가 그래픽카드 드라이버를 개발해야 하니 앞이 막막합니다.

그래픽카드 드라이버를 개발하는 방법을 배울 수 있는 책이 있으면 좀 알려주세요~
책이 아니라도 사이트 주소도 좋습니다.

아니면 간단하게 개발의 과정을 간단하게 설명해주실 수 없으신가요?
제가 인터넷에서 찾은 바로는 일단 프레임버퍼 드라이버를 개발해야 하는 것 같고요, 그 다음에 3D 가속 드라이버를 개발해야 하는 것 같은데요, 드라이버 소스코드는 아마도 오픈소스를 구해봐야 할 것 같구요...

맨땅에 헤딩하는 저에게 작은 쿠션하나 부탁드립니다. 이마에 붙이게요...

neogeo의 이미지

2.0 이 지원되는 그래픽 칩이면 opengl es 2.0 이 올라가는 환경까지는 제공되는게 정상입니다.

드라이버 개발까지는 필요없을거 같고, es 2.0 을 안드로이드의 스펙에 어떻게 맞출까만 고민하시면 될 것 같습니다. 즉 ES 2.0 위에 ES 1.1 과 1.0 이 돌아가는 환경을 구축하면 되실 것 같습니다. ( 보통 2.0 지원되는 칩은 1.1 과 1.0 드라이버를 함께 제공할 확률이 높습니다. )

현재의 GMA3100 칩셋이 무언지는 몰라도 PC 용 칩이면 보통 드라이버가 OpenGL 을 지원하지 OpenGL ES 를 지원하지는 않습니다.

따라서 현재의 PC 환경에서 제대로 그래픽 가속을 받고 싶다면 opengl 위에 올라간 OpenGL ES 드라이버나 에뮬레이터를 만드시는게 정석일것 같습니다. ( 보통 안드로이드의 ES 에뮬레이터는 소프트웨어 에뮬레이터 인지라, 꽤 느릴겁니다, 또한 GMA3100 이 OpenGL 을 제대로 지원한다는 가정하에 그렇습니다. 왠만하면 다들 지원 하므로 크게 걱정은 안해도 되지만, Linux환경에서 AMD ( ATI ) 그래픽 카드들의 OpenGL 가속 환경이 형편없었던 적도 있는지라..... )

또한, 무비가 끊기는게 무비의 디코딩 때문에 끊기는건지 아닌지 확인하실 필요도 있습니다. ( 물론 소프트웨어 가속 드라이버 때문일게 거의 확실하지만요... )

Neogeo - Future is Now.

Neogeo - Future is Now.

sql2의 이미지

Quote:
2.0 이 지원되는 그래픽 칩이면 opengl es 2.0 이 올라가는 환경까지는 제공되는게 정상입니다.

위에서 말씀하신 올라가는 환경까지는 제공이란 것이...

OpenGL 2.0 을 지원하면 OpenGL ES 2.0 도 지원한다는 것인가요? 아니면 에뮬레이션이 가능하다는 뜻인가요?

저는 nvidia sdk, ati sdk, powervr sdk, iphone sdk .. 등이

OpenGL 2.0 이상지원하는 그래픽카드가 달린 개발PC 에서 에뮬레이션을 해주는 걸로 알고 있는데요.

neogeo의 이미지

es 2.0 이 지원되는 (임베디드) 그래픽 칩이면 드라이버 까지 제공되는게 정상이라는 의미지요.

es 2.0 과 opengl 2.0 은 전혀 다른 스펙입니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

jeongheumjo의 이미지

댓글로 답변해주셔서 감사드립니다.

그런데 지금 저에게 필요한 것은 OpenGL 의성능도 중요하지만 Full HD 의 화면이 타겟이거든요.
아무래도 현재 제가 사용하는 시스템에서는 무리이고요, 인텔 온보드 칩셋에만 의존할 수도 없는 것 같습니다.
ATI, NVIDIA 등 전문 업체의 그래픽 카드를 고려해야 할 것 같아요.
그런데 이런 벤더들의 경우 소스를 오픈하지 않는다고 하네요....
역공학으로 만든 드라이버를 사용하거나 벤더들이 릴리즈한 바이너리를 커널에 링크해서 사용하는 방법밖에 없다고 검색결과가 정리가 됩니다.
제가 무슨 수를 써서라도 구해볼 수 있는건 역공학된 드라이버 소스코드 혹은 벤더가 릴리즈해준 바이너리(라이브러리) 일 것 같아요.
그럼 이것들을 가지고 드라이버를 어떻게 구현할 수 있는지... 제가 기술을 습득할 수 있는 래퍼런스가 없을까요? 책이나 인터넷 자료나 커뮤니티들 중에서요..

미리 감사드립니다.
좋은 하루 되세요~

danskesb의 이미지

ATI는 그나마 드라이버가 어느 정도라도 오픈되어 있지만 엔비디아는 좀 암울합니다. nouveau라는 프로젝트가 있지만 아직까지 안정화 단계는 아니고 nv 드라이버는 2D 가속만 지원합니다. 만약 이걸 성공하신다면 엄청 대접받으실 겁니다. (그만큼 어렵다는 이야기죠)

찾아 보니 OpenGL 2.0 지원 그래픽 카드용 OpenGL ES 2.0 에뮬레이터가 있긴 한데, 당연히 오픈소스 에뮬레이터는 안 보입니다.

---- 절취선 ----
http://blog.peremen.name

neogeo의 이미지

Open GL 자체는 Mesa 내용을 살펴보시면 개발이 어느정도 가능합니다.

그래픽 드라이버 자체를 구현하시는건.. 글쎄요... 하드웨어 회사에서 스펙을 주지 않는 이상 개발은 거의 불가능하시다고 보는게 맞습니다. 그래픽 칩 드라이버는 다른 일반 드라버와는 판이하게 다른구조인지라, 하드웨어 자체를 직접 제조한 쪽에서 제대로 내부 정보를 주지 않는 이상 개발이 불가능합니다.

바이너리 역공학으로 풀어나가려는 생각도 버리십시오. 그래픽 칩은 단계별로 사용하는 레지스터만 해도 수십개씩 존재합니다. ( 단계 차제도 여러 단계가 있구요. ) 그냥 어떻게 해보기엔 복잡도가 상당히 높습니다. 하드웨어 제조사마다 특허를 걸고 사용하는 기능도 많은지라, 그런 내용은 아예 공개도 안하구요.

차라리 DirectFB 를 사용하시는게 나을 것 같습니다. 동영상을 play 하는데 왜 안드로이드가 필요한지는 의문이지만 안드로이드 스펙에 꼭 맞춰서 동영상을 플레이해야하는게 아니라면 말이지요. 아니면 안드로이드가 곧 ES 2.0 을 지원할테니 ES 2.0 을 그대로 올릴 수 있는 그래픽 칩을 사용하시는 것도 방법이겠지요.

정 안되면 안드로이드 자체를 좀 고쳐서 OpenGL 을 사용하게 만드시는게 훨씬 쉬울 것으로 생각됩니다.

Neogeo - Future is Now.

Neogeo - Future is Now.

jeongheumjo의 이미지

역시나 인터넷(http://www.aesop.or.kr/?mid=board_android_platform&page=2&document_srl=48572)에서 알아본 바로 그 에뮬레이터는 가속 하드웨어가 없는 경우를 위해 소프트웨어로 구현한 하드웨어 가속기 에뮬레이터라고 하던데요, 그렇다면 하드웨어는 사용하지 않는 것이죠. 대신 소프트웨어적으로 처리를 하는 건데 성능이 당연히 떨어질테구요..

그리고 제가 지금 이런 조사를 하고 있지만 왕 초보라서 역공학같은건 엄두도 못냅니다 ^^;
답변 감사합니다.

sql2의 이미지

MIPS, ATOM 포팅도 생각보다 오래 걸렸으니 쉽지 않을 것 같네요.

ATOM 도 겨우 Acer 에서 제품 나오고, MIPS 는 SBC 제품으로 포팅 성공했다는 정도니...

구글이 애플과 노키아, MS 등을 견제하기 위해서 발빠르게 준비해서 나온 것은 좋았으나,

ARM 만, 특정코어만 지원했던 것이 오히려 제품군을 늘리는데 발목을 잡았으니...

포팅 이슈만 확실했어도 파급력이 어마어마 했을텐데...쯔쯥..

http://www.android-x86.org/download

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.