U-Boot的配置、编译、连接过程
来源:互联网 发布:淘宝处罚通知 编辑:程序博客网 时间:2024/04/30 05:16
1.U-Boot初体验
在顶层Readme文件中有uboot配置说明Configuration Options(269行)。
2.U-Boot的配置过程
板子的配置被移出了Makefile,放到了一个叫做boards.cfg的文件中,文件格式如下:
Target(目标)
ARCH(平台)
CPU(芯片)
Board name(板子名字)
Vendor(生产商)
SoC(CPU类型)
Options(功能)
am335x_evm
arm
armv7
am335x
ti
ti81xx
和以前的老版本比,配置更加规范化了,其实这些就是相关文件分类的一个文件夹的描述。
在顶层Makefile中可以看到如下代码(592行):
/*******************************************************************************/
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
%_config:: unconfig
@$(MKCONFIG) -A $(@:_config=)
sinclude $(obj).boards.depend
$(obj).boards.depend: boards.cfg
awk '(NF && $$1 !~ /^#/) { print $$1 ": " $$1 "_config; $$(MAKE)" }' $< > $@
/*********************************************************************************/
MKCONFIG :=$(SRCTREE)/mkconfig
下面分步骤分析顶层mkconfig的作用
1.确定开发板名称BOARD_NAME,相关代码如下:
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
TARGETS=""
arch=""
cpu=""
board=""
vendor=""
soc=""
options=""
if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
# Automatic mode
line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
echo "make: *** No rule to make target \`$2_config'. Stop." >&2
exit 1
}
set ${line}
# add default board name if needed
[ $# = 3 ] && set ${line} ${1}
fi
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%_config}" ; shift ;;
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
*) break ;;
esac
done
2.创建到平台/开发板相关的头文件的链接。
略过mkconfig文件中的一些没有起作用的行,如下所示(90行):
/********************************************/
#
# Create link to architecture specific headers
#
if [ "$SRCTREE" != "$OBJTREE" ] ; then
.....
else
cd ./include
rm -f asm
ln -s ../arch/${arch}/include/asm asm
fi
rm -f asm/arch
if [ -z "${soc}" ] ; then
ln -s ${LNPREFIX}arch-${cpu} asm/arch
else
ln -s ${LNPREFIX}arch-${soc} asm/arch
fi
if [ "${arch}" = "arm" ] ; then
rm -f asm/proc
ln -s ${LNPREFIX}proc-armv asm/proc
fi
/*******************************************/
3.创建顶层Makefile包含的文件include/config.mk,如下所示:
/********************************************************/
#
# Create include file for Make
#
echo "ARCH = ${arch}" > config.mk
echo "CPU = ${cpu}" >> config.mk
echo "BOARD = ${board}" >> config.mk
[ "${vendor}" ] && echo "VENDOR = ${vendor}" >> config.mk
[ "${soc}" ] && echo "SOC = ${soc}" >> config.mk
/*******************************************************************/
4.创建开发板相关的头文件 include/config.h
/*****************************************************************/
#
# Create board specific header file
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
for i in ${TARGETS} ; do
i="`echo ${i} | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'`"
echo "#define CONFIG_${i}" >>config.h ;
done
/**************************************************************/
从这4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/config目录下也要创建一个文件<board_name>.h,里面存放的就是开发板<board_name>的配置信息。
U-Boot还没有类似Linux一样的可视化配置界面(比如使用make menuconfig来配置),要手动修改配置文件include/config/<board_name>.h来裁剪、设置U-Boot。
配置文件中有以下两类宏。
(1)一类是选项(Options),前缀为“CONFIG_”,它们用于选择CPU、SOC、开发板类型,设置系统时钟、选择设备驱动等。
(2)另一类是参数(Setting),前缀为“CFG_”,它们用于设置malloc缓冲池的大小、U-Boot的提示符、U-Boot下载文件时的默认加载地址、Flash的起始地址等。
3.U-Boot的编译、连接过程
从Makefile中可以了解U-Boot使用了哪些文件、哪个文件首先执行、可执行文件占用内存的情况。
先确定用到哪些文件,下面所示为Makefile中与ARM相关的部分。
/*****************************************************************/
155:# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC
# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
# load other configuration
include $(TOPDIR)/config.mk
- U-Boot的配置、编译、连接过程
- U-Boot的配置、编译、连接过程
- U-Boot的配置、编译、连接过程
- U-Boot的配置、编译、连接过程
- U-Boot的配置、编译、连接过程
- u-boot-1.1.6的配置编译过程分析.doc
- u-boot-2012.04.01的配置编译过程分析.doc
- U-boot 编译学习--- U-boot 的编译链接过程
- u-boot的配置过程
- u-boot配置和编译过程浅析
- U-boot 编译学习---配置过程
- U-Boot 配置、编译、链接过程
- u-boot配置和编译过程详解
- (二) u-boot 配置、编译过程分析
- U-boot编译过程
- U-Boot编译过程
- u-boot编译过程
- U-Boot编译过程
- CString::CompareNoCase与CString::Compare的区别 .
- as3读取页面参数
- jquery autocomplete 多字段
- 您在 /var/mail/root 中有新邮件
- iPhone开发【二十三】常用IOS开源组件【第1篇】
- U-Boot的配置、编译、连接过程
- java 静态内部类
- 关于JAVA中的singleton模式
- oracle 12541错误解决办法
- BIT1055The Euler function
- 【Android开发学习06】Android中的文件I/O操作
- ZTE将在MWC大会上展示Firefox操作系统手机
- php 登录之后,返回会员上一次访问的路径网址
- iPhone开发【二十四】数据持久化总结之第4篇—sqlite3数据库