基于μClinux的SoPC应用系统设计详解

发布者:备战最新更新时间:2007-09-14 来源: 中国IT实验室关键字:接口  移植  平台  片外 手机看文章 扫描二维码
随时随地手机看文章
嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序四部分组成,其发展主要体现在芯片技术的进步上,以及在芯片技术限制下的算法与软件的进步上。随着芯片制造技术的发展,嵌入式系统的结构也随之发生了重大变革,从基于微处理器的嵌入式系统到基于微控制器的嵌入式系统,继而将可编程逻辑PLD(Programmable Logic Device)技术引入到嵌入式系统设计中,进而又发展到SoC(System on Chip),最终将PLD与嵌入式处理器结合而成为SoPC(System on Programmable Chip),使得SoPC成为嵌入式系统设计的一个发展趋势。
  
本文采用SoPC内嵌32位的软核处理器Nios,实现了一个UART串行口和以太网接口的转换器(以下简称转换器),并基于Microtronix公司针对Nios处理器移植的μClinux开发了应用程序。
  
1 基于SoPC的嵌入式硬件平台构建
  
不同于基于处理器或控制器及SoC的嵌入式系统,基于SoPC的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可根据需要灵活地在一片FPGA中构造外设接 口。
  
基于SoPC的嵌入式系统主要由1片核心芯片SoPC和片外器件,以及一些相关的接口设备组成。本文所要实现的转换器采用Altera公司的 Cyclone芯片及外围电路组成,其中外围电路包括2片512 KB的SRAM、l片8MB的Flash、UART电子转换器和1片以太网控制器 LAN91C111。
  
SoPC芯片内嵌软核处理器Nios。在SoPC芯片中,除了CPU外,可配片上ROM、内部定时器、UART串行口、SRAM、Flash接口等系统部件。这些部件均以可编程逻辑部件的形式实现,芯片内部部件结构图如图3所示。CPU和所有部件通过Avalon总线连接在一起。
  
SoPC芯片内系统模块和Avalon总线模块均由SoPC Builder工具自动生成,利用Qualtus II集成开发环境可实现芯片内的逻辑设计及其引脚定义。经编译生成后缀为.sof的硬件映像文件,通过ByteBlasterII线缆下载到目标板的Cyclone芯片中,或将.sof文件转换成.flash文件,下载到目标板的Flash中。这样就完成了转换器的硬件设计。
  
2 基于μClinux的SoPC应用程序开发
  
应用程序的开发可在硬件平台上直接进行,但需了解所有硬件部件的细节,并编写相应的驱动子程序,其软件设计难度及工作量大,且可移植性差。基于嵌入式操作系统的应用程序,其所有的硬件细节均对用户屏蔽。对硬件进行直接控制的底层驱动程序均封装在操作系统内,通过设备驱动程序接口来完成,用户只需在高层通过操作系统所提供的系统调用进行编程。μClinux是针对控制领域的嵌入式Linux操作系统,适合如Nios处理器等不具备内存管理单元(MMU) 的微处理器/微控制器。基于操作系统进行开发,需将操作系统加载到硬件平台中,μClinux可以以部件的形式集成到SoPC系统中。
  
2.1 加载μClinux系统的步骤
  
将μClinux加载到SoPC目标板上时需提供一个交叉编译环境,硬件要求具有一个串口的PC工作站、基于Nios处理器的SoPC目标板和 ByteBlasterMV线缆等。软件需求WindowsNTv4.0、Windows2000或WindowsXP、Altera Nios开发包 NDK 3.0中所提供的Nios GNUPro工具、Ahera Nios开发包所提供的cygwin安装,以及Quartus II可编程逻辑开发工具V2.2等。
  
2.1.1 创建和装载内核映像
  
创建和装载μClinux映像文件在Linux DeveloperBash环境下进行,首先需按下列步骤配置和构建内核。
    
[Linux Developer]…μClinux/:cd linux
    
[Linux Developer]…linux/:make xconfig
    
[Linux Developer]…linux/:make clean
    
