리눅스는 왜 드라이버가 커널버전별로 틀린지요??

ironiris의 이미지

USB락의 드라이버가 모듈로 사용되는데..
특정 버전의 커널에서만 작동하더군요.
윈도우는 XP, 2000 등 드라이버가 호환되는 경우가 대다수인데..
왜 리눅스는 글자만 틀려도 작동안하는지 궁금합니다.

도움말 미리 감사합니다. :)

권순선의 이미지

왜냐면 커널 API가 버전이 바뀜에 따라서 바뀌기 때문입니다.

그리고 커널을 컴파일할 때 모듈에 박힌 버전이 달라도 로딩할 수 있게 하는 옵션을 넣지 않고 컴파일되어 있다면 API가 바뀌지 않은 인터페이스만 사용하는 모듈이라고 하더라도 로딩이 되지 않습니다.

마잇의 이미지

아래 글에 궁금해 하시는 내용이 나와 있는 것 같습니다.

http://www.kroah.com/log/linux/ols_2006_keynote.html

2006 OLS 행사에서 발표된 내용인데요 노벨(수세) 소속의 커널 개발자분께서 몇몇 잘못 알려진 문제들에 대해 설명하신 내용입니다.

Documentation/stable_api_nonsense.txt를 소개하는 부분의 내용을 보시면 될 것 같습니다.

독점적인 라이센스의 커널 모듈의 문제에 대해서 잘 설명되어 있습니다. stable_api와도 관련이 있는 문제이겠네요.

--
마잇


--
마잇

elflord의 이미지

95,98과 2000,XP계열이 호환이 안되서 따로 있는 경우가 많고 또 2000SV, 2003SV와도 호환이 안되는 것들이 대부분입니다.

윈도우라고 할지라도 결국은 버전마다 따로 있는 셈이니 호환된다고 말할수는 없지요. 단지 벤더들이 지원을 잘해줘서 표가 잘 안나서 그렇지...

그럼 이만 총총...[竹]
http://elflord.egloos.com


===== ===== ===== ===== =====
그럼 이만 총총...[竹]
http://elflord.egloos.com

ironiris의 이미지

(95/98)과 (2000/XP)가 호환이 안되는 것은 당연하다고 봅니다.
하지만 최신 버전이 아닌 윈도우2000까지만 있는 드라이버를 XP에 설치해도 작동되는 경우가 많았습니다.
(예를 들자면 XP 전용 드라이버가 안나온 스캐너 혹은 사운드카드 등등 XP는 아직 출시 안되고 베타판이 설칠때)

커널버전 2.4와 2.6이 호환이 안된다는 것은 이해가 가는데...
2.4.30과 2.4.32가 호환이 안된다는 것은 이해가 안갑니다.

m105의 이미지

무슨 드라이버 이길래요?
ubs락의 드라이버가 2.4.30, 2.4.32에서 작동 안한다는 소리인가요..?
더 자세한 내용이 있어야 하지 않을까요..?예를 들면 어느 제품에서
그런건지 자세하게 적힌 그런 내용이 한개도 없네요...
제가 글을 제대로 못 읽은건지
정보가 제대로 제공 안된건지 모르겠네요.

ironiris의 이미지

물건 제조업체명을 밝히긴 그렇고요..
usb락업체입니다. 그정도 까지만.. 휘릭~

사랑천사의 이미지

결국 커널 버젼이... 다릅니다.. 그리고 9x계열 커널과 NT계열 커널로 나뉘고 작동 원리가 서로 틀립니다. 하지만 WDM 드라이버의 경우 어느정도 호환 되도록 만들기도 했습니다만...

98 드라이버를 XP에 깔면 안 돌아 가는 경우가 많습니다.
Win2000(NT 5.0), WinXP(NT 5.1), Win Srv 2003(NT 5.2)

