admin 管理员组

文章数量: 887021

当各部分电路 设计 完成后,形成硬件连接图,进而焊接之后,就可以作为开发用的实验硬件板了。下面就简要介绍一下个硬件电路部分。

  2、硬件系统的简要设计介绍

  ⑴ARM处理器系统设计介绍

  ①S304510B概述

  Samsung公司的S34510B是基于以太网应用系统的高 性价比的16/32位RISC微控制器,内含一个由ARM公司设计的16/32位的ARM7TDMI RISC处理器核。ARM7TDMI为低功耗,高性能的16/32位核。

  除了ARM7TDMI外,该芯片还有一些片内外围功能模块,主要为: 内部RAM (8Kbyte unified cache/SRAM),I2 C接口电路(I2C interface)、以太网控件器(Ethernetco ntroller),HDLC,GDMA、串口(UART),时钟(Timers)、可编程1/O口(Programmable I/O ports)及中断控件器(Interrupt controller)等。

  

  S3C4510B结构框图

  S3C4510B结构框图所示。在实际运行过程中最主要用到的部分为:以太网接口及串口部分,前者用于收发以太包,后者主要作为操作系统调试接口。

  ②ARM 处理器系统电源电路和复位电路

  主要是实现供电和复位功能,电路部分不做详细讲解,有深入研究需要的爱好者可以查看相关的电子相关参考资料进行深入 学习 。为使文章通俗易懂,以下各电路部分也是做一宏观介绍,细节部分包括电路布线等不再深入讲解。

  ③ARM处理器与Flash存储器接口电路

  读者只要知道这部分的电路连接是为实现能在Flash存储器编写 程序 即可。

  ④ARM处理器与SDRAM接口电路设计介绍

  与 Flash存储器相比,SDRAM不具有掉电保持数据的特性,但其存储速度大大高于Flash存储器,且具有读/写属性。因此SDRAM在系统中主要用于程序的运于空间、数据及堆栈。当系统启动时,CPU首先从复位地址0x0片读取启动代码,在完成系统的初始化后,程序代码调入SDRAM中运行,以提高系统的运行速度。

 

 