[Linux Developer]…1inux/:make dep
    
[Linux Developer]…linux/:make
    
[Linux Developer]…μClinux/:make linux.flash
  
生成的linux.flash文件即为μClinux内核映像。当SoPC目标板加电,片内ROM中的GERMS监控程序运行后,在 [Linux Developer]…μClinux/:下键入nios-runlinux.flash,即下载linux.flash文件到目标板上,完成内核映像的加载。

2.1.2创建和装载根文件系统
  
除了装载内核外,还需装载根文件系统。μClinux采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少空间。
  
在主机上Linux的target目录表示在μClinux下的根(root)目录。当前的脚本和工具可将target目录转换成映像文件(romdisk.flash),按如下步骤创建:
    
[Linux Developer]…μClinux/:make clean_target
    
[Linux Developer]…μClinux/:make romfs
  
然后键入以下命令:
    
[Linux Developer]…μClinux/:nios-run romdisk.flash
  
即将romdisk.flash文件下载到目标板上,完成μClinux的根文件系统的加载。

2.1.3 加载应用程序
  
用户应用程序可通过target目录加载到根文件系统中,可根据需要重建romdisk映像。应用程序在userland目录下,编译生成运行文件后拷贝到target目录树中,并根据target目录的内容创建romdisk.flash文件。新建 一个应用程序,首先打开一个 LinuxDeveloperBash窗,在userland目录中创建一个目录app,应用程序源文件存放在此目录中,然后在 userland/app/中建立一个makefile文件。
  
Makefile内容如下所示,其中appfile为应用程序名。
    
STACKSlZE=8192
    
include../../Rules.mak
    
all:appfile.relocbflt

  SOURCES=appfile.c

  install:

  $(ROMFSINST)appfile.reloebfh

  $(ROMFSDIR)/bin/appfile$(EXECSUFFIX)

  clean:

  rm-f *.[iods]core appfile appfile.*elf appfile.*bflt

运行make对应用程序进行编译并修改userland/.eonfig和/userland/Makefile文件。在userland/. config文件中,增加一行CONFIG_MY_APP=y,在userland/Makefile文件中,增加dir_$ (CONFIG_MY_APP)+=app,进入userland子目录,运行make,即可将应用程序安装到userland/bin中,并根据 userland/.config文件中相应变量的指示将应用程序二进制拷贝到target目录中。

最后,键入以下命令重新构建romdisk映像文件(romdisk.flash),并下载到目标板上。

[Linux Developer]…uClinux/:make clean_target

[Linux Developer]…uClinux/:make romfs

[Linux Developer]…uClinux/:nios-run romdisk.flash

2.1.4 运行μClinux

完成μClinux内核及文件系统的装载后,即可运行μClinux。键入g800000(800000为启动代码地址,在SoPC Builder 中设置),μClinux自动完成初始化过程,用户输入登录用户名nios,密码μClinux,出现μClinux的提示符#,表示已进入 μClinux运行环境。

2.2 转换器应用程序的实现

转换器应用系统主要完成网络接口和串行接口间的数据传输。μClinux操作系统中提供了网络驱动程序和串口驱动程序,并提供了多线程的支持。

转换器应用系统中的串口收发数据和网络口收发数据是异步进行的,可分别作为一个任务来对待,任务间是并发的,因此可采用多线程程序设计技术来实现多任务间的并发执行。

在此应用系统中有4个任务,分别创建4个线程:网络接收线程、网络发送线程、串口接收线程和串口发送线程。这4个线程可并发执行.因网络速度与串口速度存在着差异,需设置相应的缓冲区来对收发数据进行缓冲。在此应用系统中设置两个环形缓冲区,如图4所示,其中nctrv_uartsd_buf用于接收网络数据,供存储从网络口接收的数据,然后串口从此缓冲区中取出数据发送。另一缓冲区uartrv_netsd_bur用于接收串口数据,然后网络口取出此缓冲区中数据发送出去。

