Linux에서 powerspan2 PCI 디바이스 드라이버 제작하기.

increw의 이미지

안녕하세요.

현재 powerspan2 PCI 칩을 이용해서 리눅스 디바이스 드라이버를 작성하고 있습니다.

처음 시작 당시에 자료가 너무 없어서 임베디드 엔지니어라면 누구나 경험했을

맨땅에 헤딩..부터 시작을 했습니다.

그래서 그런지 아무리 해도 초기화가 이루어지지 않고 있습니다..

웹을 아무리 뒤지고 뒤져봐도 약간의 질문만 있지 레퍼런스할 문서나 소스가 너무 터무니 없이 없더군요...

그래서 이렇게 실례를 무릅쓰고 KLDP에 문의 해 봅니다...

혹시 리눅스가 되엇든 vxworks가 되었던 툰드라 powerspan2 디바이스 드라이버 관련 경험있으신분 있으신가요?

아니면 참조할만한 소스나 문서 있으시면 정중히 부탁드립니다...

이 글이 앞으로 PCI 관련 많은 프로그래머 분들의 궁금증을 해결할 좋은 시작이 되길....

gogutcham의 이미지

먼저 pci 장치가 발견되는지 확인하세요. 슬롯에 보드 꽂고 PCI 장치 목록에서 발견되는지 보세요.
그런 후에 장치가 요구하는 메모리와 인터럽트가 커널에 의해 할당되었는지도 확인하세요.
(pci 장치들은 표준에서 정의한 레지스터에 자신이 필요로 하는 메모리 크기와 인터럽트를 기록해두고 커널이 이 레지스터들을 읽어서 필요한 리소스를 파악하는 방식으로 리소스 관리를 합니다.)
장치가 필요로하는 리소스가 이상하면, powerspan 매뉴얼을 보고 powerspan이 제대로 된 리소스를 요청하도록 합니다. 예를 들면, 어떤 pci 칩은 전원이 들어오면 eeprom의 값대로 pci 레지스터를 초기화합니다. 이런 경우 eeprom의 내용을 고쳐서 pci 칩이 제대로 된 리소스를 요청하도록 해야 합니다.

pci 장치가 목록에서 발견되고, 리소스 할당이 제대로 되었다면 일단은 드라이버 껍데기만 작성해서 insmod를 해보는 것이 좋습니다.
사용자가 pci 장치의 드라이버를 insmod하면 커널은 스캔한 pci 장치 목록과 비교해서 deviceID, vendorID 같은 값을 비교해서 일치하는 경우 장치와 드라이버를 매핑합니다.
insmod가 되고나면 powerspan의 pci 레지스터들을 읽어보는 것이 좋습니다. 그래서, 레지스터들이 powerspan 매뉴얼에 명시된 대로 값들이 들어있는지 확인해봅니다.
주의할 점은 endian이 다를 수 있다는 겁니다. X86은 little endian이고, pci는 big endian인가 그래서 멀티바이트 레지스터를 읽으면 순서가 뒤집혀서 읽힐 수 있습니다.

이까지 되고 나면, pci BAR 레지스터를 통해 매핑된 주소에 읽고 쓰기를 해봅니다.
그것도 되고 나면, 인터럽트를 발생시키고 인터럽트 핸들링이 되는 것을 확인합니다.
여기까지 하고 나면, 드라이버가 PCI 자체는 해결한 것이고 (powerspan은 단지 인터럽트를 릴레이하고 특정 주소영역을 매핑하는 역할을 하는 것 뿐이죠)
이후 드라이버 자체의 기능(패킷 핸들링, I/O 처리 등등)을 처리하시면 됩니다.

owlet의 이미지

PCI는 little endian을 사용합니다.

댓글 달기

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