SDRAM 具有单位空间存储量大和价格便宜的特点,广泛用于各种嵌入式系统中。SDRAM 的存储单元可以理解为一个电容,总是倾向于放电,为了避免数据丢失,必须定时刷新(充电)。因此,在系统中使用SDRAM,就要求微处理器有刷新的控制逻辑或者在系统中另外加刷新控制逻辑电路。S3C4510B在片内具有独立的SDRAM刷新控制逻辑,可以方便的与SDRAM接口。

  ⑤ARM处理器串行接口电路设计介绍

  几乎所有的微控件器、PC都提供串行接口,使用美国电子工业协会(EIA)推荐的RS-232-C接口标准,这是一个很常用的串行数据传输总线接口标准。早期被用于 计算机 和终端通过电话线和MODEM进行远距离的数据传输,随着微型计算机和微控制器的发展,不仅在远距离,近距离也采用了该通信方式。在近距离的通信中不采用电话线和MODEM,而是直接进行端到端的连接。

  RS-232-C标准采用的是9芯或是25芯的D型插头。

  ⑥ARM处理器JTAG接口电路设计介绍

  JTAG(JointTe stAc tionG roup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及系统进行仿真、调试。JTAG是一种嵌入式调试 技术 ,它在芯片内部封装了TAP(Test Access Port,测试访问接口),通过专用的JTAG测试工具对内部节点进行测试.标准的JTAG接口是四线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入、测试数据输出。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现以各个器件分别测试。JTAG接口还常用于ISP(In System Programmable)功能,如对Flash器件进行编程。

  ⑵以太网交换电路设计介绍

  以太网交换电路主要是采用五口交换芯片RTL8305SB来实现。RTL8305SB是一个集成了片内存储器,五个MAC层接口,五个物理层(PHY)接口的l0M/l00M自适应的五口交换芯片,该集成芯片具有低功耗,可灵活配置为五口小型办公及家用(SOHO)交换机,家用网关,xDSL路由器及其它智能应用。要实现必要的 网络 功能,这部分的电路是关键中的关键。

 

 

操作系统介绍

  1、Linux

  Linux是一个诞生于 网络 ,成长于网络且成熟于网络的奇特的操作系统。1991年,芬兰大学生Linus Torvalds萌发开发了一个自由的UNIX操作系统的想法,并将Linux通过Internet进行发布。从此一大批 编程 人员加入到开发过程中来,Linux逐渐成长起来。Linux一开始要求所有的源代码必须公开,后来转向GPL( GNUG eneral Public Licence),成为GUN的阵营的主要一员。只要遵守GPL的规定,就可以免费获得复制,因此Linux是一个免费软件。同样,Linux下遵循GPL规定的C, C++, Java等一系列的工具开发包,从功能的角度上看并不亚于商用的开发包,但却可以极大的降低开发成本,这一优势是其它商用操作系统无法比拟的。

  Linux 操作系统最突出的是网络部分,基本上所有的网络协议和网络接口都可以在Linux上找到,Linux的内核比标准的UNIX处理网络协议更加高效,系统的网络吞吐 性能 更好,这也是Linux网络服务器市场上占据较大的市场分额的重要原因。对于一般的小型的SOHO路由器,Linux的网络技术无疑是其开发运行的最佳选择,Linux完全能对给其提供全方位的网络技术支持。Linux作为互联网的产物,许多关于Linux的文档可以在Internet上下载到。

  2、uClinux操作系统

  uclinux是嵌入式Linux的一个分支,在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uclinux就是Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”。同标准的Linux相比,由于uClinux自身不支持MMU,多任务的实现就需要技巧了。但是,在uClinux上运行的绝大多数的用户程序并不需要多任务。另外,针对uclinux内核的二进制代码和源代码都是经过了重新编写,以紧缩和裁剪基本的代码。这就使得uClinux的内核同标准的Linux内核相比非常之小,但是它仍保持了Linux操作系统的主要的优点,如稳定性、强大的网络功能和出色的文件系统支持等。uclinux包含Linux常用的API、小于512K的内核和相关的工具。操作系统所有的代码加起来小于900KB。

 

 

uClinux简介

  

  uClinux的基本架构

  在PC机上开发应用 程序 的用户都会有这样的感觉,PC机有完善的操作系统并提供应用程序接口(API),开发好的应用程序可以直接在操作系统上运行。虽然嵌入式系统的应用程序完全可以在裸板上运行,但为了使系统具有任务 管理 、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(Embedded Operating System,以下简称EOS)。由于本文实例中的硬件平台是以不含MMU (Memory Management Unit,内存管理单)的S3C4510B为核心的,因此采用不带MMU的ARM 微处理器的嵌入式操作系统uclinux。uclinux 是一个完全符合GNUIGPL公约的操作系统,完全开放代码,现在由Line。公司支持维护。uClinux从Linux 2.0(2.4内核派生而来,沿袭了主流Linux的绝大部分特性。它是专门针对没有MMU的CPU,并且为嵌入式系统做了许多小型化的 工作 .适用于没有虚拟内存或内存管理单元(MMU )的处理器,例如ARM7TDMI。它通常用于具有很少内存或Flash的嵌入式系统。uclinux是为了支持没有MMU的处理器而对标准Linux作出的修正。它保留了操作系统的所有特性,为硬件平台更好的运行各种程序提供了保证。在GNU通用公共许可证(GNU GPL)的保证下,运行uClinux操作系统的用户可以使用几乎所有的Linux API函数,不会因为没有MMU而受到影响。由于uClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,虽然它的体积很小,uClinux仍然保留了Linux的大多数的优点:稳定、良好的裁剪性、优秀的 网络 功能、完备的对各种文件系统的支持、以及标准丰富的API等。

 

 

BootLoader:负责uCLinux内核的启动,它用于初始化系统资源,包括SDRAM。这部分代码用于建立uCLinux内核运行环境和从Flash中装载初始化内核镜象。

  内核初始化:uCLinux内核的入口点是start kernel() 函数。它初始化内核的其他部分,包括捕获,IRQ通道,调度,设备驱动,标定延迟循环,最重要的是能够fork "init"进程,以启动整个多任务环境。

  系统调用函数/捕获函数:在执行完“init” 程序 后,内核对程序流不再有直接的控制权,此后,它的作用仅仅是处理异步事件(例如硬件中断)和为系统调用提供进程。

  设备驱动 :设备驱动占据了uCLinux内核很大部分。同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。

  文件系统 :uCLinux最重要的特性之一就是对多种文件系统的支持。这种特性使得uCLinux很容易地同其他操作系统共存。文件系统的概念使得用户能够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。ucLinux透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。uClinux带有一个完整的TCP/IP协议,同时它还支持许多其他 网络 协议。uclinux对于嵌入式系统来说是一个网络完备的操作系统。

  3、uClinux开发环境

  ⑴GNU开发套件

  GNU 软件 包括C编译器GCC,C ++编译器G++,汇编器AS,链接器LD,二进制转换工具(OBJCOPY,OBJDUMP),调试工具(GDB.GD BSERVER,KGDB)和基于不同硬件平台的开发库。在GNU GCC支持下用户可以使用流行的C/C++语言开发应用程序,满足生成高效率运行代码、易掌握的编程语言的用户需求,这些工具都是按GPL版权声明发布,任何人可以从网上获取全部的源代码,无需任何费用。关于GNU和公共许可证协议的详细资料,读者可以参看GNU网站的介绍,http://www,gnu.oTgfhDmc.html。GNU开发套件作为通用的Linux开放套件,包括一系列的开发调试工具。GNU开发工具都是采用命令行的方式,用户掌握起来相对比较困难,不如基于Windows系统的开发工具好用,但是GNU工具的复杂性是由于它更贴近编译器和操作系统的底层,并提供了更大的灵活性。一旦学习和掌握了相关工具后,就了解了系统设计的基础知识。运行于Linux操作系统下的自由软件GNU gcc编译器,不仅可以编译Llnux操作系统下运行的应用程序,还可以编译Linux内核本身,甚至可以作交叉编译,编译运行于其它CPU上的程序。所以,在进行嵌入式系统应用程序开发时,这些工具得到了日益广泛的应用。

 

 

⑵uCIinux的打印终端

  通常情况下,uClinux的默认终端是串口,内核在启动时所有的信息都打印到串口终端(使用printk函数打印),同时也可以通过串口终端与系统交互。uClinux在启动时启动了telnetd(远程登录服务),操作者可以远程登录上系统,从而控制系统的运行。至于是否允许远程登录可以通过烧写romfs文件系统时由用户决定是否启动远程登录服务。

  ⑶交叉编译调试工具

  支持一种新的处理器,必须具备一些编译,汇编工具,使用这些工具可以形成可运行于这种处理器的二进制文件。对于内核使用的编译工具同应用程序使用的有所不同。

  路由器 软件 系统的设计过程

  uClinux 操作系统提供了嵌入式Web服务器、PPPOE拔号软件、基于IPTable过滤防火墙等功能模块的源代码。路由器软件系统的设计包括uClinux操作系统的裁剪、基于uClinux操作系统提供的以上功能模块源代码下的修改和设计,从而实现本路由器的嵌入式Web服务器、PPPOE拔号软件、基于IPTable过滤防火墙。

  1、uClinux操作系统裁剪

  ⑴裁剪前准备

  uclinux的裁剪牵涉到对目标的硬件支持问题。要让uClinux支持一个新硬件体系,要做的第一件事情就是收集和构建代码的工具。然后就可以裁减和编译内核。一旦内核支持基本的处理器功能,它就可以运作了,但是如果缺乏驱动程序的支持,就起不了多大作用。典型的驱动程序集合中包括了诸如控制台终端、基本串行设备和一个可能包含了根文件系统的块设备的驱动等。

  在这里主要介绍针对我们刚才介绍的实例系统采用的uClinux裁剪方法。本实例中的宿主机上装redhat9操作系统,因为redhat9具备安装uClinux交叉编译工具时所需要的库。

  首先必须在redhat9下建立uclinux开发环境,建立uclinux开发环境的方法有很多,而且也十分方便。可以从 http://www.uClinux处下载最新的uClinux的源代码、最新的gcc3的工具链,不过针对于不同的工具链在不同的操作系统下,以及目标板的MCU的不一样,可能在编译内核时会产生错误,在这里,我讲解实例所使用的不是最新版本的。同样的,针对不同的硬件开发环境要对uClinux源代码进行不同的适当修改,修改部分通常是以代码补丁形式实现的,一般 网络 上会有各种通用模式的补丁提供使用。好了,切入正题,有了齐全的软件包后,安装过程如下:

 

 

(1) 下载内核和工具包

  内核包 : uClinux-disc-200408.tar.gz

  补丁文件:uClinux-disc-200408.patch

  uclinux的源代码和文件系统的源代码,软件包后的 数字 代表完成的日期。

  工具链 : arm-elf-gcc-200403.sh

  (2) 安装工具包

  sh arm -elf-gcc-200403.sh

  (3) 解压缩内核

  tar -xzvfuClinux-dist-200408.tar.gz,生成uClinux-disk目录。

  (4)安装补丁:

  将补丁文件复制到uClinux-disk目录下,进入该目录,在Shell命令中使用如下命令:

  patch -pl-f

  ⑵内核的编译和生成

  执行以下命令可以进行uClinux编译:

  make xconfig。具体的编译选项配置过程本文不做详细介绍。但在此给出编译的一些基本思想:

  ucLinux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。

  为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:

  自己定制编译的内核运行更快(具有更少的代码)。

  系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)。

  不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞。

  将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些。

  在此需要补充说明的是内核编译的目的是为了创建一个能够放置在flash上支持flash读取的完成要求功能的内核,同时也是flash读取步骤其中一步。对uCLinux的内核进行配置和创建要对uCLinux内核的版本进行选择:uCLinux内核的版本号有三种:主号、次号、修订号。以2.4.10为例一般来说,主号如目前的2是很稳定的。主号的变动说明了操作系统发生了很大的变动。次号如目前的.4,用来说明内核的稳定性。当次号为偶数号((0,2, 4, 6) 时,表明现在的内核的稳定性强,而当次号为奇数号(1,3, 5) 时,表明现在的内核处于测试的阶段,其稳定性值得考虑,如果你使用次号为奇数号的内核进行配置和创建时、就值得三思而行了。而修订号的发表比较的频繁,它主要是用来对前面的版本进行修补。开发新的版本和修改以前的版本是同时进行的,很有可能修改的修订版本在新的版本出来之后。

 

 

依次执行以下命令完成uClinux的编译过程:

  cd/usr/local/src/uclinux=dist

  make dep

  make clean

  make lib_only

  make user_only

  make romfs

  make image

  最终在image目录下生成2个文件:

  zImage——uClinux内核2.4.x的压缩方式可执行映象文件;

  romfs——文件系统的映象文件。

  这就是我们要用来烧录到硬件板内的最终文件了。具体烧写可以通过使用专用的烧写工具来实现,烧写过程一定要参照烧写工具的说明要求来进行。

  其中zImage已经包含了文件系统映象文件,通常直接烧写到Flash文件上即可执行了。当然在这之前要进行BootLoader的烧录, BootLoader其实就是一个引导程序,主要作用就是初始化系统,进而来引导操作系统。在嵌入式系统中,处理器上电后首先执行的一段代码就是BootLoader,BootLoader与硬件密切相关,其代码主要用C和汇编语言写成,不同的系统中,BootLoader的功能有所不同,但主要作用还是差不多的,主要有下面几点:

  初始化微控制器MCU运行的时钟频率;

  初始化Flash和内存的数据宽度,读/写访问周期和刷新周期;

  初始化中断系统;

  初始化系统中各种片内、片外设备和I/O端口设备;

  初始化系统各种运行模式下的寄存器和堆栈;

  加载和引导操作系统;

  BLOb是BootLoaderObject的缩写,它是一个功能强大、源代码公开的自由软件,它已经实现了对多种处理器芯片的Linux 引导支持。对ARM7等核心的BootLoader支持版本可以到专业网站上进行下载,并稍微做适当修改来满足开发应用中的硬件环境要求即可,在此我们不做过多讲述。

  上面所讲述的内核编译过程只是比较宽泛的、笼统的操作过程,也就是说只是基本的操作过程,而在真正的路由功能实现过程中,还要对内核进行多种设置编译,比如说对硬件系统中设计到的部件进行驱动配置安装等,当然,这些并不是特别难的操作技术,再比如我们下面就要讲到的内容,这可就是很有挑战性的核心技术了,这些都是针对内核进行技术性操作来实现特定的网络功能。

本文标签: 路由器 技术