ZYNQ7000(AX7020)移植Linux操作系统(二):u-boot的编译和启动
总述我们已经在 PC 上已经安装了 Ubuntu 客户操作系统,以及在 Ubuntu 操作系统里安装了 SDK 2015.4 工具。要想在 Zynq 平台上运行 Ubuntu 操作系统,必项预先制作作镜像文件,而镜像文件中必项有 u-boot、内核、设备树及文件系统。本章则将为大家说明u-boot 的原理及配置和编译的方法,以及 u-boot 启动测试。一、u-boot 原理及实现u-boot是德
总述
我们已经在 PC 上已经安装了 Ubuntu 客户操作系统,以及在 Ubuntu 操作系统里安装了 SDK 2015.4 工具。要想在 Zynq 平台上运行 Ubuntu 操作系统,必项预先制作作镜像文件,而镜像文件中必项有 u-boot、内核、设备树及文件系统。本章则将为大家说明u-boot 的原理及配置和编译的方法,以及 u-boot 启动测试。
一、u-boot 原理及实现
u-boot是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序。当前,u-boot不仅支持嵌入式 Linux 系统的引导,它还支持 NetBSD、VxWorks、QNX、RTEMS、ARTOS、
LynxOS 嵌入式操作系统。u-boot 除了支持 ARM 系列的处理器外,还支持 MIPS、x86、PowerPC、XSale 等诸多常用系列的处理器。在 Zynq7000 系统中,u-boot 主要是用于引导Ubuntu 操作系统。
首先下载合适的uboot版本 , 我用的是2016-07版
二、uboot的文件结构
在uboot的文件夹下由很多子文件夹构成,其中每个文件夹都实现一个对应的功能。
1.api:相关的api函数,如输出字符函数。
2.arch:与特定的CPU架构相关的目录。在该目录下,uboot所支持的不同的CPU架构都有一个单独的子目录对应。典型的,arch文件夹下名字为arm的子目录就是Zynq7000 soc所对应的CPU架构目录。
3.board:和一些已有开发板有关的文件。每一个开发板都以一个子目录出现在当前目录下。
4.common:实现uboot命令行下所支持的命令。在该目录下,每条命令对应一个独立的文件。
5.disk:提供对磁盘的支持。
6.doc:文档目录,uboot有非常完整的文档。
7.drivers:在该目录下保存着uboot所支持的设备驱动程序。典型的如各种网卡、支持的CFI的Flash存储器,串口和USB等。
8.fs:对于Ubuntu所支持的文件系统,在该目录下面都有一个对应的文件夹。典型的,uboot现在支持cramfs,jffs2和ext4等文件系统。
9.include:该目录下保存着uboot所使用的头文件,对各种硬件平台支持的汇编文件、系统的配置文件以及对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件,如zynq_common.h是于zynq开发板相关的配置文件。
10.lib:该目录下保存着体系结构相关的库文件。
11.net:该目录下保存着与网络协议相关的代码。比如BOOTP协议、TFIP协议、RARP协议和NFS文件系统的实现。
12.tools: 该目录下保存着用于生成uboot的工具,包括mkimage、crc、Makefile和boards.cfg配置文件。
三、uboot工作模式
uboot的工作模式有启动加载模式和下载模式
1.启动加载模式
该模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从flash中加载到SDRAM中运行,整个过程是自动得。
2.下载模式
该模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标版得flash中。用户可以利用Bootloader提供的一些命令接口来完成自己想要得操作。
四、uboot启动流程
uboot启动内核的过程可以分为两个阶段,两个阶段的功能如下:
1.第一阶段功能 :
硬件设备初始化
加载uboot第二阶段代码到RAM空间
设置好栈
跳转到第二阶段代码入口
2.第二阶段的功能
初始化本阶段使用的硬件设备
检测系统内核映射
将内核从flash读取到RAM中
微内核设置启动参数
调用内核
第一阶段对应的文件是/arch/arm/cpu/armv7目录下得start.S和lowlevel_init.S文件。
第二阶段对应得文件是common/board_r.c
五、uboot的编译
下面为大家介绍uboot的编译方法,在编译之前,需要保证Ubuntu环境中已经安装设备树编译器工具。安装命令如下 :
apt-get install device-tree-compiler
安装完dtc工具后,就可以编译uboot了。
1.在命令行中输入命令“source/opt/Xilinx/SDK/2015.4/settings64.sh”定位到交叉编译器。
2.进入到uboot-xlinx-master文件夹,该文件夹中保存着uboot的源码。
3.在命令行输入命令 :
make CROSS_COMPILE=arm-xlinx-linux-guneabi-zynq_ax7020_defonfig,生成mikefile文件。
4.在命令行输入命令:
make CROSS_COMPILE=arm-xlinx-linux-gnueabi-,编译器会自动编译uboot
5.当uboot编译成功后,在uboot-xlinx-master根目录下会生成uboot文件(elf文件)、uboot.bin和uboot.srec等文件。其中uboot文件我们将用来制作最后启动的BOOT文件。
六、生成BOOT.BIN文件
对于Zynq7000来说 , BOOT.BIN文件包含第一级启动代码FSBL、硬件比特流文件和uboot文件。
1.完成vivado工程,生成.bit文件。
2.进入SDK开发环境后,点击菜单File->New->Application Project,在Project name:输入fsbl , Hardware Platform 需要选择system_wrapper_hw_platform_1。
选择Zynq FSBI模板
为了能让串口打印出uboot信息,我们这里需要在fsbl_debug.h文件里添加一条语句,定义一下“FSBL_DEBUG_INFO”常量。修改后保存,重新编译一下fsbl项目。
最后开始生成BOOT.BIN文件, :
这里需要把Ubuntu操作系统中生成的uboot拷贝到Vivado的工程目录下,并添加后缀为uboot.elf。
在SDK里选择菜单Xilinx Tools->Create Boot Image
选择Zynq Boot Image 文件.bif的存放地址,然后再Boot image partitions里添加3个文件 : 分别是fsbl.elf、system_wrapper.bit、和uboot.elf。
点击Create Image按钮,生成BOOT.BIN。
七、uboot启动实验
1.先用FAT32的格式先格式化一下SD卡,然后把生成的BOOT.bin文件到SD中。
2.把SD卡再插到开发板的SD卡槽中,再把Boot启动配置的跳线帽调到SD位置的两个引脚上。开发板上电,程序就会在SD卡启动。在串口信息中,我们可以看到uboot启动的打印信息。
3.可以再uboot界面下,敲击printenv,看看uboot默认的参数配置;敲击help,看看uboot都有哪些命令。比如我们可以在uboot下测试网络连接,用网线连接开发板和电脑的网口,再来设置一下开发板的I地址,这里开发板的IP地址需要和电脑的IP地址保存在同一个网段。
更多推荐
所有评论(0)