이런 것으로 알고 있습니다. 5.1용을 5.2에 깔아도 정상 작동 하는 경우가 있긴 했지만, 작동 안 하는 경우도 다수 있었습니다. 깔리긴 해도 재부팅이 자주 된다거나 하는 문제가 있는 경우도 있었고요. 그리고 모듈을 컴파일 할 때 리눅스의 경우 컴파일된 커널과 짝을 마추기 위해서 버젼을 모듈에 기록 해 두게 됩니다. API 쪽에서 틀려지는 문제도 있죠 버젼마다... 2.6.12이후에서 그 이전과 많이 달라 졌었고.. 2.6.15 이후에서 또 한번 크게 바뀌었다고 알고 있고요.. 그 전에.. 2.4 쓸 때는 커널 자체에 대해 관심 가진 적도 별로 없고 컴파일도 한 번도 한 적이 없기 때문에 버젼별로 뭐가 크게 차이가 났나 모르겠습니다. 다만 2.2에서 2.4 가면서 네트워크 쪽이 엄청 발전 한 걸로 알고 있고 .2.6으로 오면서 전체적인 퍼포먼스가 많이... 향상 되었다고 생각 됩니다. 일단 체감 속도가 다릅니다. IBM에서 벤치마킹을 한 자료도...(거의 연구 수준이죠.) 있습니다 찾아 보시면. 아마도 이런 과정 속에서 API나 내부적으로 부담이 많이 가는 알고리즘등이 수정 되었을 것이고, 것으로 안 보이지만 기능상 수정 된 부분도 많을 겁니다.

뭐 제가 이렇게 말 하지만 전문적으로 아는 것은 아니고요... 잘 아는 것도 아닙니다. 버젼은 숫자 하나지만 그만큼 뭔가 많은 것들이 바뀌었다는 것을 말 하는 경우도 있습니다. 그리고 리눅스가 커널이고 뭐고 여러가지를 컴파일 할 수 있는 경우가 대부분 이기 때문에 숫자 하나가 달라져도 컴파일만 다시 하면 되는 경우가 많고 해서 별로 신경 안 쓰는 분들도 많으신 거 같네요. 무엇보다 중요한건 호환성이나 안정성 문제 때문에 버젼 하나에도 의존성을 거는 거라고 생각이 되는군요.
----
Lee Yeosong(이여송 사도요한)
E-Mail: yeosong@gmail.com
MSN: ysnglee2000@hotmail.com
----
웃음... 행복... 평화... (진정한...) 희망... 사랑... 이 세상 모든것이 그렇다면 얼마나 좋을까...(꿈 속의 바램일 뿐인가...)

사람천사

사랑천사의 이미지

바이너리 자체에 쓰여진 커널 버젼이 2.4.32라고 안 되어 있어서 겠죠.. 그리고 보통 그런 경우는 컴파일 하면 될 겁니다.

물론 이런 경우는 있겠죠... 어떤 장치의 경우는 2.4.13까지는 지원이 되고 그 이후로는 커널 소스에서 빠져 버려서 컴파일도 못 하는 경우가 있쬬. 그럴 때는 2.4.14 이후 용으로 포팅을 해 줘야 겠쬬 일일히.. 어쩔 수 있나요.. 그리고 리눅스가 여러 아키텍처를 지원한다는 것도 버젼이나 여러가지 부분에서의 안정성을 떨어 트릴 수 있는 부분입니다. 그리고 소스를 직접 건드리고 컴파일 할 수 있다는 소스 레벨에서의 호환성을 바이너리 상에서의 호환성 보다 우선적으로 생각 한다면 그렇게 중요하지 않은 것이 아닐까요.. 사실...

VMWare 만 봐도... 커널을 자동적으로 컴파일 하도록 자체 설정 도구에서 지원을 하게 되어 있고 하니 굳이 특별히 호환이 안 되지는 않습니다. 아니 사용자가 큰 문제 없이 사용 할 수 있다는 뭐 그런 말이죠.

근대.. 굳이 '왜'냐고 질문 하신다면 저 같은 경우는 드릴 만한 훌륭한 답을 가지고 있지 못하군요. 다른 분들이 또 답을 아마도 달아 주실 거라 생각이 됩니다.

마지막으로 갑자기 떠오른 건데.. 리눅스가 배포판이 천차만별 이란것과... 커널을 각자 배포판 만드는 곳마다 다르게 튜닝하고 안정성이나 커널 내부 기능 지원도 조금씩 다 다르다는 것 역시 생각 해 보시면 버젼이 중요한 위치에 있고 이것 때문에 호환이 왜 안 되고 그러는지 이해 하실 수 있으실 거 같습니다.
----
Lee Yeosong(이여송 사도요한)
E-Mail: yeosong@gmail.com
MSN: ysnglee2000@hotmail.com
----
웃음... 행복... 평화... (진정한...) 희망... 사랑... 이 세상 모든것이 그렇다면 얼마나 좋을까...(꿈 속의 바램일 뿐인가...)

