一、uboot簡介
U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來的開放源碼項目。
在操作系統(tǒng)方面,U-Boot不僅支持嵌入式Linux系統(tǒng)的引導(dǎo),它還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系統(tǒng)。目前支持的目標(biāo)操作系統(tǒng)是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。
在CPU架構(gòu)方面,U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM、NIOS、XScale等諸多常用系列的處理器。
U-Boot項目的開發(fā)目標(biāo)是支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。
二、uboot的特性
Uboot的特性:
1、開放源碼;
2、支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
3、支持多個處理器系列,如PowerPC、ARM、x86、MIPS;
4、較高的可靠性和穩(wěn)定性;
5、高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;
6、豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;
7、較為豐富的開發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持;
三、嵌入式 uboot裁剪
u-boot裁減的主要方法是通過刪除不需要的命令來減小可執(zhí)行代碼體積。比如說,如果不需要網(wǎng)絡(luò)相關(guān)的功能,則可以將網(wǎng)絡(luò)相關(guān)的所有命令全部刪除,可以節(jié)約可觀的flash空間。一般u-boot的大小為100k左右,通過刪除命令(如果刪除網(wǎng)絡(luò)相關(guān)的命令),可以裁減到64k以內(nèi),只保留一些經(jīng)常使用的命令。
另外,如果需要動態(tài)修改環(huán)境變量,環(huán)境變量還需要單獨分配一個flash扇區(qū)用于保存。這樣大約就需要64k+64k的flash空間。如果我們不需要動態(tài)修改環(huán)境變量,可以省去一個扇區(qū)的Flash開銷。
以下是本人裁減u-boot的基本步驟:
1,刪除除默認(rèn)命令以外的命令:
刪除include/configs/naribf533.h中CONFIG_COMMANDS的定義,直接采樣默認(rèn)的命令。可以將u-boot從108k裁減到79k。2,刪除其他不需要的命令,只保留常用命令:
通過修改include/cmd_confdefs.h中的CFG_CMD_NONSTD常量,進(jìn)一步裁減u-boot命令。CFG_CMD_NONSTD為“non-standard”命令,除了這個常量定義的命令外,其余都是常用命令。我們可以通過在這個常量中添加不需要的命令來減少默認(rèn)命令的數(shù)量。我們這里只保留以下命令,其余全部裁減掉:
- 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,修改控制臺返回信息和環(huán)境變量:修改環(huán)境變量的存儲扇區(qū)地址,并刪除無用的環(huán)境變量或相應(yīng)修改成對應(yīng)于我們開發(fā)板的環(huán)境變量。相應(yīng)修改一些控制臺返回信息。
4,如果不動態(tài)修改環(huán)境變量,建議刪除saveenv命令,以免誤擦除u-boot程序。
-
嵌入式
+關(guān)注
關(guān)注
5140文章
19524瀏覽量
314763 -
Uboot
+關(guān)注
關(guān)注
4文章
126瀏覽量
28875
原文標(biāo)題:嵌入式 uboot裁剪的方法及思路
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式系統(tǒng)有哪些特性
嵌入式系統(tǒng)簡介
嵌入式之Linux系統(tǒng)裁剪和定制
嵌入式Linux開發(fā)簡介
ALPHA V2.2 Uboot簡介
嵌入式操作系統(tǒng)裁剪技術(shù)研究
關(guān)于嵌入式Linux操作系統(tǒng)開發(fā)簡介
基于arm的嵌入式linux內(nèi)核的裁剪移植

【嵌入式】構(gòu)建嵌入式Linux系統(tǒng)(uboot、內(nèi)核、文件系統(tǒng))

嵌入式復(fù)習(xí)

嵌入式linux學(xué)習(xí) Day1 uboot基礎(chǔ)

評論