標籤:
1. u-boot配置過程
make xxx.config
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
-----》》執行mkconfig
1).確定開發板名稱BOARD_NAME .
CONFIG_NAME="${1%_config}"
[ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
2).建立到平台/開發板相關的標頭檔的連結
ln -s ${LNPREFIX}arch-${soc} asm/arch
ln -s ${LNPREFIX}proc-armv asm/proc
3).建立頂層Makefile包含的檔案include/config.mk
[ "${vendor}" ] && echo "VENDOR = ${vendor}"
[ "${soc}" ] && echo "SOC = ${soc}"
exit 0 ) > config.mk
4).建立開發板板相關的標頭檔include/config.h
> config.h # Create new config file
2.u-boot編譯、串連過程
1).包含了配置過程中製作出來的config.mk檔案,其中定義了ARCH,CPU,BOARD,SOC...
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk//作出來的config.mk
export ARCH CPU BOARD VENDOR SOC DDR3LIB DDRTYPE
# load other configuration
include $(TOPDIR)/config.mk //包含頂層的config.mk 確定了編譯器.編譯選項 BOARDDIR LDFLAGS
config.mk中定義了TEXT_BASE (uboot開始位置)
把所有的OBJS 。LIBS所表示的.o,.a檔案產生
# U-Boot objects....order is important (i.e. start must be first)
OBJS = $(CPUDIR)/start.o
.......
LIBS-y += lib/libgeneric.o
LIBS-y += lib/lzma/liblzma.o
LIBS-y += lib/lzo/liblzo.o
LIBS-y += lib/zlib/libz.o
得到ELF格式的u-boot ,最後轉換為二進位格式U-BOOT.bin LDFLAGS確定串連方式
UNDEF_LST=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
sed -n -e ‘s/.*\($(SYM_PREFIX)_u_boot_list_.*\)/-u\1/p‘|sort|uniq`;\
cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
$$UNDEF_LST $(__OBJS) \
--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
-Map u-boot.map -o u-boot
在u-boot.lds 代碼中 (指定各種段)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
__image_copy_start = .;
arch/arm/cpu/armv7/start.o (.text*)////start.S為uboot入口
*(.text*)
}
. = ALIGN(4);
3.總結uboot 編譯流程:
(1)首先編譯start.S
(2)對於平台/開發板相關的每個目錄,通用目錄都使用它們各自的Makefile產生相應的庫 .a .o
(3)將產生的.a .o ,檔案按照comfig.mk檔案中指定的程式碼片段起始地址. u-boot.lds串連指令碼進行串連
(4)上一步,得到ELF格式UBOOT,Makefie會把其轉換為二進位格式
u-boot配置/編譯過程