사람천사

ironiris의 이미지

바이너리 에디터를 이용해서 문자열 숫자만 살짝 바꾸었는데도 안되더군요.

그래도 세번째 숫자만 차이나면 좀 되면 얼마나 좋아.. ㅠㅠ

하긴 배포본이 다르면 안될수도 있겠다는 생각이 드네요.

애휴... 드라이버 개발자가 출장갔다는데.. 빨리 돌아와야 할텐데요. ㅠㅠ
그냥 드라이버를 컴파일해서 사용할수 있게 하면 얼마나 좋아? ㅠㅠ
뭐 그리 대단한 비밀들었다고.. ㅠㅠ

마잇의 이미지

예전에 커널을 컴파일 해보다가 버전이 맞지 않는 모듈도 강제로 로딩하는 설정을 본 것 같은데요.
그런 기능을 이용해보는건 어떠신지요?
--
마잇


--
마잇

ironiris의 이미지

부팅중에 나오는 메시지를 보면 위에서 실패하고 밑에서 강제 로딩했다는 메시지가 나옵니다.
그래도 별 진전은 없네요.
월요일에 어떻게 되겠죠. 다른 업무를 봐야겠네요. :)

Q의 이미지

커널 버전마다 API가 그리많이 다른건 아닙니다.
2.6.17.12와 2.6.17.13은 그리 많이 다르지 않죠..

그렇지만, 서로 driver가 binary호환을 못가지도록 되어있습니다.

정책적인걸로 생각하시면됩니다.
커널의 역사를 거슬러 올라가보면 그 원인이 있다고 생각됩니다.

windows9X가 널리 쓰이던 시절로 거슬러 올라가 봅시다.

그때 windows를 쓰는사람들 거의 대부분이 bluescreen때문에 짜증났던적은 한번씩 꼭 있었을 겁니다.
bluescreen의 상당수를 차지하는 부분이 driver가 잘못만들어져서 kernel이 죽은경우였죠
요즘은 많이 좋아졌지만, 그땐 퍽하면 모하다가 죽고 모하다가 죽고 그랬죠.. 그래서 하루에 1번이상 블루스크린이 뜨기 시작하면 다시 밀고 새로 깔았죠. windows98은 대부분의 사람이 이 os를 쓰면 98번은 꼭 다시 깐다라는 우스게소리가 나올만도 했었죠.

리눅스도 그때그시절에 같이 잇었습니다.
windows가 드라이버땜에 kernel die 빈번하다는것도 알고 있었구요.
windows는 x86밖엔 지원하지 않았지만, linux는 x86뿐만 아니라, 다양한 chip셋을 지원했었습니다.
만약 linux도 그때시절에 driver를 binary호환으로 만들수 잇는 드라이버모델을 발표하고, 이진드라이버를 허용했다면,
각 chip셋별 드라이버가 버전마다 나와야 하며, 서로에 대한 호환성 테스트는 거의 불가능했죠.
(오류가 나서 오류 레포팅이 들어올텐데, 각 칩셋마다 각 버전마다 증상이 틀리면 거의 패닉상태죠..)
즉 windows와 같이 driver잘못 때문에 kernel die가 빈번하게 날거라는건 불보듯 뻔했었습니다.

그래서인지
리눅스는 정책을 잡아갈때 모든 driver소스는 커널이 컴파일될때 만들고, 버전명을 체크해서 그버전에서 컴파일된 binary만 링크되도록 하였던거죠.

windows도 그이후 정신차리고 driver에 대한 WHQL(?정확히 스펠링은 모르겠네요)테스트를 실행해서 이테스트를 통과하면 MS가 보증해주는 방식도입(이걸 통과하면 드라이버설치시 '이드라이버는 신뢰할수없습니다. 계속하시겠습니까?"란게 안뜨죠)과 예전 device에 대해선 MS가 인정하는 드라이버를 끼워주는 방식을 도입하였죠. 그래서인지 driver에 대한 kernel die는 상당히 많이 좋아졌습니다.

저도 개인적인 생각으론, 히스토리는 그렇다치더라도, 드라이버가 binary호환성을 가져야만 더욱더 리눅스가 Desktop으로써 발전을 한다고 생각합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.