线程间需实现相互通信和同步,共用缓冲区既要互斥执行又要同步执行,其操作遵循生产者和消费者模型。线程间的互斥操作采用互斥锁(mu-tex)来实现。线程间的同步通过设置两个指针来实现,一个是读指针,另一个是写指针,写指针指向队头,初始化为0,读指针指向队尾,初始化为BUFSIZE-1。当写数据时,比较读写指针是否相等,相同则写线程阻塞;不相等,则写入数据,然后将写指针加1。当读数据时,读指针加1,然后比较读写指针是否相等,相等则读线程阻塞;不相等,则读出数据。

网络发送线程和串口接收线程间共用环形缓冲区uartrv_netsd_buf。串口发送线程和网络接收线程共用环形缓冲区netrv_uartsd_buf。两线程间的关系和处理类似网络发送线程和串口接收线程。

3 系统测试
  
完成转换器的软硬件设计后,连接系统进行转换器数据的传输测试。在PC机A上运行串口收发程序,而在PC机B上运行以太网收发程序,经测试后数据传输无误。

关键字:接口  移植  平台  片外 引用地址:基于μClinux的SoPC应用系统设计详解

上一篇:跳频与扩频:无线机器对机器接口
下一篇:嵌入式Linux操作系统的驱动程序开发要点

推荐阅读最新更新时间:2024-05-13 18:38

