首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uClinux在Nios II嵌入式平台上的移植研究(2)

uClinux在Nios II嵌入式平台上的移植研究(2)

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运行的主要流程:
继承事业,薪火相传
返回列表