首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于μClinux的网络构件的设计与实现
来源:本站整理  作者:佚名  2009-06-25 11:16:44




  #elif defined(CONFIG_ARCH_S3C44B0)
  static int once = 0;
  if (once)
  return -ENXIO;
  if (base_addr == 0) {
  dev->base_addr = base_addr = ARM_NE2000_BASE;
  dev->irq = ARM_NE2000_IRQ;
  once++;
  }
  其中,ARM_NE2000_BASE和ARM_NE2000_IRQ是在配置内核的时候定义的。
  (2)ne_probe是被Space.c调用的,这里网卡的检测是从./drivers/net/Space.c的ethif_probe函数中实现的,关键代码如下:
  if (probe_list(dev, eisa_probes) == 0)
  return 0;
  eisa_probes                   :在前面定义成全局
  static struct devprobe eisa_probes[] __initdata = {
  #ifdef CONFIG_DE4X5???????????? /* DEC DE425, DE434, DE435 adapters */
  {de4x5_probe, 0},
  #endif
  …………
  {NULL, 0},
  };
  添加的函数是:
    if (probe_list(dev, arm_probes) == 0)
    return 0;
  并定义:
  static struct devprobe arm_probes[] __initdata = {
  #ifdef CONFIG_ARM
  {ne_probe, 0},
    #endif
  {NULL, 0},
  (3)地址偏移的问题
  同样是在ne.c中ne_probe1的代码中。为了更好地说明所修改的地方,首先应该先介绍一下硬件的配置和连接。这里8019在S3C44B0的Bank 5上,工作在跳线模式,所以起始基地址就是0x0a000600。还有一点需要特别注意的是:8019工作在16位模式下,数据线一对一地连接,地址线错开一位,即8019的A0连接S3C44B0的A1……这样,8019的基地址(Reg0的地址)是0x0a000600,Reg1的地址就是0x0a000602……所以地址不是连续增加的,那么对应的驱动程序要做相应的修改。
  #elif defined(CONFIG_ARM)
  #define EI_SHIFT(x) ((x)*2)
   其中EI_SHIFT可以查看到8390.h的定义。
   也有直接访问外部的代码,所以要添加的还有:
  #ifdef CONFIG_ARM
  regd = inb_p(ioaddr + 0x0d*2);
  outb_p(0xff, ioaddr + 0x0d*2);    :函数outb_p和inb_p访问外部IO的函数
  #else
  regd = inb_p(ioaddr + 0x0d);
  outb_p(0xff, ioaddr + 0x0d);
  这样就被解决了地址偏移的问题,这里采用预处理来添加自己的代码,不直接在原有的代码上修改,可以保证代码的完整性和可移植性,也较容易比较和发现问题。
  主程序和μClinux中的系统文件放在同一个程序下,进行编译即可。为了提高执行效率,可以根据实际应用修改μClinux的部分常用代码,甚至剪切掉某些不必要的代码。
  基于μClinux的网络构件的设计方案在硬件上简洁可靠;软件可维护性好,可扩展性好,有利于系统的后续开发,降低了系统设计的复杂性。随着嵌入式产品研究的深入,网络接口芯片的研究也会快速发展,使智能化产品的设计更趋向简单、标准、成熟。可以看出,嵌入式μClinux操作系统与网络将会得到更大的发展和更广阔的应用。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:196,015.60000 毫秒