嵌入式uboot的简介、特性以及裁剪的方法和思路

电子说

1.2w人已加入

描述

一、uboot简介

U-Boot,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的开放源码项目。

在操作系统方面,U-Boot不仅支持嵌入式Linux系统的引导,它还支持NetBSD, 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。

在CPU架构方面,U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

U-Boot项目的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。
Uboot

二、uboot的特性

Uboot的特性:

1、开放源码;

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

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

4、较高的可靠性和稳定性;

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

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

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

三、嵌入式 uboot裁剪

u-boot裁减的主要方法是通过删除不需要的命令来减小可执行代码体积。比如说,如果不需要网络相关的功能,则可以将网络相关的所有命令全部删除,可以节约可观的flash空间。一般u-boot的大小为100k左右,通过删除命令(如果删除网络相关的命令),可以裁减到64k以内,只保留一些经常使用的命令。

另外,如果需要动态修改环境变量,环境变量还需要单独分配一个flash扇区用于保存。这样大约就需要64k+64k的flash空间。如果我们不需要动态修改环境变量,可以省去一个扇区的Flash开销。

以下是本人裁减u-boot的基本步骤:

1,删除除默认命令以外的命令:

删除include/configs/naribf533.h中CONFIG_COMMANDS的定义,直接采样默认的命令。可以将u-boot从108k裁减到79k。2,删除其他不需要的命令,只保留常用命令:

通过修改include/cmd_confdefs.h中的CFG_CMD_NONSTD常量,进一步裁减u-boot命令。CFG_CMD_NONSTD为“non-standard”命令,除了这个常量定义的命令外,其余都是常用命令。我们可以通过在这个常量中添加不需要的命令来减少默认命令的数量。我们这里只保留以下命令,其余全部裁减掉:

- alias for 'help'autoscr - run script from memorybase    - print or set address offsetbdinfo  - print Board Info structurebootm   - boot application image from memorycmp     - memory compareconinfo - print console devices and informationcp      - memory copycrc32   - checksum calculationecho    - echo args to consoleerase   - erase FLASH memoryfl      - flush a file to FLASH memoryflinfo  - print FLASH memory informationgo      - start application at address 'addr'help    - print online helploadb   - load binary file over serial line (kermit mode)loads   - load S-Record file over serial lineloop    - infinite loop on address rangemd      - memory displaymm      - memory modify (auto-incrementing)mtest   - simple RAM testmw      - memory write (fill)nm      - memory modify (constant address)oc      - over clockingprintenv- print environment variablesprotect - enable or disable FLASH write protectionreset   - Perform RESET of the CPUrun     - run commands in an environment variablesaveenv - save environment variables to persistent storagesetenv  - set environment variablessleep   - delay execution for some timeversion - print monitor version

最终可以将uboot裁减到63k。

3,修改控制台返回信息和环境变量:修改环境变量的存储扇区地址,并删除无用的环境变量或相应修改成对应于我们开发板的环境变量。相应修改一些控制台返回信息。

4,如果不动态修改环境变量,建议删除saveenv命令,以免误擦除u-boot程序。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分