学习笔记:U-boot之Makefile结构(配置过程)

配置命令:make 100ask24x0_config

1.打开Makefile:查找100ask24x0_config

100ask24x0_config	:	unconfig
	@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
make时,相当于执行
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
2.在Makefile中查找MKCONFIG
MKCONFIG    := $(SRCTREE)/mkconfig

源码所在目录下应该有个mkconfig文件,打开目录发现确实有

book@book-desktop:/work/system/u-boot-1.1.6$ ls
arm_config.mk                  common     doc             include       lib_m68k        m68k_config.mk        mkconfig         ppc_config.mk  u-boot
avr32_config.mk                config.mk  drivers         lib_arm       lib_microblaze  MAINTAINERS           nand_spl         README         u-boot.bin
blackfin_config.mk             COPYING    dtt             lib_avr32     lib_mips        MAKEALL               net              rtc            u-boot.map
board                          cpu        examples        lib_blackfin  lib_nios        Makefile              nios2_config.mk  rules.mk       u-boot.srec
CHANGELOG                      CREDITS    fs              lib_generic   lib_nios2       microblaze_config.mk  nios_config.mk   System.map
CHANGELOG-before-U-Boot-1.1.5  disk       i386_config.mk  lib_i386      lib_ppc         mips_config.mk        post             tools

@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

3.$(@就表示替换为100ask24x0所以这句话应该是:mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0

                                                                                   $0            $1           $2        $3             $4       $5        $6

4.打开MKCONFIG脚本文件:

while [ $# -gt 0 ] ; do
	case "$1" in
	--) shift ; break ;;
	-a) shift ; APPEND=yes ;;
	-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
	*)  break ;;

5.分析传过来的参数 有没有-- 有没有-a 有没有-n ,发现我们的命令里并没有,所以这段可以省略。

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

6.如果BOARD_NAME没定义,就让BOARD_NAME="$1",此时我们的$1是100ask24x0。

[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

7.$#表示参数的个数,此时我们的参数个数为6,如果参数个数小于4将退出,如果大于6也将退出。

echo "Configuring for ${BOARD_NAME} board..."

8.打印这句话Configuring for ${BOARD_NAME} board ...

cd ./include
	rm -f asm
	ln -s asm-$2 asm

建立一个链接文件asm,它指向asm-arm,打开目录,发现确实如此:

book@book-desktop:/work/system/u-boot-1.1.6$ cd include

book@book-desktop:/work/system/u-boot-1.1.6/include$ ls -l asm

lrwxrwxrwx 1 book book 7 2018-04-18 17:56 asm -> asm-arm

这样做的原因是:include下有很多架构的,asm配置时临时生成指向要的架构。

if [ -z "$6" -o "$6" = "NULL" ] ; then
	ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
	ln -s ${LNPREFIX}arch-$6 asm-$2/arch

如果第六个参数为空或者不为空,执行下面的命令,相当于执行ln -s arch-s3c24x0 asm-arm/arch

if [ "$2" = "arm" ] ; then
	rm -f asm-$2/proc
	ln -s ${LNPREFIX}proc-armv asm-$2/proc

如果第二个参数是arm,ln-s proc -armv asm-arm/proc

echo "ARCH   = $2" >  config.mk
echo "CPU    = $3" >> config.mk
echo "BOARD  = $4" >> config.mk

>表示新建一个文件,>>表示内容追加过去

config.mk的内容:ARCH=arm

CPU=arm920t

BOARD=100ask24x0

SOC=s3c24x0

参考文献:嵌入式Linux应用开发完全手册,韦东山,人民邮电出版社




发布了2 篇原创文章 · 获赞 3 · 访问量 154

猜你喜欢

转载自blog.csdn.net/wb_it_man/article/details/80019102