네트워크 디바이스 드라이버의 초기화에 관한 질문입니다.

blue39의 이미지

안녕하세요~~

한참 디바이스 드라이버를 공부하는 중입니다. 말 책도 보고 실제 소스도 보면서

분석 중인데요. 다름이 아니고 커널이 시작되면서 각 부분에 대한 초기화를 수행

하잖아요. 각 네트워크 디바이스 들에 대한 초기화가 이루어지는 부분이 정확히

어디일까요.. 보다보니 너무 궁금하더라구요. Space.c에서 각 장치의 probe함

수를 호출하는건 알겠는데 그 이전에 Space.c가 호출되는 부분이 궁금하더라구요

그리고 이런 네트워크 디바이스 드라이버에 대한 초기화와 수신 시 sk_buf에

들어가는 데이터의 위치들에 대한 정보를 참조할 만한 자료가 있으면 소개 좀

시켜주세요.

그럼 추운 날 감기 조심하시구요

불량청년의 이미지

정확히는 모르겠으나 리눅스 시스템이 부팅되면서 초기화 될 때,

CPU 점검이 끝나면 바로 기타 PCI버스를 검색하고 초기화 하는걸로

알고 있는데요. 한마디로 시스템과 호환이 되는지 안되는지 확인하는

과정이 끝나고 TCP/IP 부분이 초기화 되는걸로 알고 있습니다.

또한 다음으로 시스템의 파티션 테이블을 점검하는 과정이 끝난후에

네트워크 장치의 초기화 부분이 진행된다고 알고 있습니다.

아마 파일 이름이 tulip.c 인가? 머였던거 같은데요. 기억이 가물가물

하네요. ㅡ,.ㅡ; 죄송합니다.

dmesg 출력결과를 유심히 보시면 될꺼 같습니다. 도움 못드려서 죄송~

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

운형의 이미지

가상 드라이버 (인터미디어트 스택)을 말하는 거겠죠?
저도 한창 그부분 쳐다(만 ??) 보고 있는데, 쉽지가 안네요.

IP레이어 아래 윗쪽을 보시려면 Harald Welte이 "The journey of a packet through the linux 2.4 network stack"을 보시면 도움될 것 같습니다.
원래 글 쓴 의도는 netfilter관련 모듈 때문에 쓴거지만 스택에서 호출되는 함수를 순서대로 나열해노았네요.

그리고 TCP/IP Illustated v II 보시면 도움 될겁니다.

물론 인터럽트에 대한 이해도 필수 입니다.

피상적인 답만 했는지 모르겠군요.

Do you think that's the air you are breathing now?

hb_kim의 이미지

blue39 wrote:
안녕하세요~~

한참 디바이스 드라이버를 공부하는 중입니다. 말 책도 보고 실제 소스도 보면서

분석 중인데요. 다름이 아니고 커널이 시작되면서 각 부분에 대한 초기화를 수행

하잖아요. 각 네트워크 디바이스 들에 대한 초기화가 이루어지는 부분이 정확히

어디일까요.. 보다보니 너무 궁금하더라구요. Space.c에서 각 장치의 probe함

수를 호출하는건 알겠는데 그 이전에 Space.c가 호출되는 부분이 궁금하더라구요

그리고 이런 네트워크 디바이스 드라이버에 대한 초기화와 수신 시 sk_buf에

들어가는 데이터의 위치들에 대한 정보를 참조할 만한 자료가 있으면 소개 좀

시켜주세요.

그럼 추운 날 감기 조심하시구요

Space.c 에서는 디바이스의 테이블 엔트리만을 만들고 실제로 초기화가 이루어지는 곳은, net/core/dev.c 의 net_dev_init() 함수 입니다.

net_dev_init() 함수는 register_netdevice() 에서 호출되는데 static 변수 dev_boot_phase를 사용해서 맨 처음 네트웍 디바이스가 초기화될때만 한번 호출되게 되어있죠.

댓글 달기

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