《基于nios和μClinux的嵌入式系统设计.docx》由会员分享,可在线阅读,更多相关《基于nios和μClinux的嵌入式系统设计.docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于nios和Clinux的嵌入式系统设计caojing导语:嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操纵系统以及用户应用程序四局部组成,其开展主要表达在芯片技术的进步上,以及在芯片技术限制下的算法与软件的进步上。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操纵系统以及用户应用程序四局部组成,其开展主要表达在芯片技术的进步上,以及在芯片技术限制下的算法与软件的进步上。随着芯片制造技术的开展,嵌入式系统的构造也随之发生了重大变革,从基于微处理器的嵌入式系统到基于微控制器的嵌入式系统,继而将可编程逻辑pldprogrammablelogicdevice技术引入到嵌入式系统设计中
2、,进而又开展到socsystemonchip,最终将pld与嵌入式处理器结合而成为sopcsystemonprogrammablechip,使得sopc成为嵌入式系统设计的一个开展趋势。本文采用sopc内嵌32位的软核处理器nios,实现了一个uart串行口和以太网接口的转换器以下简称转换器,并基于microtronix公司针对nios处理器移植的Clinux开发了应用程序其系统构造如图l所示。1基于sopc的嵌入式硬件平台构建不同于基于处理器或者控制器及soc的嵌入式系统,基于sopc的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可根据需要灵敏地在一片fpga中构造外设接口。基于s
3、opc的嵌入式系统主要由1片核心芯片sopc和片外器件,以及一些相关的接口设备组成。本文所要实现的转换器采用altera公司的cyclone芯片及外围电路组成,其中外围电路包括2片512kb的sram、l片8mb的flash、uart电子转换器和1片以太网控制器lan91c111。系统电路框图如图2所示。sopc芯片内嵌软核处理器nios。在sopc芯片中,除了cpu外,可配片上rom、内部定时器、uart串行口、sram、flash接口等系统部件。这些部件均以可编程逻辑部件的形式实现,芯片内部部件构造图如图3所示。cpu和所有部件通过avalon总线连接在一起。sopc芯片内系统模块和ava
4、lon总线模块均由sopcbuilder工具自动生成,利用qualtusii集成开发环境可实现芯片内的逻辑设计及其引脚定义。经编译生成后缀为.sof的硬件映像文件,通过byteblasterii线缆下载到目的板的cyclone芯片中,或者将.sof文件转换成.flash文件,下载到目的板的flash中。这样就完成了转换器的硬件设计。2基于clinux的sopc应用程序开发应用程序的开发可在硬件平台上直接进展,但需理解所有硬件部件的细节,并编写相应的驱动子程序,其软件设计难度及工作量大,且可移植性差。基于嵌入式操纵系统的应用程序,其所有的硬件细节均对用户屏蔽。对硬件进展直接控制的底层驱动程序均封
5、装在操纵系统内,通过设备驱动程序接口来完成,用户只需在高层通过操纵系统所提供的系统调用进展编程。clinux是针对控制领域的嵌入式linux操纵系统,合适如nios处理器等不具备内存治理单元mmu的微处理器微控制器。基于操纵系统进展开发,需将操纵系统加载到硬件平台中,clinux可以以部件的形式集成到sopc系统中。2.1加载clinux系统的步骤将clinux加载到sopc目的板上时需提供一个穿插编译环境,硬件要求具有一个串口的pc工作站、基于nios处理器的sopc目的板和byteblastermv线缆等。软件需求windowsntv4.0、windows2000或者windowsxp、a
6、lteranios开发包ndk3.0中所提供的niosgnupro工具、aheranios开发包所提供的cygwin安装,以及quartusii可编程逻辑开发工具v2.2等。2.1.1创立和装载内核映像创立和装载clinux映像文件在linuxdeveloperbash环境下进展,首先需按以下步骤配置和构建内核。linuxdeveloperclinux:cdlinuxlinuxdeveloperlinux:makexconfiglinuxdeveloperlinux:makecleanlinuxdeveloper1inux:makedeplinuxdeveloperlinux:makelinu
7、xdeveloperclinux:makelinux.flash生成的linux.flash文件即为clinux内核映像。当sopc目的板加电,片内rom中的germs监控程序运行后,在linuxdeveloperclinux:下键入nios-runlinux.flash,即下载linux.flash文件到目的板上,完成内核映像的加载。2.1.2创立和装载根文件系统除了装载内核外,还需装载根文件系统。Clinux采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少空间。在主机上linux的target目录表示在clinux下的根root目录。当前的脚本和工具可将target
8、目录转换成映像文件romdisk.flash,按如下步骤创立:linuxdeveloperclinux:makeclean_targetlinuxdeveloperclinux:makeromfs然后键入以下命令:linuxdeveloperclinux:nios-runromdisk.flash即将romdisk.flash文件下载到目的板上,完成clinux的根文件系统的加载。2.1.3加载应用程序用户应用程序可通过target目录加载到根文件系统中,可根据需要重建romdisk映像。应用程序在userland目录下,编译生成运行文件后拷贝到target目录树中,并根据target目录的内
9、容创立romdisk.flash文件。新建一个应用程序,首先翻开一个linuxdeveloperbash窗,在userland目录中创立一个目录app,应用程序源文件存放在此目录中,然后在userlandapp中建立一个makefile文件。makefile内容如下所示,其中appfile为应用程序名。stackslze=8192include.rules.makall:appfile.relocbfltsources=appfile.cinstall:$romfsinstappfile.reloebfh$romfsdirbinappfile$execsuffixclean:rm-f.iods
10、coreappfileappfile.elfappfile.bflt运行make对应用程序进展编译并修改userlandeonfig和userlandmakefile文件。在userlandconfig文件中,增加一行config_my_app=y,在userlandmakefile文件中,增加dir_$config_my_app+=app,进入userland子目录,运行make,即可将应用程序安装到userlandbin中,并根据userlandconfig文件中相应变量的指示将应用程序二进制拷贝到target目录中。最后,键入以下命令重新构建romdisk映像文件romdisk.flas
11、h,并下载到目的板上。linuxdeveloperuclinux:makeclean_targetlinuxdeveloperuclinux:makeromfslinuxdeveloperuclinux:nios-runromdisk.flash2.1.4运行clinux完成clinux内核及文件系统的装载后,即可运行clinux。键入g800000800000为启动代码地址,在sopcbuilder中设置,clinux自动完成初始化经过,用户输入登录用户名nios,密码clinux,出现clinux的提示符#,表示已进入clinux运行环境。2.2转换器应用程序的实现转换器应用系统主要完成网
12、络接口和串行接口间的数据传输,所传输的数据流如图4所示。clinux操纵系统中提供了网络驱动程序和串口驱动程序,并提供了多线程的支持。转换器应用系统中的串口收发数据和网络口收发数据是异步进展的,可分别作为一个任务来对待,任务间是并发的,因此可采用多线程程序设计技术来实现多任务间的并发执行,系统主程序流程图如图5所示。在此应用系统中有4个任务,分别创立4个线程:网络接收线程、网络发送线程、串口接收线程和串口发送线程。这4个线程可并发执行因网络速度与串口速度存在着差异,需设置相应的缓冲区来对收发数据进展缓冲。在此应用系统中设置两个环形缓冲区,如图4所示,其中nctrv_uartsd_buf用于接收
13、网络数据,供存储从网络口接收的数据,然后串口从此缓冲区中取出数据发送。另一缓冲区uartrv_netsd_bur用于接收串口数据,然后网络口取出此缓冲区中数据发送出去。线程间需实现互相通讯和同步,共用缓冲区既要互斥执行又要同步执行,其操纵遵循消费者和消费者模型。线程间的互斥操纵采用互斥锁mu-tex来实现。线程间的同步通过设置两个指针来实现,一个是读指针,另一个是写指针,写指针指向队头,初始化为0,读指针指向队尾,初始化为bufsize-1。当写数据时,比拟读写指针是否相等,一样那么写线程阻塞;不相等,那么写入数据,然后将写指针加1。当读数据时,读指针加1,然后比拟读写指针是否相等,相等那么读线程阻塞;不相等,那么读出数据。网络发送线程流程图如图6所示和串口接收线程间共用环形缓冲区uartrv_netsd_buf。串口发送线程和网络接收线程共用环形缓冲区netrv_uartsd_buf。两线程间的关系和处理类似网络发送线程和串口接收线程。3系统测试完成转换器的软硬件设计后,按如图7所示,连接系统进展转换器数据的传输测试。在pc机a上运行串口收发程序,而在pc机b上运行以太网收发程序,经测试后数据传输无误。0
限制150内