实验十三 移植U-Boot

本文由用户“颜gM优mm”分享发布 更新时间:2021-12-03 17:19:26 举报文档

以下为《实验十三 移植U-Boot》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。



实验十三 移植U-Boot

一、知识准备

1.U-Boot

U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS

D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在2002年11 月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk[以下简称W.D]本人精湛专业水平和执着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

选择U-Boot的理由:

① 开放源码;

② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;

③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;

④ 较高的可靠性和稳定性;

⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;

⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;

⑦ 较为丰富的开发调试文档与强大的网络技术支持;

目录结构:

* board 目标板相关文件,主要包含SDRAM、FLASH驱动;

* common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

* cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;

* driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)

* doc U-Boot的说明文档;

* examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;

* include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 的起始地址等



uboot 执行通过宏来判断:宏在头文件中定义。

#ifdef CONFIG_TEST

run_test();

#endif

某头文件

#define CONFIG_TEST

可以这样认为,“CONFIG_”除了设置一些参数外,主要用来设置U-Boot的功能、选择使用文件中的哪一部分;而“CFG_”用来 设置更细节的参数。

2、u-boot的编译过程:

配uboot 编译通过Makefile来判断:obj-y += xx.o xx.o 在编译时,只编译obj-y

obj-$(CONFIG_XX) = xx.o xx.o 如果CONFIG_XX为y,则此文件会被编译进u-boot.bin置完后,执行“make all” 即可编译:

找第一个目标all:



上面代码是对u-boot进行格式转换,变成二进制bin格式之后,再加一些校验与4412开如平台加密信息。

依赖u-boot:



U-Boot的启动分为两个阶段来进行的。第一阶段为BL2程序,第二阶段为U-Boot程序。其中,第一阶段的BL2程序被编译成与位置无关的代码,即其代码可以任何的内存位置中运行。BL2程序的运行在内部的iRAM上,主要功能为初始化CPU时钟,与外部的SDRAM,并将第二阶段的U-Boot拷贝到SDRAM上。

第一阶段为BL2程序运行过程:

(1)、初始化时钟信号

(2)、初始化外部SDRAM

(3)、拷贝余下的U-Boot代码到SDRAM上

(4)、初始化堆栈并建立C语言运行环境

(5)、对U-Boot代码的BSS段进行重定位

(6)、跳转到在SDRAM的U-Boot上运行

第二阶的U-Boot功能为初始化使用到的外设,如USB-OTG外设,串口外设,网卡外设等,并能引导kernel启动。



2. u-boot编译和烧写

(1)、把实验指导书中的uboot_smdk4412.tar.gz拷贝进虚拟机,输入命令:tar –xzvf uboot_smdk4412.tar.gz进行解压,如下图:



(2)、输入命令:make distclean ,make smdk4412_config ,make,即可完成程序的编译。



执行make命令进行U-Boot的编译。编译成功后,在当前目录内会生成U-Boot.bin和bl2.bin文件,另外还会在sd_fuse生成E4412_N.bl1.bin文件。



到此已经成功编译U-Boot生成二进制镜像文件U-Boot.bin,接着将E4412_N.bl1.bin、bl2.bin、u-boot.bin写入到INAND里,可以验证U-Boot的功能是否正常。

(3)、把E4412_N.bl1.bin、bl2.bin、u-boot.bin拷贝出来放到实验指导书中的xf _linux image_uboot文件夹下:



给网关插上串口线和下载线,在串口终端看到的以下内容时按下回车键,以停止U-boot引导kernel 启动。



在命令行中输入fastboot,出现如下界面:



双击实验指导书xf _linux image_uboot目录下的write_uboot.bat脚本程序进行u-boot烧写,烧写成功自动重启,观察实验现象,如果串口终端成功打印出如下的信息,则表明U-Boot已经成功启动。



六、实验验证

(1)、了解u-boot的编译流程



(1)、BL2运行过程有哪些?

[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。

  1. 第2章 Android UI 开发——应用案例_0626_郝某某
  2. 操作系统有哪些
  3. 嵌入式软件设计X复习题
  4. 嵌入式软件系统试卷
  5. 创建Linux虚拟机
  6. 实验18、 数据存储(3)
  7. 《Linux操作系统》一体化教学模式的探索与实践-宋某某
  8. Linux指令
  9. Linux考证真题
  10. -linux实验报告
  11. 设计排版要求
  12. android研发规范

以上为《实验十三 移植U-Boot》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览