uboot源碼目錄分析
uboot源碼簡單分析
這裡只是對uboot源碼目錄下的內容做一個簡單的分析而已,具體的學習會在之後,先來一個整體的瞭解。
腳本文件分析
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot$ tree -FL 1 | grep -v /$
.
├── arm_config.mk
├── CHANGELOG
├── CHANGELOG-before-U-Boot-1.1.5
├── Changelog_Samsung
├── config.mk
├── COPYING
├── CREDITS
├── image_split*
├── MAINTAINERS
├── MAKEALL*
├── Makefile
├── mk*
├── mkconfig*
├── mkmovi*
├── README
├── rules.mk
├── System.map
├── u-boot*
├── u-boot.bin*
├── u-boot.dis
├── u-boot.map
└── u-boot.srec*
常見的類似git、changelog、copyright就略過吧
image_split
用於分割uboot到BL1
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot$ cat image_split
#!/bin/bash
#
# This script split u-boot binary for secure boot
# spiliting u-boot for BL1 (8KB -128 Byte)
rm bl2*
split -b 8064 u-boot.bin bl2.bin
MAKEALL Makefile mk
這三個是用來編譯uboot的腳本
MAKEALL大概是用來設置如何編譯的,因為看了腳本的前面一部分,是判斷如何MAKE、LOG位置、BUILD位置的
if [ "${CROSS_COMPILE}" ] ; then
MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
else
MAKE=make
fi
if [ "${MAKEALL_LOGDIR}" ] ; then
LOG_DIR=${MAKEALL_LOGDIR}
else
LOG_DIR="LOG"
fi
if [ ! "${BUILD_DIR}" ] ; then
BUILD_DIR="."
fi
[ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
LIST=""
Makefile就是主編譯腳本了,用來管理整個uboot的編譯,腳本有3千多行,暫時先放一邊
至於mk就是一種類似與一鍵編譯的東西,就把原先編譯時需要手動輸入的命令放到腳本里,直接執行腳本就可以編譯
make distclean
make x210_sd_config
make -j4
mkconfig
這個是uboot的主要配置腳本,它會為指定的開發板生成配置需要的頭文件和鏈接
#!/bin/sh -e
# Script to create header files and links to configure
# U-Boot for a specific board.
mkmovi
這個腳本和inand/SD卡啟動有關
#!/bin/bash
#
# This script will create a u-boot binary for movinand/mmc boot
rules.mk
uboot的Makefile使用規則
_depend: $(obj).depend
$(obj).depend: $(src)Makefile $(TOPDIR)/config.mk $(SRCS)
@rm -f $@
@for f in $(SRCS); do
g=`basename $$f | sed -e s/(.*).w/1.o/`;
$(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -MQ $(obj)$$g $$f >> $@ ;
done
其他目錄分析
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot$ tree -d -L 1
.
├── api
├── api_examples
├── board
├── common
├── cpu
├── disk
├── doc
├── drivers
├── examples
├── fs
├── include
├── lib_arm
├── libfdt
├── lib_generic
├── nand_spl
├── net
├── onenand_bl1
├── onenand_ipl
├── post
├── sd_fusing
└── tools
api api_examples
api提供了一系列的系統調用
api_examples則提供了api的使用常式
board
為特定開發板提供移植的文件放在這個文件夾中
common
通用代碼,與處理器架構無關代碼
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot/common$ ls
ace_sha1.c cmd_dcr.c cmd_immap.c cmd_onenand.c cmd_vfd.c env_nowhere.c miiphybb.c
ACEX1K.c cmd_df.c cmd_itest.c cmd_otp.c cmd_ximg.c env_nvram.c miiphyutil.c
altera.c cmd_diag.c cmd_jffs2.c cmd_pci.c command.c env_onenand.c secure_boot.c
bedbug.c cmd_display.c cmd_load.c cmd_pcmcia.c console.c env_sf.c serial.c
circbuf.c cmd_doc.c cmd_log.c cmd_portio.c crc16.c exports.c soft_i2c.c
cmd_ambapp.c cmd_dtt.c cmd_mac.c cmd_reginfo.c cyclon2.c fdt_support.c soft_spi.c
cmd_android.c cmd_eeprom.c cmd_mem.c cmd_reiser.c devices.c flash.c spartan2.c
cmd_autoscript.c cmd_elf.c cmd_mfsl.c cmd_sata.c dlmalloc.c fpga.c spartan3.c
cmd_bdinfo.c cmd_ext2.c cmd_mii.c cmd_scsi.c dlmalloc.src gunzip.c s_record.c
cmd_bedbug.c cmd_fastboot.c cmd_misc.c cmd_setexpr.c docecc.c hush.c stratixII.c
cmd_bmp.c cmd_fat.c cmd_mmc.c cmd_sf.c env_auto.c image.c usb.c
cmd_boot.c cmd_fdc.c cmd_mmc_fdisk.c cmd_spi.c env_common.c kgdb.c usb_kbd.c
cmd_bootldr.c cmd_fdos.c cmd_movi.c cmd_strings.c env_dataflash.c lcd.c usb_storage.c
cmd_bootm.c cmd_fdt.c cmd_mp.c cmd_terminal.c env_eeprom.c lists.c virtex2.c
cmd_cache.c cmd_flash.c cmd_mtdparts.c cmd_ubi.c env_flash.c lynxkdi.c xilinx.c
cmd_console.c cmd_fpga.c cmd_nand.c cmd_universe.c environment.c main.c xyzModem.c
cmd_cplbinfo.c cmd_i2c.c cmd_net.c cmd_usb.c env_movi.c Makefile
cmd_date.c cmd_ide.c cmd_nvedit.c cmd_usbd.c env_nand.c memsize.c
從上面的輸出可以看出有三大類的文件
- cmd開頭的文件是實現uboot命令的
- env開頭的文件是實現環境變數的
- 其他文件是實現一些其他功能如加密演算法、驅動框架等等
cpu
處理器相關的初始化和控制代碼
基本不需要修改
disk
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot/disk$ ls
Makefile part_amiga.c part_amiga.h part.c part_dos.c part_dos.h part_iso.c part_iso.h part_mac.c part_mac.h
這個目錄下放的是各種系統的分區表,感覺像是用來在不同系統下獲取分區信息的
doc
uboot相關文檔,不過感覺很亂,架構、演算法、存儲器、命令等等都混在一起,看起來不怎麼方便
drivers
從linux中移植來的驅動
examples
示例代碼
fs
文件系統
include
頭文件目錄
lib_arm lib_generic
架構相關的庫文件
libfdt
設備樹相關
net
網路相關代碼的簡單實現
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot/net$ ls
bootp.c bootp.h eth.c Makefile net.c nfs.c nfs.h rarp.c rarp.h sntp.c sntp.h tftp.c tftp.h
onenand*
onenan相關代碼
sd_fusing
SD卡燒寫代碼
tools
在這個目錄下可以看到一些熟悉的名詞像crc gdb md5等,這裡就是一個工具的集合
greedyhao@greedyhao-PC:.../qt_x210v3s_160307/uboot/tools$ lsbddb
envcrc.c fdt_rw.c image.c logos mkimage.h sha1.c
bmp_logo.c environment.c fdt_strerror.c img2brec.sh Makefile mpc86x_clk.c ubsha1.c
crc32.c fdt.c fdt_wip.c img2srec.c Makefile.win32 ncb.c updater
easylogo fdt_host.h gdb inca-swap-bytes.c md5.c scripts zlib.h
env fdt_ro.c gen_eth_addr.c libfdt_internal.h mkimage.c setlocalversion
個人博客
公眾號:greedyhao推薦閱讀: