当前位置:首页 > EDA > 电子设计自动化
[导读]针对将cClinux向Nios处理器移植过程中的启动加载程序U-boot bootloader进行研究。

   摘要:针对将cClinux向Nios处理器移植过程中的启动加载程序U-boot bootloader进行研究。首先介绍移植的步骤,然后利用bootloader的设计思想,着重讨论U-boot在Nios中的设计与实现,最后对U-boot在基于Linux的嵌入式系统 中的运用作了探索和展望。

    关键词:U-boot bootloader uClinux Nios软核

1 概述

1.1 Nios简介

Nios是Altera公司以RISC为基础的可配置、可裁减软核处理器。它具有16位指令集和16/32位数据通路,通过将包括16或32位高性能处理器在内的移种应用模块嵌入到通用FPGA/CPLD内,实现完全可配置的嵌入式系统。其开发套件包括:具有必要外围内核的Nios处理器、C/C++编译器、Cygnus的源级调试程序、Quartus编译软件、验证工具和开发板。

Nios软核处理器主要特性包括:高效灵活的处理器模块,可以通过软件配置成16位或32位的中央处理单元(RISC结构),并可选择不同的内部存储器大小,其最高执行速度可达50MHz;具有多种其它功能模块的选择(SDRAM控制器、UART控制器、PCI接口模块、LCD接口模块、MAC接口模块等多种功能模块);具有完整、廉价、便捷的开发系统。所有开发(包括设计、调试)均通过软件进行,不再需要专门的硬件仿真器和编器,大大减少了开发设备的成本。

1.2 向Nios移植uClinux需要做的工作和步骤

(1)硬件需求

需要一个Altera公司的开发包,或者是下面三种之一:APEX board,STRATIX board,CYCLONE board。本文选用的是CYCLONAE board。

(2)软件需求

下载一个最新版本的uClinux,并搭建一个Nios的GNU C编译环境,准备好CDK4Nios开发包。CDK4Nios开发包是Nios的交叉开发包。

(3)bootloader

需要编写或移植一个bootloader到Altara Nios board上。本文就是要设计一个用于Nios的U-boot bootloader。利用QUARTUS软件为开发板定义默认参数,然后在开发板上测试U-boot。

    (4)uClinux内核的编译

将下载好的uClinux源泉代码解压到/home目录下,会产生/home/uClinux-dist目录,进入该目录,依次键入:

make menuconfig

make dep

make

在/home/uClinux-dist/image目录中产生image.rom,image.ram,romfs.img,它们分别是内核的映像及文件系统的映像文件。键入make menuconfig时,会出现开发平台及内核配置和文件系统应用程序的配置界面,可以根据需要配置。

(5)uClinux的根文件系统及其加载

uClinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。romfs文件系统不支持动态擦写保存,对于需要系统动态保存的数据,采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。同时,uClinux内核也支持各种文件系统,例如,网络文件系统,在需要时可以进行mount。

解决了上述问题以后,uClinux便可以成功地移植到Nios上。

1.3 U-boot介绍

U-boot是启动引导程序的一种,是一种通用的Linux bootloader。在做uClinux移植时,碰到的第一个问题就是移植bootloader或者自己编写bootloader程序。Linux内核启动部分的代码需要判断从bootloader传递过来的寄存器值。U-boot对Linux引导有特别的支持,如:

①SCC/FEC以太网支持;

②BOOTP/TFTP引导;

③IP,MAC预置能力和在线读写Flash、DOC、IDE、IIC、EEROM、RTC;

④支持串行口kernit,S-record下载代码;

⑤识别二进制、ELF32、pImage格式的Image,对Linux引导有特别的支持;

⑥单软件软件运行环境(hello.c);

⑦监控(minitor)命令集有读写I/O、内存、寄存器、外设测试功能等;

⑧脚本语言支持(类似BASH脚本);

⑨支持watchDog,LCDlogo,状态指示功能等。

本文着重介绍uClinux向Nios软核处理器移植过程中,U-boot的设计和实现。

2 U-boot的设计

2.1 bootloader的设计思想

bootloader的设计除了依赖于CPU的体系结构外,它实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的bootloader程序也能运行在另一块板子上,通常也都需要修改bootloader的源程序。从本质上讲,它不属于操作内核,它是针对不同的CPU体系结构的,这一部分代码不具有可移植性。在移植操作系统时,这部分代码必须加以改写。

    bootloader引导加载程序是系统加电后运行的第一段软件代码。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统开发中,bootloader还担任了与主机端通信的任务,它相当于一个“服务器”,不断监听从主机端传来的控制信息和数据信息,完成相应的操作。它担负着初始化硬件和引导操作系统的双重责任,也是在特定硬件平台上操作系统移植至关重要的一点。

2.2 Nios内核的U-boot设计方案

在主机上建立开发环境的具体步骤:

①建立Nios平台内核的头文件和连接;

②建立实用程序集合;

③建立Nios平台C编译器;

④建立Nios平台的glibc库;

⑤建立Nios平台C++编译器;

⑥建立应用程序的开发和测试。

所建立的开发环境结构图如图1所示。

搭建完开发环境后,使用开发主机的并口为Nios开发板写入引导程序作为系统启动和管理Flash的bootloader,也就是U-boot。该工具能为Nios平台提供引导功能,并且能够支持网络通信,调试和简单的Flash文件系统,也是CPU开机后执行的第一个程序,它的任务是将操作系统内核(压缩的或非压缩的)装载到内核要求的地址中,然后让出控制权。

Nios处理器允许操作系统改变内核时钟,以方便内存对于时间的处理,所以U-boot的第一个任务就是配置处理器的时钟,并进行内存存取设置。一旦内存可以使用,就开始初始化相应的堆栈。内存初始化完成后,U-boot能使处理器上的串口中断处理,以允许开发板通过串口与开发环境通信。此后,U-boot还必须完成三个基本工作:

*禁用MMU(Memory Management Unit);

*寄存器(CPU寄存器)r0置零;

*寄存器R1置相应的Nios体系结构代码。

完成这些后,U-boot的工作就完成了,可以通过用户命令或者系统自动执行下一步,U-boot将跳至内存中内核代码开始处,开始启动内核。流程图如图2所示。

3 Nios内核的U-boot实现

为了达到将U-boot移植到Nios平台上的目的,我们进行以下操作。

①在makefile文件和make all script里增加一项设置选择,仿照已经存在的那些例子。

②建立一个存放开发板代码的目录,增加所需要的文件。在这个目录里,至少有“makefile”,“nios.c“,"flash.c""u-boot.lds"。

③为开发板建立一个新的设置文件:include/configs/nios.h。

④如果移植U-boot到一个新的CPU,还需要建立一个放置CPU代码的目录。

⑤运行make nios_config。

⑥运行make,获得一个U-boot.srec的文件并安装到目标系统。

⑦调试并解决可能产生的问题。

当然,在修改U-boot代码时,要特别注意和开发板及CPU相关的部分,要设置成专门的Nios配置。

CONFIG_Nios——定义了所有Nios32的板子。

CFG_Nios_CONSOLE—console UART的基地址。

CF G_GBL_DATA_OFFSET—在Nios移植中所用到全局变量的偏移量,简单来讲是全局数据的地址。

CFG_Nios_TMRBASE—计时器的基地址。

CFG_Nios_TMRIRQ——分配给计时器的中断请求。

下面介绍如何用GERMS执行U-boot。

在没有将U-boot编入Flash之前,键入nios-run命令来运行U-boot monitor,步骤如下:

*打开一个Nios sdk shell。

*把目录转换到含有U-boot.src文件的目录。

*执行下列命令:

$nios-run -r u-boot.srec

这时我们可以看到:

u-boot 1.0.0 pre(Jan 2004-07:36:40)

cpu nios-32 Rec3.18(03018)

Regfile Size:256

LO_LIMIT/HI_LINIT:2/14

Board:Altera Nios 1C20Developemt Kit

In:Serial

Out:Serial

Err:Serial

==>

*在下载完之后,GERMS monitor将自动启动U-boot。可以看到U-boot命令符号“==>”,看到后,退出nios-run。

*启动终端,应该被设置在115200,N,8,1处运行。

*开始用U-boot了,试着从U-boot符号那里执行help命令:

==>help

将U-boot放到Flash存储器里,在U-boot的提示符下,进行擦除Flash的一个区。

==>erase 40000 4ffff

把U-boot代码装载到RAM:把一个二进制映像装载到RAM。

==>loadb 800000

把这个二进制映像从RAM拷贝到Flash。

==>cp.b80000 40000 10000

这样,当通过标准的32位设置后,开发板重置,U-boot自动启动。若用安全模式下启动U-boot,输入下列的GERMS命令:+g40000。

结语

U-boot bootloader是操作系统和硬件的枢纽,相对于操作系统内核来说,它是一个硬件抽象层。它负责初始化硬件,引导操作系统内核,检测各种参数给操作系统内核使用。一个功能完备的大型bootloader的工作量,相当于一个小型的操作系统。嵌入式领域中,操作系统移植的关键在于:bootloader的移植和操作系统内核硬件相关部分移植。设计和实现一个好的U-boot将大大提高操作系统移植的稳定性,并大大加快操作系统移植的周期。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