苹果赚钱秘诀:取消耳机接口咱好卖蓝牙耳机呀
不少媒体已经曝光 iPhone 7 将取消耳机接口,对于这一消息不少果粉已经纷纷开始吐槽了,如果消息属实,那用户就不得不使用 Lightning接口 的耳机或者是转接线来听歌了,这样的体验必然大打折扣。不过,现在有消息称,苹果正在研发一款新的 蓝牙耳机 ,这款耳机将很有可能和iPhone 7一起问世。   据消息人士透露,这款耳机采用的是苹果自主设计的蓝牙芯片。苹果在2013年的时候收购了Passif Semiconductor半导体公司,这款蓝牙芯片就是由该公司设计。     该消息人士还指出,苹果原本希望在2015年推出这款蓝牙耳机,不过当时的产品性能还存在一些问题,这导致了产品的上市时间延后。如果这款耳机
[嵌入式]
UClinux2.4.x+S3C4510B平台的USB-HOST驱动设计
引言 今天,USB设备已经进入我们工作、生活的方方面面,它给我们带来了许多便利。因此,带有USB功能已经成为现在许多系统的一个基本要求。三星公司针对ARM7开发的S3C4510B是目前业界使用非常频繁的一款芯片。它的强大功能使其成为基于诸多传统的51等系列单片机开发思想的终结者。通过对它移植uClinux操作系统,犹如为虎添翼。稳定的Linux系统和强大的S3C4510B硬件紧密结合,形成了一个强大的开发平台,带来了崭新的开发理念。本文采用的是深圳英蓓特公司开发的EMBEST S3C4510B开发板,介绍在这样一个强大的平台上扩展基于CYPRESS公司开发的SL811HS(HOST)的USB-HOST;展示基于这个平台的区别于
[单片机]
UClinux2.4.x+S3C4510B<font color='red'>平台</font>的USB-HOST驱动设计
CoolRunner-Ⅱ器件的微处理器接口逻辑
uC接口是一个异步接口,与I2C之间的交互流程如图1所示。   如图 uC与I2C之间的交互流程 uC总线协议在Coo1Runner-Ⅱ中是由一个状态机实现的,如图2所示。 在空闲状态,微控制器将地址送上地址总经,并设置R_W、AS和DS状态。如果在定周期,微控制器也会将待写数据送上数据总线。AS有效表示地址总线上的地址有效,DS有效表示数据总线上数据有效;如果是在读周期,微控制器驱动数据总线为三态。同样,AS有效表示地址总线上的地址有效,但是DS有效表示I2C控制器可以将数据送到数据总线。   图2 uC总线接口状态机 在AS有效的情况下,I2C控制器状态进入ADDR状态。在此状态,一方面进行地址译码;另一方
[嵌入式]
LPCXpresso 平台的使用感受
前几天得到 LPC1114 后,非常高兴,也开始了LPCXpresso 平台的历程。一直以来都是用Keil/MDK进行开发,所以当拿到LPCXpresso LPC1114 开发板后,也想用MDK进行开发。但是找了很多,发现这块板子是否只支持LPCXpresso。没办法只能硬着头皮学习LPCXpresso 平台,本人E文非常差,学习起来还这是费劲。经过这么多天的学习基本上还是可以进行开发了。 本来一直都想写一个LPCXpresso入门,从工程新建、文件添加、编辑、设置等。可又怕写出来错误太多,误人子弟。所以,想想还是不急,等自己有把握了再写(如果有网友写了,呵呵,我就可以不写了)。现在就先谈谈一点感受吧,主要是和MDK进行
[单片机]
LPCXpresso <font color='red'>平台</font>的使用感受
通过TX2440A移植文档总结出移植驱动的方法
第一种情况:(内核已存在要移植的驱动) 假如要移植A驱动,而且源码中已存在该驱动源码,那么移植的一般方法如下: 1、在arch/arm/mach-s3c2440/mach-smdk2440.c的Platform_device结构体中加上A这项,如果存在就不用添加。 2、然后做相应的修改,如在arch/arm/plat-s3c24xx/devs.c添加相应的结构体、修改源码,有些不用做出相应的修改,如RTC就不用修改。 3、最后配置内核(make menuconfig)。 第二种情况:(内核不存在要移植的驱动) 假如要移植B驱动,而且源码中不存在该驱动源码,那么移植的通用方法如下: 将写好的B驱动源代码拷贝到相应的源代码目录,
[单片机]
串口0作为调试端口,怎么改变为接收数据接口
我们在使用嵌入式linux调试板子时候必须要有调试接口,一般是串口0. 我就以我使用的S3C2416的板子为例: 启动u-boot打印如下: SMDK2416 # printenv bootcmd=nand read c0008000 900000 300000;bootm c0008000 bootdelay=3 baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 netmask=255.255.255.0 bootargs=root=/dev/mtdblock3 rootfstype=yaffs2 init=/init console=ttySAC
[单片机]
中国绿发携手中科院理化所 打造世界级液化空气储能产业平台
  在第53个世界地球日来临之际,4月20日-22日,中国绿发投资集团有限公司(以下简称“中国绿发”)举行“珍爱地球 和谐共生”主题系列活动,践行“双碳”战略,为推进全社会绿色低碳发展贡献力量。4月20日,中国绿发与中国科学院理化技术研究所(以下简称“理化所”)签署投资协议,将组建产业公司,打造世界级液化空气储能产业平台。    近期,双方将开展50MW/600MWh首台首套液化空气储能示范项目建设。据了解,基于新型深冷技术的液化空气储能技术是实现风光等新能源深度消纳并网、合理吸收电网低谷电和不同形式的余热资源,并在需求时稳定输出冷、热、电及工业用气等多种形式能源的新型储能方法。该技术具有大规模长时储能、清洁低碳、安全、长寿
[新能源]
基于Windows98平台开发DMA高速数据采集系统
    摘要: 介绍基于Windows98平台的DMA虚拟设备驱动程序的开发,并给出了一个简单的DMA虚拟设备驱动程序的开发实例。     关键词: 直接存储器存取(DMA)方式 虚拟设备驱动程序(VxD)VtoolsD 直接存储器存取方式不仅具有高速度、高效率的特点,而且CPU资源占用少,因此在需要高速、批量交换数据的场合得到了广泛的应用。在DOS下编写DMA控制程序并不难,但要编制出精美实用的界面则是一件非常繁锁的工作,而且效果往往不佳。Windows自问世以来便以身采取的保护措施使得Windows与硬件直接接口时需要程序员编写专用的虚拟设备驱动程序。针对DMA的Windows虚拟设备驱动程序并不常见,因
[嵌入式]
热门资源推荐
热门放大器推荐
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved