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

📄 skyeye硬件模拟平台,第三部分 硬件仿真实现之四.htm

📁 你想没有硬件就跑μc OS吗
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      PSTART<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">有数据包要读时,操作步骤如下:<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">a.向RBCR1寄存器写入0FH(硬性规定) 
      <BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">IOWRITE(R_RBCR1, 
      0x0f);<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">b.执行SEND 
      COMMAND命令 <BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">IOWRITE(R_CR, 
      CMD_PAGE0 | CMD_SEND | CMD_RUN)<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">然后网络芯片自动做了如下工作:<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">I. 
      用当前的BNRY读指针指向的地址写入DMA控制器(RSAR0,1)<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">II.用以太网包头中的包长度初始化DMA控制器(RBCR0,1)<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">c.先读18个字节的包头看看是否是合法的数据包<BR 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">d.从0x10端口读数据……。(读多少当然要你自己去看以太网包头了)</P>
      <P><A name=IDA03PTB><SPAN class=atitle3>6. 
      skyeye_ne2k.c函数说明</SPAN></A><BR></P>
      <UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <LI>nic_init:调用nic_reset初始化虚拟网络芯片。
        <LI>nic_reset:初始化虚拟8019AS的各项结构,包括寄存器,卡上PROM和RAM等。
        <LI>nic_read:网络芯片的读操作函数,根据参数给出的寄存器偏移量,返回相应寄存器的当前值;如果读的是0x10寄存器,调用DMA输入函数remote_read;如果读的是0x1f寄存器,调用nic_reset重新启动网络芯片。
        <LI>nic_write:网络芯片写操作函数,根据参数给出的寄存器偏移量,修改相应寄存器的值;如果写的是0x00 
        CR寄存器,调用write_cr改变网络芯片当前状态;如果写的是0x10寄存器,调用DMA输出函数remote_write;如果写的是0x1f寄存器,调用nic_reset重新启动网络芯片。
        <LI>tapif_input:从tapif网络接口读取网络包,转存入8019AS设备的内部RAM(即上图中的8192字节的数组)。注意RTL8019AS在收到网络包时会在最前面加上四个字节:0x10、0x50和两字节的包长度,为了与真实8019AS网络芯片完全兼容,SkyEye的虚拟8019AS网络芯片也模拟了这一特点。包转存完毕后,tapif_input函数修改SkyEye的中断状态寄存器,然后返回。SkyEye会在下一次检查中断状态寄存器时进入中断状态。
        <LI>tapif_output:这个函数被虚拟8019AS网络芯片的发包函数调用,负责从8019AS的内部RAM读出要发送的网络包,转发到tapif网络芯片接口。</LI></UL>
      <P><A name=IDAG4PTB><SPAN class=atitle3>7. 
      tapif和vnet虚拟网络接口说明</SPAN></A><BR>tun/tap设备和vnet设备为网络接口设备(struct 
      net_device),被链接到网络接口链表中。一般在函数tun_set_iff()里创建和注册。</P>
      <P><A name=IDAM4PTB><SPAN class=atitle3>8. 
      网络芯片驱动程序分析</SPAN></A><BR>编写驱动程序时对DMA结束的判断的说明 cpu---&gt;NIC's ram 
      的DMA结束标志是ISR_RDC中断: while((char) (IOREAD(R_ISR) &amp; ISR_RDC) == 0 ); 
      这里是循环等待了,如果做得更好可以先返回,等待结束中断,一般没必要了。</P>
      <P>NIC'ram ---&gt; 
      network的DMA结束标志是ISR_PTX中断如果上层软件还有包要连续发送,可以打开这个中断,然后在ISR中继续发下一个包。否则没必要处理这个中断,可以屏蔽它。(这就类似于串口UART的发送成功中断,如果要发一个字符串,就使用这个中断,只发送一个字符就没必要了。)</P>
      <P>在Linux系统的ne2k driver中也是死等一段时间,见ne2k.c中的代码:</P><A 
      name=IDAU4PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
	while ((inb_p(nic_base + EN0_ISR) &amp; ENISR_RDC) == 0)
		if (jiffies - dma_start &gt; 2*HZ/100) {		/* 20ms */
			printk("%s: timeout waiting for Tx RDC.\n", dev-&gt;name);
			ne_reset_8390(dev);
			NS8390_init(dev,1);
			break;
		}
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
      <UL>
        <LI>本文节自<A 
        href="http://www.china-pub.com/computers/common/info.asp?id=21879" 
        target=_blank 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">《源码开放的嵌入式系统软件分析与实践--基于SkyEye和ARM开发平台》</A>一书的第三章,对 
        SkyEye 开源项目感兴趣的可以阅读本书。<BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part1/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台, 
        第一部分: SkyEye 介绍</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part2/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第二部分: 
        安装与使用</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s1/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之一</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s2/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之二</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s3/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye 
        硬件模拟平台,第三部分: 硬件仿真实现之三</A><BR><BR>
        <LI>在 <A href="http://www-900.ibm.com/developerworks/cn/linux/" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks 
        Linux 专区</A> 可以找到更多为 Linux 开发者准备的参考资料。<BR></LI></UL>
      <P></P>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>
            <P>陈渝, 清华大学,通过 <A href="mailto:yuchen@tsinghua.edu.cn" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">yuchen@tsinghua.edu.cn</A> 
            可以和他联系。</P></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" width=100 
      border=0><BR>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR vAlign=top>
          <TD align=right width="100%"><A 
            href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s4/index.shtml#top">到页首</A></TD>
          <TD width=5><IMG height=1 alt="" 
            src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files/c.gif" width=5 border=0></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#000000 colSpan=2><IMG height=1 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" width=100 
            border=0></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#ffffff colSpan=2><IMG height=8 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" width=100 
            border=0></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 
      xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <TBODY>
        <TR vAlign=top>
          <TD>
            <FORM 
            action=/developerworks/cn/cnratings.nsf/RateArticle?CreateDocument 
            method=post><INPUT type=hidden value="SkyEye硬件模拟平台,第三部分: 硬件仿真实现之四" 
            name=ArticleTitle><INPUT type=hidden value=Linux name=Zone><INPUT 
            type=hidden 
            value=/developerworks/cn/thankyou/thankyou_feedback.shtml 
            name=RedirectURL>
            <SCRIPT language=javascript>document.write('<input type="HIDDEN" name="url" value="'+location.href+'">');</SCRIPT>
            <A name=rating><SPAN class=atitle2>对本文的评价</SPAN></A>
            <P>您对这篇文章的看法如何?</P>
            <TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
              <TBODY>
              <TR>
                <TD colSpan=5><IMG height=8 alt="" 
                  src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" 
                  width=100 border=0></TD></TR>
              <TR vAlign=top>
                <TD width="21%"><INPUT type=radio value=1 name=Rating>太差! 
                (1)</TD>
                <TD width="17%"><INPUT type=radio value=2 name=Rating>需提高 
                (2)</TD>
                <TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 
                (3)</TD>
                <TD width="17%"><INPUT type=radio value=4 name=Rating>好文章 
                (4)</TD>
                <TD width="21%"><INPUT type=radio value=5 
              name=Rating>真棒!(5)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#ffffff><IMG height=8 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" width=100 
            border=0></TD></TR></TBODY></TABLE></TD>
    <TD width=1><IMG height=1 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(1).gif" width=1 
    border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD><IMG height=1 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之四.files\c(2).gif" width=1></TD></TR>
  <TR vAlign=top>
    <TD class=bbg height=21>&nbsp;&nbsp;<A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/index.shtml">关于 IBM</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/privacy/index.shtml">隐私条约</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/legal/index.shtml">使用条款</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/contact/index.shtml">联系 
  IBM</A></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

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