1.解压好u-boot后,打开uboot根目录的README文件,在software configuration 里有写明,如果要针对某个单板进行配置,需要执行:make <board_name>_config
其中uboot支持的board_name可以在根目录的include/configs/下查看。
2.makefile
2.1 uboot version确定 (Makefile 24-29行) U_BOOT_VERSION “1.3.4xyz”
1)uboot版本号分为4个级别:
VERSION : 主板号
PATCHLEVEL : 次版本号
SUBLEVEL : 再次版本号
EXTRAVERSION : 另外附加的版本信息
这4个用 . 分隔开共同构成了最终的版本号。
2)makefile中版本号最终生成一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号。
Include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所有源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值就是我们在Makefile中配置的uboot版本号。
3)验证方法:自己修改主makefile中几个version有关的变量,然后编译uboot,然后烧录到SD卡中,从SD卡中启动,然后去看启动时uboot打印出来的版本信息,看看变化是不是和自己的分析一致。
3.查看交叉编译链版本:arm-linux-gcc -v
4.查看电脑主机cpu版本号:uname -m
5.Autoconfig.mk是配置过程中产生的,用来指导整个uboot的编译过程
配置过程需要的原材料在include/configs/xxxxx.h文件中,.h文件中有许多宏定义即CONFIG_,这些宏定义是我们移植uboot的关键所在
TQ210.h文件会被用来生成一个autoconfig.mk文件,这个文件会被主Makefile引入,指导整个编译过程,这里面的这些宏定义会影响我们对uboot中大部分.c文件中一些条件编译的选择。从而实现最终的可移植性。
6.链接器脚本为u-boot-nand.lds则说明已经定义了CONFIG_NAND_U_BOOT,若为u-boot.lds则说明没有定义
7.mkconfig文件
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 1 //
[ $# -gt 6 ] && exit 1
uboot配置过程详解1
1. Mkconfig脚本的6个参数。TQ210_config : unconfig
$(MKCONFIG) $(@:_config=) arm s5pv210 TQ210 EmbedSky s5pv210
TQ210_config里面的_config部分用空替换,得到:TQ210,这就是第一个参数,所以:
$1: TQ210
$2: arm
$3: s5pv210
$4: TQ210
$5: EmbedSky
$6: s5pv210
所以$# = 6
3. 第23行,其实就是看BOARD_NAME变量是否有值,没有就赋值。结果BOARD_NAME=TQ210
4. 第25行,如果$#小于4,则 exit 1 (mkconfig脚本返回1)。
5. 第26行,如果$#大于6,则 exit 1
所以:mkconfig脚本传参只能是4,5,6.其他值都不行。
8.移植时如需更改时钟,则只需在tq210.h修改即可