pci_probe() 에 대하여~

darkblue99의 이미지

첫번째 질문
pci_probe는 init_module()할때 call되는 것 같은데..
그런데 probe할때 같은 pci장치가 2개가 있을 경우엔 probe가 어떻게 진행되나여?

예를 들어 ethernet card가 2개 있을때 하나의 module로 올리고 minor number로 구분할텐데..
probe()할때가 궁금합니다.

두번째 질문
pci driver가 하나의 모듈이 아니라 2개의 모듈로 되어 있어서
하위 레이어와 상위레이어가 있고..
상위레이어에서는 application의 system call과 하위레이어를 연결해 주고
하위레이어는 하드웨어를 control한다면...
이때도 2개의 pci card가 있을때 (첫번째와 같은경우)

어떤식으로 접근하는 것인가요?
상위 layer에 open()함수를 구현해야 할텐데..
실제 하드웨어를 control할때 구분은 minor number로 하고..
하위 레이어에서는 어떤 식으로 구현해야 2개의 장치를 모두 지원하게 할 수 있나요?

음.. 질문이 좀 이해가 안되실수 있겠네요.. -.-

user mode

-----------------------------------------------------------
/dev/dt0 /dev/dt1 장치 파일
-----------------------------------------------------------
상위 layer 의 driver
-----------------------------------------------------------
하위 layer의 driver
-----------------------------------------------------------
PCI card 1 PCI card 2 하드웨어

에서 중간의 driver는 1개씩만 모듈로 등록할텐데..
어떻게 2개의 장치파일과 두개의 하드웨어에 대응하게 할 수 있는지 궁금합니다.
특히 이처럼 layer가 나뉘어 있을경우에 어떤 점을 고려해야할까요?

hb_kim의 이미지

darkblue99 wrote:
첫번째 질문
pci_probe는 init_module()할때 call되는 것 같은데..
그런데 probe할때 같은 pci장치가 2개가 있을 경우엔 probe가 어떻게 진행되나여?

예를 들어 ethernet card가 2개 있을때 하나의 module로 올리고 minor number로 구분할텐데..
probe()할때가 궁금합니다.

루프 돌면서 pci_find_device( ) 나 pci_for_each_dev( ) 를 사용해서 벤더 ID 와 function 이 매칭하는 모든 디바이스의 인스턴스를 찾습니다. 각 디바이스마다 디바이스 자료구조를 할당해서 관리하면 되겠죠.

darkblue99 wrote:

두번째 질문
pci driver가 하나의 모듈이 아니라 2개의 모듈로 되어 있어서
하위 레이어와 상위레이어가 있고..
상위레이어에서는 application의 system call과 하위레이어를 연결해 주고
하위레이어는 하드웨어를 control한다면...
이때도 2개의 pci card가 있을때 (첫번째와 같은경우)

어떤식으로 접근하는 것인가요?
상위 layer에 open()함수를 구현해야 할텐데..
실제 하드웨어를 control할때 구분은 minor number로 하고..
하위 레이어에서는 어떤 식으로 구현해야 2개의 장치를 모두 지원하게 할 수 있나요?

음.. 질문이 좀 이해가 안되실수 있겠네요.. -.-

user mode

-----------------------------------------------------------
/dev/dt0 /dev/dt1 장치 파일
-----------------------------------------------------------
상위 layer 의 driver
-----------------------------------------------------------
하위 layer의 driver
-----------------------------------------------------------
PCI card 1 PCI card 2 하드웨어

에서 중간의 driver는 1개씩만 모듈로 등록할텐데..
어떻게 2개의 장치파일과 두개의 하드웨어에 대응하게 할 수 있는지 궁금합니다.
특히 이처럼 layer가 나뉘어 있을경우에 어떤 점을 고려해야할까요?

드라이버중에 이와 같은 예제를 보시고 비슷하게 따라하시면 됩니다. 예로 블록 디바이스 드라이버의 경우는 back-end 는 하드웨어를 액세스하면서 front-end 는 블록 드라이버와 인터페이스하죠. 블록 드라이버는 back-end 가 블록 디바이스 드라이버와 인터페이스 하면서 front-end 로는 device file interface 를 제공합니다.

newmania의 이미지

하드웨어가 정상적이라면 정확히 설치된 개수의 디바이스들이 나타나게 됩니다. 같은 칩셋이 여러개가 사용되었다면 해당 개수 만큼의 디바이스가 나타납니다. 만약 서로 다른 동작을 해야한다면 해당되는 디바이스 각각에 맞는 드라이버들을 별도로 올려주어야 하겠지요.

댓글 달기

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