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