⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux下dm9000网卡驱动实验〈二〉 - orange - csdnblog.htm

📁 Dm9000网络接口驱动大全
💻 HTM
📖 第 1 页 / 共 4 页
字号:
<P>
<TABLE class=MsoNormalTable 
style="BACKGROUND: #e6e6e6; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" 
cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR 
  style="HEIGHT: 350.4pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
    <TD 
    style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0cm; WIDTH: 426.1pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0cm; HEIGHT: 350.4pt; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8" 
    vAlign=top width=568>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">struct 
      net_device</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">{</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>char<SPAN 
      style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>name[IFNAMSIZ];</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      short<SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>flags;<SPAN style="mso-tab-count: 1">&nbsp;&nbsp; </SPAN>/* 
      interface flags (a <PERSONNAME productid="la BSD" 
      w:st="on"></PERSONNAME>la BSD)<SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      long<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>base_addr;<SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; 
      </SPAN>/* device I/O address<SPAN style="mso-tab-count: 1">&nbsp; 
      </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned int<SPAN 
      style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>irq;<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>/* device IRQ number<SPAN style="mso-tab-count: 1">&nbsp;&nbsp; 
      </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      char<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>dev_addr[MAX_ADDR_LEN];<SPAN style="mso-tab-count: 1"> </SPAN>/* hw 
      address<SPAN style="mso-tab-count: 1"> </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      char<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>addr_len;<SPAN style="mso-tab-count: 1"> </SPAN>/* hardware address 
      length<SPAN style="mso-tab-count: 1">&nbsp; </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      long<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>trans_start;<SPAN style="mso-tab-count: 1">&nbsp; </SPAN>/* Time 
      (in jiffies) of last Tx<SPAN style="mso-tab-count: 1">&nbsp; 
      </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
      long<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>last_rx;<SPAN style="mso-tab-count: 1"> </SPAN>/* Time of last 
      Rx<SPAN style="mso-tab-count: 1"> </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>watchdog_timeo;</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>void<SPAN 
      style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>*priv;<SPAN style="mso-tab-count: 1">&nbsp;&nbsp; </SPAN>/* pointer 
      to private data<SPAN style="mso-tab-count: 1">&nbsp; </SPAN>*/</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>struct 
      module<SPAN style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>*owner;<SPAN style="mso-tab-count: 1">&nbsp; </SPAN>/* open/release 
      and usage marking */</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"></SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*init)(struct net_device *dev);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*open)(struct net_device *dev);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*stop)(struct net_device *dev);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*set_config)(struct net_device *dev, struct ifmap 
*map);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*hard_start_xmit) (struct sk_buff *skb,struct net_device 
      *dev);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>int<SPAN 
      style="mso-tab-count: 5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>(*set_mac_address)(struct net_device *dev,<SPAN 
      style="mso-spacerun: yes">&nbsp; </SPAN>void *addr);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"><SPAN 
      style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; 
      </SPAN>//..............</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">};</SPAN></P>
      <P>&nbsp;</P>
      <P>&nbsp;</P></TD></TR></TBODY></TABLE></P>
<P class=MsoToc1 style="MARGIN: 0cm 0cm 0pt"><SPAN 
style="FONT-FAMILY: 黑体; mso-ascii-font-family: " times="" new=""><FONT 
size=3>网卡实现的抽象接口</FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><FONT 
size=3><SPAN lang=EN-US 
style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-bidi-font-size: 10.5pt">init(),open(),stop(),set_config()</SPAN><SPAN 
style="FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-bidi-font-size: 10.5pt">方法在模板中已经清楚地介绍了,这里重点讲解<SPAN 
lang=EN-US>hard_start_xmit()</SPAN>方法。当内核需要发送一个数据包时,他调用<SPAN 
lang=EN-US>hard_start_xmit()</SPAN>方法将数据放到一个输出队列。数据包包含在一个套接字缓冲区结构体(<SPAN 
lang=EN-US>struct sk_buff</SPAN>)变量中。对于驱动程序来说,<SPAN 
lang=EN-US>sk_buff</SPAN>只是一个数据包,不用关心里面复杂的结构成员。<SPAN 
lang=EN-US></SPAN></SPAN></FONT></P>
<P>&nbsp;</P>
<P class=MsoCaption style="MARGIN: 7.6pt 0cm 8pt"><SPAN 
style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">程序清单</SPAN><FONT 
face=Arial> <SPAN lang=EN-US><SPAN style="mso-field-code: " styleref=""><SPAN 
style="mso-no-proof: yes">0</SPAN></SPAN>‑<SPAN style="mso-field-code: " 程序清单="" 
seq="" arabic=""><SPAN style="mso-no-proof: yes">3</SPAN></SPAN></SPAN><SPAN 
lang=EN-US 
style="FONT-FAMILY: 宋体; mso-fareast-font-family: 黑体; mso-bidi-font-weight: bold; mso-bidi-font-size: 10.5pt"></SPAN></FONT></P>
<P>
<TABLE class=MsoNormalTable 
style="BACKGROUND: #e6e6e6; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" 
cellSpacing=0 cellPadding=0 border=0>
  <TBODY>
  <TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes">
    <TD 
    style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; BORDER-LEFT-COLOR: #ece9d8; BORDER-BOTTOM-COLOR: #ece9d8; PADDING-BOTTOM: 0cm; WIDTH: 426.1pt; BORDER-TOP-COLOR: #ece9d8; PADDING-TOP: 0cm; BACKGROUND-COLOR: transparent; BORDER-RIGHT-COLOR: #ece9d8" 
    vAlign=top width=568>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">static 
      int test_tx(struct sk_buff * skb , struct net_device * dev)</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">{</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">int 
      len;</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold"></SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">netif_stop_queue(dev);<SPAN 
      style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>//</SPAN><SPAN 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">让内核暂停调用<SPAN 
      lang=EN-US>hard_start_xmit()</SPAN>方法<SPAN lang=EN-US></SPAN></SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">len = 
      skb-&gt;len &lt; ETH_ZLEN ? ETH_ZLEN :skb-&gt;len;</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">//</SPAN><SPAN 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">把<SPAN 
      lang=EN-US>len</SPAN>个数据写入网络设备硬件缓冲区并启动发送;<SPAN 
      lang=EN-US></SPAN></SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">dev-&gt;trans_start 
      = jiffies;</SPAN><SPAN 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">  <SPAN 
      lang=EN-US>//</SPAN>记录时间<SPAN lang=EN-US></SPAN></SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">dev_kfree_skb(skb);</SPAN></P>
      <P>&nbsp;</P>
      <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt"><SPAN 
      lang=EN-US 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">//</SPAN><SPAN 
      style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold">等待数据发送完毕<SPAN 
      lang=EN-US></SPAN></SPAN></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -