uClinux在Nios II嵌入式平台上的移植研究
基于nios和μClinux的嵌入式系统设计
基于nios和μClinux的嵌入式系统设计系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用程序四部分组成,其进展主要体现在芯片技术的长进上,以及在芯片技术限制下的算法与软件的长进上。
随着芯片创造技术的进展,嵌入式系统的结构也随之发生了重大变革,从基于微处理器的嵌入式系统到基于微控制器的嵌入式系统,继而将可编程规律pld(programmable logic device)技术引入到嵌入式系统设计中,进而又进展到soc(system on chip),终于将pld与嵌入式处理器结合而成为sopc(system on programmable chip),使得sopc成为嵌入式系统设计的一个进展趋势。
本文采纳sopc内嵌32位的软核处理器nios,实现了一个uart串行口和以太网接口的转换器(以下简称转换器),并基于microtronix公司针对nios处理器移植的μclinux开发了应用程序.其系统结构l所示。
1 基于sopc的嵌入式硬件平台构建不同于基于处理器或控制器及soc的嵌入式系统,基于sopc的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可按照需要灵便地在一片fpga中构造外设接口。
基于sopc的嵌入式系统主要由1片核心芯片sopc和片外器件,以及一些相关的接口设备组成。
本文所要实现的转换器采纳altera公司的cyclone芯片及外围组成,其中外围电路包括2片512 kb的sram、l 片8mb的flash、uart转换器和1片以太网控制器lan91c111。
系统电路框图2所示。
sopc芯片内嵌软核处理器nios。
在sopc芯片中,除了cpu外,可配片上rom、内部定时器、uart串行口、sram、flash接口等系统部件。
第1页共6页。
NiosII下UCOS和移植Linux教程(中文)
实验五 uc/OS-II实时操作系统在Nios II中的运行一. 实验目的:了解在NIOSII中使用uc/OSII实时操作系统的基本方法。
二. 实验说明:uc/OS-II已经在世界范围内得到广泛的使用,包括手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制等。
实际上,uc/OS-II已经通过了非常严格的测试,并且得到了美国航空航天管理局(FAA)的安全认证,可以用于飞机、航天器等与人性命攸关的控制系统中1。
因此,uc/OS-II在工业等实时性需求比较强的领域应用非常广泛,我们的学习套间提供了在NiosII系统中运行uc/OS-II的例子(“ucosII_test”),该例子定义了两个任务:Task1和Task2,两个任务交替执行。
例子虽然简单,但可以作为uc/OS-II在NiosII系统中运行的演示。
同学们可以参考NiosII的软件开发手册以及uc/OS-II的发明人——Jean J. Labrosse的著作“MicroC/OS-II The Real-Time Kernel”(Second Edition)的中译本《嵌入式实时操作系统uc/OS-II》(第二版,邵贝贝等译),研究和设计出功能更强、更符合实际应用的程序。
一、 参考前面的方法建立一个工程软件工程;二、 打开工程的.syslib工程属性,按下图所示修改编译属性:在“System Library Contents”的“RTOS:”下拉框选择“MicroC/OS-II”,以及右边的程序段都选择SDRAM,因为使用了操作系统,内部ram比较小会容不下,在这里我们选择SDRAM作为uc/OSII的运行环境。
MicroC/OS-II的各个选项的配置可以通过点击“RTOS Options…”按钮进行选择和配置,如下图所示:1《嵌入式实时操作系统uc/OS-II》(第二版)具体操作和配置按照需要和参考ALTERA的软件开发手册。
本例子采用默认配置。
ucos_ii的移植
第7章移植7.1 移植说明μC/OS-II作为嵌入式实时操作系统,最终要应用在嵌入式系统上,如单片机、ARM、FPGA、DSP等。
为方便读者学习,本书前面6章的例子都是在Windows下的虚拟平台上运行的,也就是将μC/OS-II移植到这个平台来加以分析和实践。
本章首先给出的就是说明如何移植到这个平台的。
接下来就是在一个实际的嵌入式系统,基于软核的FPGA系统下的移植。
在掌握了这两个平台的移植后,移植到其他的平台都是不难实现的。
学习了前面章节的内容,从原理到代码都有了足够的了解,因此进行移植将不会有太大困难。
但在前面章节中,第1章是原理的介绍,其余几章各有各的核心内容,并未将μC/OS-II 的代码结构给出,读者不太容易掌握μC/OS-II的全貌,因此这里给出μC/OS-II的代码结构。
7.1.1 μC/OS-II的代码结构μC/OS-II的代码结构如图7.1所示。
嵌入式实时操作系统μC/OS原理与实践246内核代码信号量管理互斥信号量管理消息邮箱管理消息队列管理事件标志组管理内存管理定时器管理任务管理操作系统头文件时间管理处理器相关头文件处理器相关C代码处理器相关汇编代码与CPU无关的代码与CPU相关的代码操作系统配置文件图7.1 μC/OS-II的代码结构可见,操作系统的代码分为与CPU无关的代码和与CPU相关的代码两部分。
这样,在进行移植的时候只需修改与CPU相关的代码部分。
尽管如此,为详细了解μC/OS-II代码结构,需要对该结构中各个部件进行说明。
1.操作系统配置文件os_config.hμC/OS-II是可裁剪的操作系统,最终的代码可以包含或不包含诸如各种时间管理、内存管理的代码,甚至可以选择不包含任务删除代码等。
为实现这一目的,在代码中采用了很多条件编译语句。
另外,条件编译语句使用的各种宏就在os_config.h文件中定义。
os_config.h是操作系统的配置文件,其中的所有代码全部是宏定义。
基于NiosⅡ处理器的嵌入式平台上实现μC/GUI的移植设计
基于NiosⅡ处理器的嵌入式平台上实现μC/GUI的移植设计便携式医疗监护仪已成为人们日常生活中不可缺少的一部分。
便携式设备是由硬件与软件紧凑组合的一个单元模块,是一种体积小、智能化程度高、功能全、使用灵活、操作方便的便携机,适合家庭使用、外出携带等用途。
为了使便携式心电监护仪实现友好的人机交互和更加方便的显示,这里提出一种GUI界面系统设计,就是在基于Nios Ⅱ处理器的嵌入式平台上实现μC/GUI的移植,使之实现系统功能。
1 μC/GUI的系统移植1.1 μC/GUI简介及可移植性分析μC/GUI是Micrium公司开发的通用的嵌入式图形用户界面软件,其中图形用户接口GUI (Graphical User Interface)。
该界面软件被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和LCD控制器的图形用户接口。
它能工作于单任务或多任务的系统环境下。
μC/GUI适用于使用任何LCD控制器和CPU的任何尺寸的物理和虚拟显示,具有源代码开放及模块化设计的特点。
μC/GUI的代码全部用ANSI的C语言编写的,具有很强的移植性。
由于μC/GUI采用分层结构,即具有驱动接口层和应用层,因此可方便地移植到各种CPU下使用。
μC /GUI对各类图像LCD显示器具有良好的支持,并且有常见的2D图形库和窗口管理功能,而且消耗较少的系统资源,占用RAM和ROM 的空间很小。
在典型的应用中,μC/GUI 需要的资源如表1所示。
由表1可见,运行μC/GUI需要的系统资源不是很多,并支持几乎所有类型的CPU与大多数的LCD模块,μC/GUI的源代码规模适中,移植过程中可将不需要的代码进行剔除,而且结构层次清晰,因此适合用于嵌入式系统中。
1.2 μC/GUI移植原理嵌入式用户图形界面系统μC/GUI与嵌入式实时操作系统μC/OS-Ⅱ都是美国Micrium 公司产品,μC/GUI能更轻易地在μC/OS-Ⅱ上应用,实现与μC/0S-Ⅱ的无缝结合。
uCGUI NIOS II移植及应用笔记
uC/GUI NIOS II移植及应用笔记这是前些日子在使用uc/GUI的时候即下来的一些东西原来发布在EDACN的bbs上面。
现在不知道沉到哪里去了。
现在把它重新整理发布在这里。
随后在明年过年的时候把后续的几个高级主题整理出来。
下面开始我的笔记!有兴趣的兄弟们可以来看看。
step1.下载uC/GUI的代码。
(废话没有源代码移植个鸟)我下载的时uC/GUI3.32这是能得到的源代码中最全的一个版本。
看看里面都有些什么东西。
由于这里的发间大小的限制的问题不能上传源代码。
很是郁闷。
有需要的同志可以联系我。
Email:william7447@首先看看所有名叫Simulation的东西这是uC/GUI在VC中仿真的VC工程,他的仿真功能非常的实用可以在没有具体硬件的情况下先行开发软件,而丝毫不影响软件的兼容性。
但是有一个问题比较郁闷,就是速度的问题。
大家知道嵌入式系统的CPU运算能力有限,而电脑的cpu.........我的整个项目的gui是在电脑上完成的。
拿到目标系统上面编译.......通过。
经过紧张的下载.....................运行..........显示出了第一个画面,无比的兴奋。
但测试发现极其郁闷而几乎无法解决的问题......目标系统的处理能力只有100mips而我的电脑的cpu是P4 3.0。
速度的差别太大了。
解决这个问题几乎成了我后半段工作的主题。
GUI文件夹存放全部uC/GUI源代码的地方看看它的属性有多达390个文件,全部是.c和.h。
可以看出GUI系统是一个庞大复杂的东西。
我在调试系统的时候跟踪过完整的消息循环再进入了60多个子函数调用后还没有看到希望,就彻底的放弃了跟踪的想法。
下来会具体说明这里面都有些什么东西。
config文件夹uC/GUI的配置文件夹。
里面存放的是uC/GUI的配置头文件。
改动里面的相应的就可以改动uC/GUI的配置。
这个GUI功能十分强大。
sopc
简述nios2 sopc系统上uClinux移植步骤。
1.安装git2.构建工具链, 用工具链进行编译(解压tar包,修改路径,重新执行脚本)3.内核配置 make menuconfig4.将ptf文件传到Linux下,make vendor_hwselect SYSPTF=“路径”,make编译内核5.下载映像文件到SDRAM, 启动JTAG出现uCliniux启动画面.uClinux运行成功!给出FPGA中动态功耗估算公式,简要说明含义并说明如何降低动态功耗?动态功耗公式:V dd与工艺相关,C是确定的,U(FPGA中不同类型的资源使用率)在综合后也是确定的,f是翻转频率, 不同的测试向量驱动下,电路动作不同,f也就不同。
选定FPGA芯片后,其静态功耗基本确定,可以通过下列技术降低动态功耗来获得整体的低功耗:封装技术: IC封装内部要考虑散热通道等,增加成本散热技术: 芯片外部及时散热:散热片、风扇、水冷等可靠性: 温度变化,影响电气参数:延时增大,时序不满足,系统不稳定总功耗= 静态功耗+ 动态功耗静态功耗是指逻辑门没有开关活动时的功率消耗,主要由泄漏电流造成的,随温度和工艺的不同而不同,主要取决于所选的FPGA芯片产品. 静态功耗由工艺、环境温度、芯片面积决定.动态功耗是指逻辑门开关活动时的功率消耗,器件内的容性负载充放电功耗。
(SOB)System on board系统由分立芯片构成,在PC B板上集成实现,系统规模大,部件多,board尺寸大,成本高,功耗高,信号完整性、串扰现象严重,分立器件通过PCB 上走线连接,制约速度;外界影响大SOC(Sys tem on a Chip)是ASIC,开发周期长,投资高,风险大,收益大,全系统集成在单芯片,内部连线,速度高;成本低(大批量生产);功耗低SOPC(Sys tem on a Progra mmable Chip)是FPGA,开发周期短, 风险小,可作S OC前期验证;可作科研探索,实现原型系统BFM 总线功能模型A LU 算术逻辑单元(Arithmetic Logic Unit) S DC 用户数据中心(Subscriber Data Center) FS DB (Fast Signal DataBase )DFS Desi gn From Scrat ch ST A 静态时序分析static timing analysis S DF 标准延迟格式standard delay formatVCD 改值转储val ue change dump HA L 硬件抽象层har dware abstraction layer 前仿真(功能仿真,RTL仿真)后仿真(时序仿真,门级仿真)1. STA无需输入测试向量,覆盖率大动态仿真只针对特定测试向量,无法证明结果对所有测试向量都成立;大规模电路,穷举测试向量很困难!2. STA缺点:异步电路分析困难动态时序分析对同步、异步风格电路没有限制3. STA能处理更大设计,所需时间更短动态仿真缺点是随着设计规模增大,要求时间迅速增长解释时序分析中setup-time、hold-time、slack 概念时序基本概念本质任务:保证数据准确、稳定的传送时钟建立时间就是指时钟到达前,数据和使能已经准备好的最小时间间隔。
nios2移植uClinux软件架构
软件架构能用到的linux基本的操作有:VirtualBox 共享设置一、VirtualBox在winxp下虚拟ubuntu在winxp下虚拟ubuntu,在ubuntu下访问win的共享文件夹时出现如下错误:/sbin/mount.vboxsf: mounting failed with the error: No such device1,若要使用共享文件夹功能,必须安装linux guest additions,安装增强功能,这一步得注意不然没戏2,lsmod | grep vboxvfs,确保加载了vboxvfs模块,若没有,使用sudo modprobe vboxvfs 加载3,新建一个文件夹,sudo mkdir /home/js/dxn4,sudo mount -t vboxsf xuni /home/js/dxn 即:sudo mount -t vboxsf “共享文件夹名” “虚拟机共享文件夹目录”5,cd /home/js/dxn中途可能出现错误yacc -d grammar.ymake: yacc:命令未找到make: *** [grammar.c] 错误 127需要安装yaccinux下是用flex和bison来分别代替lex和yacc的,安装直接使用命令:sudo apt-get install bisonLinux切换root用户问题命令模式下直接用su,然后输入密码就可以了,像ubuntu如果还没有为root设置密码的话,可以用第一个用户(它默认有权使用sudo命令)来设置密码,sudo passwd root。
添加路径: export PATH=$PATH:路径名检查路径: echo $PATH桌面有光驱图标,这是加载linux系统增强工具的软件,打开:里面有个autorun.sh然后打开,在终端中运行在终端中运行,输入密码,稍等片刻。
之后出现以下界面,回车退出,工具安装完成。
nios2移植uClinux硬件架构
niosII 硬件架构在开始之前,我总是想多说点,因为看了很多的教程,中间也很辛酸,要达到无师自通的境界,在这种领域有些困难,每每遇到问题,总是喜欢百度一下,当找不到符合自己的情况的时候才是最头疼的时候,我们有点懒,有点想走捷径~~~做做笔记,同时也做做教程,在摩尔定律走不下去的时候,我们就会想起FPGA,我们乐此不疲,因为前途无量,当我们轻车熟路,请不要忘了给我们经验的前辈,同时有好的经验的时候,写写教程,小则帮助一二像我们一样的人,大则为中国的科技兴国做做贡献,无所求,只为心里踏实。
这个教程分两部分,一个是硬件架构,另一个是软件架构,不免会有错误,希望指正,所需硬件要求:cpu包含硬件乘法器,timer,串口,至少8M SDRAMusb blaster , pc一台所需软件要求:此番硬件架构大体分为以下内容:1.建立quartusII 工程。
2.利用sopc 工具搭建niosII软核处理器。
3.建立锁相环。
4.编译工程,分配引脚,重新编译。
5.提取所需的ptf文件。
1.建立工程:选择File -> New Project Wizard...会点英文的,或者是用过别的软件的都会知道,wizard是向导的意思,我们就喜欢向导,因为它会给我们剩下很多工作。
这个不用管它,点next,向下。
这个对话框就有用啦,看第一行,翻译过来就是你要把工程放到哪个文件夹下,然后点"..."选吧,选择你要放的位置,但是我要提醒一点就是,因为这是个外国人用的软件,它的路径里不能有中文,否则当你用niosII IDE软件的时候会有莫名奇妙的错误,这个就是我的经验,免费告诉大家啦。
我设置的路径是D:\quartus_pro\uclinux_nios2,然后点击:打开。
看第二个框。
工程名字,这次的有点特殊了,我们要同时看看第三个框了,第三个是顶层实体的名字,如果知道硬件描述语言,那么肯定会明白我说的意思,这里的工程名字必须和顶层实体的名字相同,我在工程名字填上uclinux_nios2。
在niosii中移植linux系统
移植全进程咱们采用的方式,是在windows下进行sopc builder的设计,在linux进行uclinux 的内核的编译,和交叉编译环境的成立。
从而产生uClinux的镜像文件(机械码流)。
需要准备的文件:A、交叉编译环境的linux安装文件,可以是其他格式的)。
B、uclinux-dist(uclinux内核文件,可以是别的版本)C、目前没有明白为何要有这个文件,没有还不行)一:交叉编译环境的成立一、把放在目录:/usr/local/src里面,将解压进/opt/nios2目录下(这个默许的,不用进行目录操作)[root@localhost src]# tar -jxvf -C /二、设定交叉编译器的路径:[root@localhost src]# vi ~/.bash_profile修改bash_profile的內容如下所示,加上/opt/nios2/bin路径# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/bin:/opt/nios2/binexport PATHunset USERNAME3、执行下面一条命令,使设置的路径有效[root@localhost src]# source ~/.bash_profile注:这里你可以进行一下测试。
看看你的交叉编译环境是不是已经建成,也可以略过不做。
方式:[root@localhost src]# nios2-linux-uclibc-gcc –v1、Reading specs from /opt/nios2/lib/gcc/nios2-linux-uclibc3.4.61.9Gtf文件对应的.sof文件和生成的镜像文件zImage一路放在\altera\72\nios2eds\examples下。
基于NiosⅡ的uClinux研究与应用
1 数 字 微 波 传 输 系 统
数 字 微 波传 输 系统 …, 于微 波 传 输 大 容 量 信 利
息, 整套设 备 有O U( ud o nt室外单 元 ) D D O to r i U , 和I U
信 息 进 行 大 量 的 实 时 处 理 与 传 输 .另 一方 面 还 需
特殊 需 求 , 是 一 般C U和MC 所 不 具 备 的 。本 文 这 P U
◆
图 l 监 控 模 块 功 能 框 图
将 重 点 讨 论 如 何 将 基 于 N ol的u l u 嵌 入 式 系 is I Ci x n 统应 用 于数 字 微 波 传 输 系统 中 ,实 现 设 备 监 控 与 网络 管 理 。
( )成 为用 户管 理 终 端 和I U、 D 之 间 的 “ 3 D O U 桥
第 一 作 者 简介 : 巍 泉 (9 l ) 男 , 江 宁 波 人 , 士 , 究 方 向 : 蒋 18 一 , 浙 硕 研
嵌 入 式系 统 , 于F GA D 基 P 的E A设计 与 开 发 。E m ij q 1@8 a 0 - al w 8 5 i . m : nc
路 给 用户 使 用 。 由于其 安 装使 用 简单 快 速 , 输 容 传
量 大 ( /) 距 离 远 ( 型 为5 m) 大 量应 用 在 基 Mbs , 典 0k ,
微 波 传 输 系统 中I DU( 内单 元 ) 例 , 室 为 它需 要 实 现 数 字 分 复 接 、 速 调 整 、 解 码 、 备 自身 监 控 和 码 编 设 网络 管 理 。所 以 ,通 常 在 采 用F G P A进 行数 字 信 号
uclinux移植教程
学习开发套件V3.0中嵌入Uclinux的步骤和方法在学习开发套件V3.0中嵌入Uclinux的步骤和方法,硬件系统为EP1C6,2Mflash,8Msdram.开发环境:SOPC学习开发套件V3.0,型号EP1C6。
QII5.1+SP2,NiosII IDE5.1+SP1。
一 .安装nios2linux开发包nios2linux-1.4二 .建立硬件系统1. QII中建一工程linux_nios,并添加NIOSII CPU,QII工程和平常的建立并没有什么区别,只要得加上flash和sdram,因为这里只是对linux的简单调试,所以SOPC中只添加LED和UART等几个简单外设。
如下图:注意为防止不必要的麻烦,这里尽量使用默认名字。
如果想用USB连接电脑,在QII中把串口连接到USB线的IO管脚上即可。
我们的工程中是两个口都接了,使用串口或者USB口都行。
三.建立软件环境打开NIOSII IDE3.1 建立linux内核file-> new-> project 后如下图:注意:在安装Microtronix_uclinux_nios2开发包后在IDE中分增加出如上图的Microtronix NiosII选项如果没有可以按下面方法解决:1)、打开cmd,在 开始->运行 那里输入cmd2)、cd到你的NiosII的工作目录下面,我的NiosII安装在D盘,如下:3)、在这里输入命令nios2-ide.exe –clean,进入NiosII IDE的clean模式,选择workspace:这是在New->Other那里你就可以看到那个linux的目录项了。
关了IDE窗口和cmd窗口,这样就可以正常看到Microtronix_linux了。
3.2 输入内核名字按next:finish完成四. 构建内核:4.1 右键内核名,在弹出菜单中选择Configure Kernel如下:后进入如下界面:因为flash只有2M因此构造的内核应尽可能的小,其大小不能超过1M。
Nios II嵌入式Web服务器的实现
Nios II嵌入式Web服务器的实现引言嵌入式系统是指被嵌入到各种产品或工程应用中以微处理器或微控制器为核心的软硬件系统。
嵌入式系统与Internet技术相结合,形成的嵌入式Internet技术是近几年随着计算机网络技术的普及而发展起来的一项新兴技术。
工程技术人员、管理人员或调试人员通过Web而不用亲临现场就可以得到远程数据,并对测控仪器进行控制、校准等工作。
这里介绍利用嵌入式软核处理器Nios II及广泛应用的嵌入式操作系统uClinux来实现电网参数的远程测控服务器的功能。
1、功能及体系结构图1 是系统结构,其中嵌入式Web服务器和监控端位于现场,它们之间的连接可以用串行口、并行口、USB等实现。
现场监控端完成对目标地区电网参数(电压、电流、谐波等数据)的检测,并将检测结果实时传送至web界面,使得无论监控人员在哪里,只要连接至Internet网络,便可对目标区域电网参数实时观测。
其实现过程是:三相电压、电流分别通过电压互感器、电流互感器变换后,经电路调理送至AID 转换,每周期采样128点,DSP芯片对采样数据进行FIR数字滤波、FFT运算、计算各参数值、存储、显示等操作。
测量电路与Nios之间的通信通过串口传输,根据事先约定的通信协议(基于Modbus协议)可以方便地把所测数据发送至以Nios II处理器为核心的嵌入式服务器。
通过CGI技术,完成远程监控端的命令传输及将测量数据实时传送至远程监控端。
图1 系统结构图2、硬件结构系统的硬件结构如图2所示。
硬件系统的核心是构建于Ahera Cyclone FPGA中的Nios II嵌入式软核处理器。
Nios II系列嵌入式处理器是一款通用的RISC结构的CPU,它定位于广泛的嵌入式应用。
Nios II 处理器系列包括了三种核心:快速的(Nios II/f)、经济的(Nios II/e)和标准的(Nios II/s)内核,每种都针对不同的性能范围和成本而优化。
ALTERA NIOSII的linux移植
University ofApplied Sciences,AugsburgDevicedrivers and Testapplication for a SOPC solution with Nios II softcore processor andµClinuxAuthor:Philipp LutzSupervisors:Prof.HaunstetterMr.FaerberSubmitted:February9th,2008AbstractAlong with the growing importance of embedded systems solutions,FPGA’s and embedded operating systems likeµClinux are becoming more popular by and by.To show theflexibility and opportunities of softcore processors on common FPGA testboards this project introduces the Nios II softcore processor to act as an embedded CPU for drivingµClinux(very small MMUless linux distribution).By choosing the Altera DE2Development and Education Board(distributed by terasIC)the capabilities for both software-and hardware-designs on SOPC/embedded system tasks are rich.The main aim of this project was to use a Nios II softcore processor to drive a customizedµClinux operating system(kernel and applications)which is stored in the onboardflash or SDRAM memory. Another aim was to get access to the hardware on the linux-system using device drivers for the common parallel I/O hardware(LEDs,7-segment display,LC-Display switches,buttons)and user applications which are capable of using the device driver to read or write to/from the devices.To also show interface capabilities the onboard100MBit ethernet MAC/PHY chipset in combination with a very small webserver(boa)is used to integrate a user-interface(HTML page)which controlls all the peripherals mentioned above.Document Revision HistoryContents1Introduction11.1Softcore Processors (1)1.2µClinux-distribution as embedded Operating System (1)2Basic Implementation ofµClinux on ALTERA DE2FPGA-Board32.1Hardware Part:Modelling an Nios II processor/SOPC system (3)2.1.1Altera Evaluation Boards(DE1and DE2) (3)2.1.2Nios II softcore processor (5)2.1.3Short Example:Creating a simple Nios II processor with peripherals (5)2.1.4Configuring the Nios II components/structure (6)2.2Software Part:Adaption ofµClinux to individual needs (8)2.2.1Toolchain for Nios II Embedded Processor and preparations (8)2.2.2Basics ofµClinux (11)2.2.3Additional Kernel modifications (12)2.2.4Additional User Applications (13)3Interfaces153.1Imlementing a UART Interface (15)3.1.1Hardware-Part (15)3.1.2Software-Part (15)3.2Imlementing an Ethernet Interface(DM9000A) (15)3.2.1Hardware-Part (17)3.2.2Software-Part (19)4Additional/Projectrelated Changes204.1Extend Kernel with Character Device Drivers for DE2Board (20)4.2Customize application settings(Webserver,Shell) (20)4.2.1Adding msh Shell/Busybox applications (20)4.2.2Webserver/CGI/Network services (21)5Test and Verification235.1Configuring the FPGA (23)5.1.1Direct Configuration (23)5.1.2Configuration over serial EPCS Flash (23)5.2DownloadingµClinux (24)5.2.1ProgrammingµClinux to SDRAM (24)5.2.2ProgrammingµClinux to CFI Flash (24)5.3Verification ofµClinux (25)5.3.1Test of Character Device Drivers (25)5.3.2Test of Interfaces and Network-Services (27)5.4Troubleshooting (30)6Closing Words316.1Summary (31)6.2Further Tasks to do(TODO-List) (31)7References32 Glossary33 A Developing Linux character device drivers35A.1Basics of device drivers (35)A.1.1User Space VS Kernel Space and MMU issues (35)A.1.2Device Files (36)A.1.3Registering devicefiles(Major and Minor numbers) (36)A.2Reading and writing on IO devices (37)A.3Device resources (38)A.3.1Memory Regions (38)A.3.2Interrupts (38)A.4Mandatory Init and Exit functions (40)A.5Device handlers (42)A.5.1Open (43)A.5.2Release (44)A.5.3Read-read from device (44)A.5.4Write-write to device (45)A.5.5IOCtl-universal IO control interface (46)A.6Integration inµClinux (48)B Developing a CGI demo-application in C50B.1What is CGI? (50)B.2Why using C? (50)B.3CGI C-program (50)B.4Integratoin inµClinux (54)List of Figures1Altera DE1Board (4)2Altera DE2Board (4)3A simple example of a Nios II system (6)4Interval Timer settings (7)5Making sure that IRQ0is not assigned (7)6Final SOPC System (8)7A part of a hardware design which contains a UART (15)8Settings dialog of UART component (16)9DM9000A internal block diagram[14] (17)10DM9000A signal connection with a processor interfacing[14] (17)11Avalon to DM9000A interface as SOPC builder component (18)12Avalon interface settings of DM9000A SOPC component (18)13Dialog that indicates Nios II IP Core isn’t licensed (23)14Flash Memory Controller/Interface on SOPC Builder (23)15µClinux running in Windows HyperTerminal (27)16CGI Webpage with full control over all PIO devices (28)Listings1Definition of np_pio struct in“linux-2.6.x/include/asm-nios2nommu/pio_struct.h” (37)2Example how to read data from device-memory (37)3Example how to write data to device-memory (38)4Reserving a memory region for a device driver (38)5Relase a memory region for a device driver (38)6Start sequence for button device driver containing the interrupt handler (39)7Button Interrupt Service Routine (40)8Macro for setting user-defined init and cleanup functions (41)9Init function of buttons device driver de2_buttons.c (41)10Cleanup/Exit function of buttons device driver de2_buttons.c (42)11File operations since kernel2.6.17 (42)12Assigning device handler functions for de2_buttons.c (43)13Open-function of de2_buttons.c (44)14Release-function of de2_buttons.c (44)15Read-function of de2_buttons.c (45)16Write-function of de2_leds.c (45)17Example of IOCtl Header from de2_lcd_16207.h (46)18IOCtl function example from de2_lcd_16207.c (47)19Headerfile of I/O functions for CGI application(io_lib.h) (50)20Sourcefile of I/O functions for CGI application(io_lib.c) (51)21Modified Makefile for cgi_generic demo application (52)22Excerpt of top-levelfile demo application(cgi.c) (52)23Excerpt of CGI demo application(template.c) (52)1IntroductionThis document is intended both to show the possibilities of softcore processors in association with a µClinux operating system and especially to guide people which are interested in reproducing my work for further tests or projects not trapping the same way I did.Furthermore the scope of this university project was to develop linux character device drivers for the DE2PIO hardware and to implement an appropriate user application to access these drivers.As there is an ethernet-device available on the DE2 board the idea was to use this interface for such a user application.It was targeted that a webserver with CGI capabilities(dynamic HTML generation)should do this job.In the following sections you willfind some general information about softcore processors andµClinux to get a short overview of this topic.The section Basic Implementation contains the general implementation policy for this specific processor and operating system seperated in soft-and hardware part.So this section can be considered as a basic design guide or tutorial through thefirst steps of getting the embedded system working.After basic implementation the special modifications are discussed in the further sections in the course of this project(implementing UART,Ethernet,Webserver).In the Closing Words are some suggestions for further projects concerning this approach.Advanced information for Linux device driver development (page35)and CGI web-programming(page50)are found in the Appendix of this document.1.1Softcore ProcessorsA softcore processor is a microprocessor core that can be wholly implemented using logic synthesis.It can be implemented via different semiconductor devices containing programmable logic(e.g.,FPGA,CPLD). They are available as sourcecode or as some sort of netlist.Softcore processors have many advantages:•Easy adaptability to different types of FPGAs from different manufacturers•Extremelyflexible and extensible,whole customized microcontroller-systems can be build up •Potentially closer Hardware/Software codesign•Ability to test hardware-designs under real conditions concerning ASIC developmentNotable softcore processors include:For Altera the core components of the processor are hidden in encryptedfiles.You only get access to the files if you have licensed this IP1core not only for compiling but for viewing.1.2µClinux-distribution as embedded Operating SystemOriginallyµClinux was a derivative of Linux2.0kernel intended for microcontrollers without Memory Management Units(MMUs).However,the Linux/Microcontroller Project has grown both in brand recognition and coverage of processor architectures.Today’sµClinux as an operating system includes Linux kernel releases for2.0,2.4and2.6as well as a collection of user applications,libraries and toolchains. Concerning the linux operating system there are basically two possible approaches for this project:•Microtronix Nios IIµClinux-distribution Ver.1.4•The originalµClinux-distribution from 1IP=Intellectual PropertyThese distributions are very similar because Microtronix used parts of the originalµClinux code in their version,they develeped the kernel code for Nios II.Due to the fact that theµClinux-release of Microtronix is not up-to-date(last update was released in June2005)and the richer set of libraries and user applications of the originalµClinux this release will be preferred in this project.Further advantages over the Microtronix’s latest release(1.4):•All of the Microtronix code is already ported back to the originalµClinux-distribution•The originalµClinux-distribution is synchronized to the latest Linux kernel releases•Support of compressed kernel images,which can save around50%flash usage•Usage of initramfs,which is easier to use than romfs•Support for EPCS,PCI,VGA,PS/2Resulting from these advantages the approach with the originalµClinux-distribution brings the most benfits for this project.Moreover doing the project with this approach will help contributing to the still growingµClinux-community-project.2Basic Implementation ofµClinux on ALTERA DE2FPGA-Board2.1Hardware Part:Modelling an Nios II processor/SOPC system2.1.1Altera Evaluation Boards(DE1and DE2)In the beginning I had the choice between the DE1and DE2board,which are quite similar.Both boards are distributed by terasIC2.The following table gives a short feature overview of both boards.Altera DE1and DE2-Development and Education Boards comparisonAs you can see,the DE2board has a bigger FPGA with more programmable logic elements and a richer set of periphery on board.So it met all of theflollowing requirements to this project:•Ethernet capabilities with PHY/MAC chip(no need of ethernet IP core required)•Enough logic elements for the Nios2prozessor and the additional hardware•Enough memory(bothflash and SDRAM)to be able to implement a TCP/IP-stack and to run a webserver(boa)with CGI support•Several additionally peripherals such as USB and SD Card Socket which would be useful for further tasks/projectsFinally the DE2board was chosen for the project.Attention:µClinux can only be installed in non-volotile memory if the board comes with a4Mbyte CFI Flash(Device U20:29AL032on DE1and DE2boards),otherwise just downloading to SDRAM is possible.2terasIC homepage:Figure1:Altera DE1BoardFigure2:Altera DE2Board2.1.2Nios II softcore processorNios II is a very high sophisticated softcore processor without MMU3,it allows you to build a lot ofdifferent microcontroller systems with a UART,SDRAM controller,DMA controller,ethernet interface,any PIO device4just to mention a few.As a general purpose32bit RISC processor core the Nios II comes with a full32-bit instruction set,data path,address space,32general-purpose registers and32 external interrupt sources.The architecture supports separate instruction and data buses,classifying itas a Harvard architecture.A Nios II processor system is equivalent to a microcontroller or“computeron a chip”that includes a processor and a combination of peripherals and memory on a single chip.The components of such a microcontroller are interconnected via the proprietary“Avalon-MM Bus”5of Altera.More processor-related information is available at reference[9].The Avalon-MM interface defines:•A set of signal types•The behavior of these signals•The types of transfers supported by these signalsFor example,the Avalon-MM interface can be used to describe a traditional peripheral interface,such as SRAM,that supports only simple,fixed-cycle read/write transfers.On the other hand,the Avalon-MM interface can also be used to describe a more complex pipelined interface capable of burst transfers. Figure3shows an example of a simple Nios II system.To get more details have a look at reference[7].2.1.3Short Example:Creating a simple Nios II processor with peripheralsNow we want to create our own microprocessor featuring the Nios II processor,onchip memory,switchesand LEDs as described infigure3.Considering that there are no ready installed and licensed Altera Design Tools in the working environment thefirst step is to download and install the following Softwarein this order:1.Quartus II Web Edition Software(+Service Pack)2.MegaCore IP Library(which includes the Nios II Processor)(+Service Pack)3.NiosII Embedded Design Suite(+Service Pack)The software is available on the Altera homepage:https:///support/software/download/altera_design/quartus_we/dnl-quartus_ we.jspFor Quartus II Web Edition you need a free licensefile,by registering on the following page you will geta license by mail:https:///support/licensing/free_software/lic-q2web.jspThe further steps are explained in the official SOPC builder tutorial which is available for Verilog[10]aswell as for VHDL[11]whereas the hardware description language is just relevant for instantiation of the ready build microcontroller furthermore there is no need of knowledge of hardware description languagesto create Nios II systems.3Presently there was no Nios II processor with MMU available,but in future releases Altera may plan to add a MMU4Parallel Input/Output device with both unidirectional and bidirectional capabilities5MM stands for Memory Mapped(the I/O is addressable within the adress bus of the CPU)Figure3:A simple example of a Nios II system2.1.4Configuring the Nios II components/structureIn order to be able to compile the kernel for a Nios II system it is necessary to do some work in Quartus II and SOPC Builderfirst.To begin with we need to build a SOPC system.I prefer using an existing Nios II project from the demonstrations directory of the enclosed DE2CD-ROM.But the CD-ROM certainly doesn’t include the up-to-date Quartusfiles,so check up the homepage of terasIC for the latest release6.Copy the example DE2_demonstrations\DE2_NET to a directory of your choice that doesn’t contain spaces nor special characters at all.Start Quartus II and open the project-file with the*.qpf extension.Now open the SOPC builder(Tools=>SOPC Builder)and you will see the design of the Nios II system which we are going to modify for runningµClinux in the next steps.If a prompt asks you whether you will upgrading your projectfile(system_0.pft)to the newer format(system_0.sopc) just proceed with the upgrade.Unfortunately the design is not ready forµClinux so some work has to be done with the hardware project.In thefirst step you have to make sure a“Interval Timer”with the name timer_0is existing in the de-sign.You can add a timer which is found under Peripherals=>Microcontroller Peripherals6Download of DE2CD-ROM:/downloads/cd-rom/de2/=>Interval Timer.In the settings dialog just select Full-featured as Present,for the timeout period I chose1ms.Figure4shows the settings.It’s not required to have two timers,on the other hand it’s not bad to have two timers.Figure4:Interval Timer settingsThe second step is a very easy one:make sure that none of the Nios II peripherals has assigned IRQ0, like infigure5.In Linux IRQ0stands for auto-detected,but unfortunately this doesn’t work atµClinux, so use another number between1and31as IRQ.Figure5:Making sure that IRQ0is not assignedIn the third step it’s time to reduce the SOPC design to the essential components.Due to an invalid USB-component in the SOPC design version1.5of the DE2_NET example project it’s required to delete this component(ISP1362).All other unuseful components such as VGA,AUDIO or the SD Card Socket could also be deleted.Though don’t forget to delete the connections between the toplevel design output pins and the Nios2-processor instance in the toplevel designfile to avoid nasty warnings.In the case ofan VHDL/Verilog toplevel designfile just comment the lines which make the needless connections.The SOPC system now should look similar tofigure6.Figure6:Final SOPC SystemIn thefinal fourth step we have to generate the system,therefore press the button Generate right on the bottom in the SOPC Builder.Now the system is gonna be build,the SOPC Builder creates huge VHDL/Verilog and simulationfiles for Quartus II.If the process is successfullyfinished the work for the SOPC Builder is done and can be closed from now nlos Tofinish offthe hardware work in the forth and last step just start compilation in Quartus II IDE(Processing=>Start Compilation). Prepare for a long process(approx.10-15min on a3GHz dualcore CPU),maybe this is the time for getting some coffee/tea.If this step is also successfully done we can switch to the software work.2.2Software Part:Adaption ofµClinux to individual needs2.2.1Toolchain for Nios II Embedded Processor and preparationsAccording to the two differentµClinux releases(Microtronix&original)there are two possible ways for compiling kernel andfilesystem:•Nios II developing IDE(includes Cygwin)for MicrotronixµClinux•Real Linux environment for originalµClinuxThe second option for compiling kernel andfilesystem is to work under Linux instead of Windows and Cygwin,which is a great advantage because some makefiles need only slight modifications from Linux sources.Attention:If you want to use initramfs you must use Linux because bugs in Cygwin make it impossibleto get a workingfilesystem!There is another possible approach(Buildroot)which makes initramfs functional,but it makes use of the MicrotronixµClinux release.I found a homepage[6]which reports also about problems compiling applications in the Nios II IDE and porting of the Makefiles to Nios II IDE seems to be very difficult,so theµClinux-distribution approach on Linux would be the most clever choice.I’m using the Windows Design Tools of Altera for the Hardware Part I had to install a(Hardware) Virtual Machine to run Linux parallel to Windows.For this task I used VirtualBox7,VMware would also be possible as well as QEMU.After installing the Windows*.msi package you have to create a new Virtual Machine:•OS Type:Linux2.6•Base Memory Size:At least512MB•Virtual Hard Disk:Create new dynamically expanding image with at least5GB sizeThe Linux Distribution is quite unimportant,I recommend to use a familiar one.Check up 8to get an overview of the most popular Linux Distributions.My choice was Ubuntu Linux7.049because I’m really familiar with it and it’s quite easy to manage,so it’s mostly recom-mended Linux greenhorns.If you have the choice between CD and DVD image prefer the latter.After downloading the Linux DVD ISO you just have to mount the image on VirtualBox:Click the Settings button,choose CD/DVD-ROM,check Mount CD/DVD Drive,select ISO Image File and click the Select button to get to the“Virtual Disk Manager”dialog where you can add your imagefile.After that the Virtual Machine is ready to boot!Proceed by clicking on the Start button on the VirtualBox main window.Now the Virtual Machine begins to boot and the Linux image loads automatically.If you have problems installing Linux look for official installation guides or feel free to question at relevant internet forums.Once the Linux runs it is time to perform the guest operating system(OS)accelerating tools(VMware Tools in VMware,Guest Additions in VirtualBox)to ensure the best performance on the guest OS.In VirtualBox it’s found in the menu of the running virtual machine window(Devices=>Install Guest Additions...).With this action the Virtual Machine mounts a image with the desired toolsat the CD/DVD drive,which is accessable within the guest OS.In the next step we make sure that the following packages are installed on the Linux Distribution: ncurses,ncurses-devel,bison,gawk and compiling-tools(make).For Ubuntu7.10or newer just use the package manager aptitude/apt-get to get the packages:>sudo aptitude install ncurses-base libncurses5-dev bison gawk build-essential7VirtualBox Homepage:/8Overview of the most popular Linux Distributions:/dwres.php?resource=major9Download-Page:/download/Attention:If you don’t know what to do with the line above:This is a command,which is to be executed in a linux terminal like(aterm,xterm,gnome-terminal etc.).All lines beginning with>are such commands.Some of the commands require root privileges,as a rule all commands which are involved in administrative tasks(e.g.package manager)or commands which need access tofiles outside of your home-folder.In Ubuntu you have to use the prefix sudo in front of these commands which should be executed with root privileges,on most other Linux Distributions you mustfirst login as root by using the su command before executing.Due to the fact that Linux Distributions are slightly different it’s possible that packages have different names on different Linux Distributions.Anyway the basic principles should be transferable to other Linux Distributions.Now it’s time to install the Nios II toolchain.The nios2gcc package10includes a complete kit of devel-opment tools,among others the nios2gcc cross-compiler.Download the package and extract it via:>tar jxf nios2gcc.tar.bz2-C/The tools will be installed in/opt/nios2/bin.To make the tools available in the command line just add the path to the$PATH environment variable:>PATH=$PATH:/opt/nios2/binBut these settings will be lost after reboot,so you maybe want to put this line into your∼/.bash_profile or∼/.bashrc(for Ubuntu).After logging in again or opening a new terminal the Nios II development tools will be available by command(e.g.nios2-linux-gcc).To verify that you set this path correctly run this command:>nios2-linux-gcc-vIf you get an error message you did something wrong.In the end we need the sourcecode to get started.TheµClinux-dist homepage11provides many versions, I used the current“uClinux-dist-20070130”.Prefer the*.tar.bz2)archive,because it’s smaller than the*.tar.gz)one.Due to the fact that software becomes obsolete very fast there may be newer versions available.The200070130-release still needs some patches12to work with Nios II processors, newer releases should already contain these patches which makes them unnecessary for newer versions. Even though applying these patches could lead to problems.In the next lines I describe how to handle with“uClinux-dist-20070130”:Extract theµClinux-package(*.tar.bz2)via:>tar xvfj uClinux-dist-20070130.tar.bz2Then change to the extracted directory:>cd uClinux-distApply the patch by:>zcat../uClinux-dist-20070130-nios2-02.diff.gz|patch-p010Download link:/WikiHome/OperatingSystems/%C2%B5Clinux/BinaryToolchain/nios2gcc.tar.bz2 11µClinux-download:/pub/uClinux/dist/12Nios2patches forµClinux:/WikiHome/OperatingSystems/%C2%B5Clinux/UClinuxDist/uClinux-dist-20070130-nios2-02.diff.gzRemember that applying this patch on newer versions ofµClinux-dist is not necessary.But maybe there will be new patches available which are for the current version,then this procedure should be transferable.Finally the software-building environment is ready to work with.2.2.2Basics ofµClinuxThe make build-scripts within the uClinux-dist/directory take care of both kernel and user applications configuration and compilation so it’s a very comfortable way to customizeµClinux-configuration. Building the system always works in these steps:1.>make menuconfigMenuconfig shows the basic software setup(processor-architecture,kernel version andµClib)and it asks you if you want to configure the Kernel the software in the next step.Check if you have selected the correct target:These are the kernel-settings for thefirst build(default settings):Then<exit><exit><yes>to store these basic settings to the.config-file in the current direc-tory.The kernel-default-settings are written to linux-2.6.x/.config.It’s not recommended to change any other settings untilfirst successful boot.2.>make vendor_hwselect SYSPTF=absolute_path_to_PTF_fileThis make command executes the hwselect-script which parses your hardware-desciptionfile gen-erated by SOPC builder.Remember to use absolute paths to make sure the script willfind your PTFfile even it’s not in the uClinux-dist/directory.After parsing you are asked three questions about the hardware you want to use to store theµClinux-dist software at and you have to make a choice which memory-device to use(e.g.Flash,SRAM,SDRAM,DDR,DDR2).Remember this settings when you are about to transfer theµClinux-image to the target-board.Here are my selections:The selected settings are saved to uClinux-dist/linux-2.6.x/arch/nios2nommu/ter this information is used to create the linux-2.6.x/include/nios2_system.h headerfile which contains base adresses and IRQs of the hardware-design for the device drivers.3.>make romfsThis make command prepares the configurationfiles of the user applications which were selected for compilation as well asfilling the romfs/directory with content.If the command fails don’t care about.4.>make“make”starts compilation of kernel and user applications.Thefirst make try may fail,just ignore the error and give it another try.This is caused by parallel compilation.It does not matter. 5.>make linux imageFinally the kernel is rebuilt for initramfs,so the compressed image of elf-format(containing the ker-nel and user apps)The compressed initramfs zImage image(in uClinux-dist/image/) is generated from and the devfiles are created as written in vendors/Alter-a/nios2nommu/romfs_list,it will save a lot of memory on your board in contrast to the obsolete romfsfilesystem.If you meet errors even though,you can use NON_SMP_BUILD=1make,which avoids parallel make.The messages will be cleaner.2.2.3Additional Kernel modificationsThis subsection is about configuring the kernel.It describes how to use the make tools on a little example. We want to setup the development board for theµClinux-configuration(which would be necessary for board specific features).Here are the steps:1.>make menuconfigGo to menuconfigfirst and make the following basic selections:Select the CPU entry and choose Altera Cyclone Development board support.Attention:As the headline of the kernel setup tells us,there are some basic kernel options available:•Modular driver(only available if device driver is capable of,which is indicated by<>)•Build-in driver(if selection stands in[]the device driver is only capable of build-in)This selection tells the build-process either to make a kernel module or a steady kernel build-in driver(directly compiled into kernel-file)from the sourcecode.If modules are desired,it’s important to remember the module-name which is sometimes mentioned in the help-text of a device driver,if not it’s necessary to look at the source-file’s name.For example if you have the soure-file foo_driver.c the module is then called“foo_driver”.Exit the kernel configuration while saving the current configuration.2.>makeand>make linux imageCreate/Update zImage(kernel and user applications).2.2.4Additional User ApplicationsAt the moment there is no need to include additional user applications,the default settings are capable of running a simpleµClinux system,so I left the selections of user applications unchanged to default settings.In the further sections we will come back to selection of user applications.If you want to upgrade the default settings follow these steps:1.>make menuconfigExecuting menuconfig again and enabling customization of Vendor/User Settings will leadAfter exiting this configure procedure the selection-dialog of user applications will appear.2.Make your selections and notice the help-texts to prevent yourself from problems.Remember thevery limited SDRAM!Don’t dare adding the bash or any other memory-consumption-monster.For example Busybox appliactions require a lot of memory.So make your selections wisely.If you have finnished choose<exit>and<yes>.。
nios2架构uclinux(nios2-linux-20080619开发包)的过程
nios2架构uclinux(nios2-linux-20080619开发包)的过程前言:最近在论坛上有一些朋友提出我上传的”nios2架构uclinux (nios2-linux-20080619开发包)的过程”是英文版的不好读.碰巧我最近整理资料就把架构过程重新整理了一篇.便于朋友参考. 对于英语阅读能力比较好的朋友建议参考我整理的英文版.内容比较详细.由于作者水平有限,在整理过程中难免会出现一些错误,望朋友们批评并指正.转贴的朋友请注明出处/chong_lang/ (本博客正在完善中欢迎交流学习)开发环境:在vmware 中安装centos5.2操作系统(在网上下载安装CentOS-52-i386-bin-DVD)本人所使用的开发板为: altera公司的ep2c35f672c6n宿主机windows开发平台为: windows xp sp3在宿主机上安装的linux开发平台为centos5.2 内核为: vmlinuz-2.6.18开发工具为:quartus7.2安装过程Ok! 现在开始niosii架构uclinux过程首先要在centos下挂载window 下的一个共享目录便于centos与宿主机传送文件,不会挂载的朋友google 一下linux 下mount命令的使用在centos操作系统上我的开发目录设在了/home/zhaozhilei[root@localhost ~]# cd /hom e/zhaozhilei安装架构uclinux时所需要的库[root@localhost zhaozhilei]# sudo yum install git-all make gcc ncurses-devel bison byacc flex \gawk gettext ccache zlib-devel gtk2-devel lzo-devel一.下载uclinux开发包[root@localhost zhaozhilei]#wgetftp:///outgoing/nios2-linux-20080619.tar二.解压nios2-linux-20080619.tar[root@localhost zhaozhilei]# tar xf nios2-linux-20080619.tar三.进入nios2-linux目录[root@localhost zhaozhilei]# cd nios2-linuxls # see what's inbinutils gcc3 README uClibc use_http_for_upda techeckout insight toolchain-build uClinux-distelf2flt linux-2.6 u-boot update四.检查文件是否齐全[root@localhost nios2-linux]#./checkout五.下载交差编译工具[root@localhost nios2-linux]# cd ..[root@localhost zhaozhilei]# wgetftp:///outgoing/nios2g...080203.tar.bz2六.解压文件[root@localhost zhaozhilei]#sudo tar jxf nios2gcc-20080203.tar.bz2-C /七.添加PATH路径[root@localhost zhaozhilei]#cd[root@localhost ~]# vim ./bash_profile添加:PATH=$PATH:/opt/nios2/bin (红颜色部分是要添加的部分)八.检查是否加入PATH[root@localhost ~]#echo $PATH结果应为:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/gam es:/opt/nios2/bin十.检查交叉编译环境是否安装成功[root@localhost ~]#nios2-linux-uclibc-gcc –v结果应为:Reading specs from /opt/nios2/lib/gcc/nios2-linux-uclibc/3.4.6/specs Configured with:/root/buildroot/toolchain_build_nios2/gcc-3.4.6/configure--prefix=/opt/nios2 --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=nios2-linux-uclibc --enable-languages=c --enable-shared--disable-__cxa_atexit --enable-target-optspace --with-gnu-ld--disable-nls --enable-threads --disable-multilib--enable-cxx-flags=-staticThread model: posixgcc version 3.4.6十一. 编译内核和应用,进入到uclinux-dist目录[root@localhost ~i]#cd /hom e/zhaozhilei/nios2-linux[root@localhost nios2-linux]#cd uClinux-dist[root@localhost uClinux-dist]#make menuconfig确保选择以下内容Vendor/Product Selection --->--- Select the Vendor you wish to targetVendor (Altera) --->--- Select the Product you wish to targetAltera Products (nios2) --->Kernel/Library/Defaults Selection --->--- Kernel is linux-2.6.xLibc Version (None) --->[*] Default all settings (lose changes)[ ] Customize Kernel Settings[ ] Customize Vendor/User Settings[ ] Update Default Vendor Settings注意:在成功引导uclinux之前不要改变上面任何设置然后 <exit> <exit> <yes>十二 .编译硬件配置选择相应的cpu 和sdrma[root@localhost uClinux-dist]#make vendor_hwselect SYSPTF=/配件配置目录/your_system.ptf选择cpu出现如下图(如果是多cpu的话,根据实际情况选择)选择sdram如下图(在这里我选择的是1即ddr_sdram_0,其它根据实际情况)十三. 编译内核和应用[root@localhost uClinux-dis]# make (需要编译一段时间)十四. 将 zImage文件copy到宿主机上[root@localhost yanfa]# cp ./ images/zImage 你挂载的目录十五. 在宿主机上(windows)打开nios ii eds 7.2 command shell开始->程序->altera-> nios ii eds 7.2->nios ii eds 7.2 command shell 十六.下载你的sof文件到目标板十七. 下载zImage 到目标板十八. 打开nios终端.十九. Uclinux正确启动时应出现如下信息Using cable "USB-Blaster [USB 2-1.2]", device 1, instance 0x00 Pausing target processor: OKInitializing CPU cache (if present)OKDownloaded 1272KB in 7.7s (165.1KB/s)Verified OKStarting processor at address 0x00500000# nios2-terminalnios2-terminal: connected to hardware target using JTAG UART on cable nios2-terminal: "USB-Blaster [USB 2-1.2]", device 1, instance 0nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)Uncompressing Linux... Ok, booting the kernel.Linux version 2.6.26-rc6 (hippo@darkstar) (gcc version 3.4.6) #2 PREEMPT Mon Jun 16 14:30:09 CST 2008uClinux/Nios IIBuilt 1 zonelists in Zone order, mobility grouping off. Total pages: 8128 Kernel command line:PID hash table entries: 128 (order: 7, 512 bytes)Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)Memory available: 30136k/2333k RAM, 0k/0k ROM (1552k kernel code, 781k data)Mount-cache hash table entries: 512net_namespace: 180 bytesNET: Registered protocol family 16NET: Registered protocol family 2IP route cache hash table entries: 1024 (order: 0, 4096 bytes)TCP established hash table entries: 1024 (order: 1, 8192 bytes)TCP bind hash table entries: 1024 (order: 0, 4096 bytes)TCP: Hash tables configured (established 1024 bind 1024)TCP reno registeredNET: Registered protocol family 1io scheduler noop registeredio scheduler deadline registered (default)ttyJ0 at MMIO 0x8009340 (irq = 8) is a Altera JTAG UARTconsole [ttyJ0] enabledttyS0 at MMIO 0x8008e00 (irq = 7) is a Altera UARTdm9000 Ethernet Driver, V1.30TCP cubic registeredNET: Registered protocol family 17RPC: Registered udp transport module.RPC: Registered tcp transport module.Freeing unused kernel memory: 572k freed (0x1b8000 - 0x246000)Shell invoked to run file: /etc/rcCommand: hostname uClinuxCommand: mount -t proc proc /procCommand: mount -t sysfs sysfs /sysCommand: mount -t usbfs none /proc/bus/usbmount: mounting none on /proc/bus/usb failed: No such file or directory Command: mkdir /var/tmpCommand: mkdir /var/logCommand: mkdir /var/runCommand: mkdir /var/lockCommand: mkdir /var/emptyCommand: ifconfig lo 127.0.0.1Command: route add -net 127.0.0.0 netmask 255.0.0.0 loCommand: cat /etc/motdWelcome to____ _ _/ __| ||_|_ _| | | | _ ____ _ _ _ _| | | | | | || | _ \| | | |\ \/ /| |_| | |__| || | | | | |_| |/| ___\____|_||_|_| |_|\____|\_/\_/| ||_|呵呵, 恭喜你成功运行了uclinux操作系统现在你可以根据自己的喜好从新配置内核啦!!如下操作:从新回到虚拟机下的uclinux-dist目录下[root@localhost uclinux-dist]#make menuconfigKernel/Library/Defaults Selection --->(linux-2.6.x) Kernel Version(None) Libc Version[ ] Default all settings (lose changes)[*] Customize Kernel Settings[*] Customize Vendor/User Settings[ ] Update Default Vendor SettingsThen <exit> <exit> <yes> .以下可以根据自己的喜好配置内核这里不再叙述小提示:在配置内核的过程中如果有朋友在编译内核加入iptables 时若出现如下错误:include/linux/netfilter_ipv4/ip_tables.h:18:28: linux/compiler.h: No such file or directorymake[3]: *** [iptables.o] 错误1make[3]: Leaving directory `/usr/local/yanfa/nios2-linux/uClinux-dist/user/iptables'make[2]: *** [iptables] 错误2make[2]: Leaving directory `/usr/local/yanfa/nios2-linux/uClinux-dist/user'make[1]: *** [all] 错误2make[1]: Leaving directory `/usr/local/yanfa/nios2-linux/uClinux-dist/user'make: *** [subdirs] 错误1解决方法:把/usr/home/zhaozhilei/nios2-linux/uClinux-dist/user/iptables/include/linux/netfilter_ipv4 中的ip_tables.h中的#include <linux/compiler.h> 注解掉可解决编译uclinux_dist内核时出现的加载iptables 的错误。
移植uClinux到嵌入式系统的方法
移植uClinux到嵌入式系统的方法
吴旭
【期刊名称】《集成电路应用》
【年(卷),期】2005(000)005
【摘要】uClinux是嵌入式系统上很受欢迎的操作系统,在嵌入式系统运行uClinux要经过一个移植的过程.由于开放源代码的缘故,移植uClinux一般没有任何技术支持.移植者必须按照一定的步骤,根据各种不同的硬件情况,经过对源代码的修改,利用交叉编译环境,编译出适合特定嵌入式系统的uClinux内核文件,刷写到系统的FLASH存储器中,让uClinux在硬件上顺利的运行.移植成功以后,可以在系统上设计应用程序.
【总页数】3页(P61-63)
【作者】吴旭
【作者单位】华中科技大学电子与信息工程系,430074
【正文语种】中文
【相关文献】
1.移植uClinux到嵌入式系统的方法 [J], 吴旭
2.移植uClinux到嵌入式系统的方法 [J], 吴旭
3.基于uClinux的嵌入式系统开发技术方法论 [J], 皇良斌;薛健辉
4.uClinux在嵌入式系统中的移植研究 [J], 苏义鑫;王子毅;张素文
5.uClinux在嵌入式系统中的移植研究 [J], 苏义鑫;王子毅;张素文
因版权原因,仅展示原文概要,查看原文内容请购买。
uCLinux在NiosII平台上的移植
uCLinux在NiosII平台上的移植一、编译环境搭建VMware上安装Ubuntu9.04*1配置一些比较快的源默认情况下,Ubuntu中的vi编辑器并不好用,左右键不正常,需先安装vim-full,但ubuntu-9.04-desktop-i386.iso中的默认的源无法访问了。
sudo apt-get install 命令全都是“failed to fetch”的错误。
需要修改/etc/apt/sources.list源文件。
可用gedit命令。
输入用户密码。
但若把源地址一项一项添加很费事,易出错,从windows环境下又无法向VMware 中粘贴。
sshd,vsftpd没有安装,share-folder在Ubuntu环境下无法使用。
现在,还有一种方法,可在VMware环境下,从外部的ftp服务器上把事先已传上去的sources.list文件下载下来。
先配置网络sudo vi /etc/network/interfaces配置域名服务器sudo vi /etc/resolv.confsudo /etc/init.d/networking restart从ftp上下载source.list文件,然后执行sudo mv sources.list /etc/apt 命令之后,sudo apt-get update //升级安装的软件包。
sudo apt-get install vim-full //安装vim-full,便于以后的编辑sudo apt-get install openssh-server //安装sshd,便于远程登录sudo apt-get install vsftpd //安装vsftpd,便于以后与物理机间传送文件sudo apt-get install chkconfig //安装chkconfig,便于服务器的管理接下来就参照上所讲继续安装了。
二、TryOutLinux在进行移植工作之前,可以先下载现成的配置文件和内核映像文件,下载到板子上看看效果。
uClinux移植和分析
uClinux移植和分析简介:前一段时间,曾先后移植了uClinux-2.0.x和uClinux-2.4.x的内核,我的移植基本上是从零做起,linux并没有支持该目标机的代码,所以这个移植工作基本上是新增加对一种目标机的支持。
工作过程中,我学到了不少知识,除了操作系统,还了解了一些编译,调试,汇编,链接的的技术,在此我会一并介绍,可能介绍比较多的是连接器,因为这个相对和操作系统联系更加紧密一些。
我希望能够与大家分享自己经验,同时,有错误和不当的地方欢迎网友指出,共同进步,这是我写这些原创帖的动力。
“编程并非零和的游戏。
将己所知教给程序员同胞,他们并不会夺你所知。
能将我所知与人分享,我感到高兴,因为我身在其中、热爱编程。
” ——John CarmackuClinux下用户程序的执行之所以从用户程序谈起,是因为我们平常接触最多的还是应用程序。
从应用程序引出到操作系统我觉得比较自然。
下面就从一个简单例子介绍一个程序如何在操作系统中运行。
假如有个c程序:int main(int argc, char **argv[]){printf("hello world!\n");return 0;}这是一个最简单不过的程序了,一般一个C语言程序,都从main开始执行。
那么,main函数是不是与其他函数有所区别,地位有些特殊呢?不是的。
main函数和其他函数地位一样。
其实,我们完全可以做到让一个c程序从任何地方开始执行。
比如linux,它就没有main函数,大家都知道,系统执行过启动的一段汇编后,就会跳转到位于init/main.c中的start_kernel中开始执行。
那么为什么用户程序都要从main函数执行呢?这就是用户C库的原因。
一般用户用c语言开发时会调用一些库函数,编译成obj文件后,在链接过程中把库函数的二进制代码链接进入程序,最后形成二进制可执行文件。
链接过程中,链接器会在用户程序前插入一些初始化的代码。
嵌入式操作系统移植(在Microblaze处理器上进行uclinux移植)
第五章嵌入式操作系统5.1 嵌入式操作系统简介5.1.1产生与发展嵌入式系统是计算机系统的一种,因而嵌入式系统也可以分为软硬件两部分,和桌面计算机系统一样,嵌入式操作系统(Embedded Operating System,EOS)是嵌入式软件系统的核心部分。
在一个完整的嵌入式系统中,嵌入式操作系统介于底层硬件和上层应用程序之间,它是整个系统中不可缺少的重要组成部分。
嵌入式操作系统与传统操作系统的基本功能是一致的,即:首先嵌入式操作系统必须能正确、高效地访问和管理底层的各种硬件资源,很好地处理资源管理中的冲突;其次嵌入式操作系统要能为应用程序提供功能完备、使用方便、与底层硬件细节无关的系统调用接口。
嵌入式操作系统伴随着嵌入式系统的发展经历了几个比较明显的的阶段:第一阶段:无操作系统,以单芯片为核心的可编程控制器形式的系统,具有与监测、伺服、指示设备相配合的功能。
应用于一些专业性极强的工业控制系统中,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。
系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
第二阶段:以嵌入式CPU为基础、简单操作系统为核心的嵌入式系统。
其种类繁多,通用性比较差;系统开销小,效率高;一般配备系统仿真器,操作系统具有一定的兼容性和扩展性;应用软件较专业,用户界面不够友好;系统主要用来控制系统负载以及监控应用程序运行。
第三阶段:通用的嵌入式实时操作系统阶段,以嵌入式操作系统为核心的嵌入式系统。
能运行于各种类型的微处理器上,兼容性好;内核精小、效率高,具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(API);嵌入式应用软件丰富。
第四阶段:以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。
目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及互联网络技术与信息家电、工业控制技术等结合日益密切,基于Internet的嵌入式操作系统必将成为主要发展趋势。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uClinux在Nios II嵌入式平台上的移植研究1. Nios II嵌入式处理器广告插播信息维库最新热卖芯片:74HCT244D UPC8106T-E3GL386SPW20N60C3EPM5032PC-20 LX8385-00CDD OP27FJ ACS4025S MPC603RRX200LC XC4008E-2PQ208CNios II是运行在FPGA上的五级流水线、单指令的RISC处理器,它专门针对Altera 的可编程逻辑器件及片上可编程的设计思想做了相应的优化。
作为一种可配置的精减的RISC处理器,它可以与用户自定义逻辑结合构成SOPC系统,并下载到Altera的可编程器件中。
32位的Nios II软核,结合外部闪存以及大容量存储器,可以构成一个功能强大的32位嵌入式处理器系统。
此外,利用Altera提供的IDE(Integrated development environment)开发工具可以方便的在调试模式下调试处理器,提高开发的速度。
作者使用Cyclone II版Nios II应用开发板NIOS-DEVKIT-2C35作为移植实现的平台,开发板主要包括Cyclone II EP2C35器件、EPM7128AE CPLD配置控制逻辑、存储器、串行配置连接器、FPGA和CPLD的JTAG接口等。
2. 移植2.1. uClinux嵌入式操作系统uClinux是Linux的一个嵌入式版本,它经过小型化改造,形成了一个高度优化、代码紧凑的嵌入式Linux,并保留了Linux的大多数优点。
最新的2.6版本在内核主体中加入了提高中断性能和调度响应时间的改进,其中有三个最显著的改进:采用可抢占内核、更加有效的调度算法以及同步性的提高。
2.1.1. uClinux操作系统的移植uClinux源代码绝大部分都是使用的C语言,只有那些直接与处理其硬件相关的代码如开关CPU中断等操作才采用汇编语言编写,因此uClinux具有很好的移植性。
一般来说,uClinux的移植大致分为三类:1) 结构层次的移植。
如果待移植的处理器结构不同于任何已经支持的处理器结构,则需要修改linux/arch目录下的相关处理器结构的文件。
uClinux 内核代码的大部分是独立于处理器和其体系结构的,但是其最底层的代码也是特定于各个系统的。
他们的中断处理上下文、内存维护、任务上下文和初始化过程都是独特的。
对一个新型的体系,其下层程序可以模仿与其相似的体系程序编写。
2) 平台层次的移植。
待移植处理器是某种uClinux已支持体系的分支处理器,即如果待移植的处理器是基于Nios II内核的,而Nios II内核已经被uClinux支持,则需要在相关体系结构目录platform下建立相应目录并编写相应代码,这些代码主要是跟踪程序(实现用户程序到内核函数的接口等功能)、中断控制调度程序和内存初始化程序等。
3) 板级移植。
如果所用处理器(如Cyclone II版本系列)已经被uClinux支持的话,就只需要板级移植了。
板级移植需要修改或添加linux/arch/Nios2nommu/scripts 目录中的文件,该目录中主要是与具体硬件平台相关的配置,可以利用Nios II自带的SOPC Builder软件生成具体平台对应的配置文件。
对于uClinux已经支持的硬件架构,移植的过程相对较为简单,主要考虑修改与硬件开发平台相关的具体因素,如内存大小、外围设备的配置等。
一般现在做的大部分移植都是平台层次移植和板级移植。
2.1.2. initramfs文件系统作者使用的uClinux 2.6操作系统中,用initramfs文件系统取代了以前的romfs文件系统。
1. romfs文件系统。
romfs文件系统是在uClinux2.4以及之前版本广泛用到的文件系统,这种文件系统相对于一般的ext2/ext3文件系统要求更少的空间。
romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟RAM盘的方法进行处理(RAM盘采用ext2/ext3文件系统)。
2. initramfs文件系统[2]。
initramfs是在2.5版本内核中引入的技术,它的基本思想是:在内核镜像中附加一个cpio包,cpio包中包含了一个小型的文件系统,当内核启动时,内核将cpio包解开,并且将其中包含的文件系统作为初始的根文件系统,内核中的一部分初始化代码会放到这个文件系统中作为用户层进程来执行。
这样带来的明显的好处是精简了内核的初始化代码,例如寻找真正的启动盘、启动时的网络安装、ACPI的安装等,这些代码都可以从内核中移出,把它们都转移到用户空间完成,这样使得开发者在用户层就可以定制自己的启动过程,而不需要去修改内核代码,使定制启动过程变得更加容易。
2.2. 开发环境的建立1. 建立交叉编译环境。
可以在uClinux官方网站下载支持Nios II的交叉编译开发工具包,包括Nios2-linux-uclibc-gcc、Nios2-linux-uclibc-ld、Nios2-linux-uclibc-objdump等。
安装好交叉编译工具包后,要在宿主PC上的Linux系统的环境变量中(一般修改~/.bash_profile文件),添加对Nios II交叉编译环境的支持,这样在以后的开发中,就可以正常编译在Nios II嵌入式平台下运行的程序了。
2. 内核的下载和烧写。
在最初的调试中,是通过JTAG把内核下载到开发板,Nios II 平台的硬件逻辑也是通过JTAG烧进开发板,等到最后硬件逻辑测试没有问题,以及uClinux操作系统调试运行正常后,就可以制作带bootloader的内核,烧入flash中。
2.3. 引导程序引导程序(即bootloader)就是在操作系统内核运行之前运行的一段小程序,它在硬件复位后首先被执行。
主要工作是初始化硬件设备、建立内存空间的映射图,从而将系统的软硬环境带到一个合适的状态,以便为最终调用操作系统内核准备合适的环境。
通常引导程序严重地依赖于硬件,每种CPU体系结构都用不同的启动代码。
此外,引导程序还依赖于具体的嵌入式板级设备的配置,如硬件地址分配,RAM芯片类型等。
bootloader担负着初始化硬件和引导操作系统的双重责任,也是在特定硬件平台操作系统移植至关重要的一步。
对于作者使用的Nios II应用开发板,引导程序主要完成以下几项工作:1) 矢量表初始化。
2) 初始化硬件(I/O口和控制器、存储器、时钟)。
3) 将操作系统内核从Flash指定位置拷贝到RAM中。
4) 软件初始化:建立堆栈和初始化数据段,建立C的运行环境。
5) 让CPU转入RAM中指定的位置(即操作系统内核)开始执行。
其中,第二步主要初始化处理器的一些控制或状态寄存器、时钟、I/O口、RAM等这些内核必须用到的设备。
第三步中uClinux内核加载可以直接从flash某个地址开始逐句执行或者加载到内存中运行。
作者采用的是后一种方法,即先把flash中的操作系统内核全部复制到内存中,再从内存中运行操作系统,因为内核大小一共不到1.5M字节,从flash 复制到RAM中花的时间很少(几百毫秒),很快就会完成,该方法也比较容易实现。
图1是作者的bootloader运行的主要流程:图1 bootloader程序主要流程2.4. uClinux操作系统映像的构建引导程序执行完毕后,处理器就开始执行真正的操作系统,操作系统内核的运行跟开发板的硬件配置有着紧密的联系。
只有正确的配置操作系统内核,它才会正确利用硬件资源。
由于2.6版本的uClinux已经支持了Nios II处理器,所以移植过程主要是板级移植。
首先,利用Nios II的配套开发软件Quartus II新建一个工程,用SOPC builder设计好自己的硬件逻辑,编译后会生成两个跟硬件平台相对应的硬件逻辑的文件,其中,*.sof 文件是烧入开发板中并运行于其中的硬件逻辑,另外一个*.ptf文件是用于生成跟硬件平台相适应的uClinux内核。
然后,在宿主PC的Linux环境下,把*.ptf文件通过相关命令导入内核配置中,硬件平台的配置内容就会在linux/arch/Nios2nommu/scripts文件夹下生成,接着就可以通过make menuconfig 命令配置uClinux操作系统内核,具体相关选项的选择,要跟自己的硬件平台相同。
最后,在配置好内核后,就可以直接编译生成uClinux操作系统内核映像文件,把*.sof 文件通过JTAG烧入开发板中,把内核映像文件通过JTAG烧入SDRAM中,一个uClinux 操作系统就可以在Nios II开发板上运行起来了。
图2是正确配置uClinux内核后的操作系统启动信息,打印信息是通过串口输出到屏幕上的:图2 uClinux启动界面至此,一个简单的uClinux操作系统在Nios II嵌入式平台上移植完成,这个操作系统经过裁减,去掉了Linux内核中一些不是必须的功能,但是具有一个Linux操作系统的几乎所有的特征。
接下来,就可以在建好的开发环境中,开发在此平台上运行的程序了。
3. 结束语Altera的Nios II软核处理器性能超过200DMIPS,在Altera FPGA中实现仅需35美分,并且开发者能从无限的系统配置组合中选择满足性能和成本目标的方案,而不必为系统级设计考虑采用ASIC。
并且,Nios II处理器还具有完善的软件开发套件。
此嵌入式平台最终应用于有线数字电视接收系统,主要完成对加密数字电视传输流的实时接收和解扰工作,在实际的测试中,uClinux 2.6操作系统运行良好并且稳定,完全能胜任此类工作。
本项目产生经济效益800万元。
本文作者创新点:在Nios II嵌入式平台上,实现了最新的uClinux 2.6嵌入式操作系统的移植,并对移植过程中的关键部分进行分析,对在Nios II嵌入式平台上的嵌入式系统移植有一定的指导和参考价值。