当前位置:网站首页>u-boot之顶层Makefile分析(二)之config.mk文件的生成
u-boot之顶层Makefile分析(二)之config.mk文件的生成
2022-07-15 14:32:00 【贱贱的剑】
- 在u-boot之顶层Makefile分析(一)一文中我们发现没有
include/config.mk文件。 - 在uboot环境搭建与编译一文中,只使用了
make x210_sd_config和make两个命令 (make -j4是多线程运行make)。 因此可知缺失的文件只可能是在执行make x210_sd_config之时生成的。 - 接下来探寻config.mk文件的生成过程
寻找目标
在顶层Makefile中搜索x210_sd_config,可以看到下面几行信息。
x210_sd_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
$(MKCONFIG)即是我们前面定义的MKCONFIG := $(SRCTREE)/mkconfig,亦即是u-boot根目录下的mkconfig文件。$(@:_config=)中的@代表目标,即是x210_sd_config,冒号(":")后面的意思是,把这个目标中的"_config"用"="号后面的值替换,即是用“空”替换,得到x210_sd。- 因此
mkconfig脚本共有五个参数,分别是"x210_sd",”arm",“s5pc11x",“x210”,“samsung”和“s5pc110”。 - 将
TEXT_BASE = 0xc3e00000写入board/samsung/x210/config.mk文件,此变量指定了整个u-boot链接时的链接地址,这个地址取决于u-boot中做的虚拟地址映射关系。
正餐来了
将下来我们分析mkconfig文件,将记录一下它的传入参数为x210_sd arm s5pc11x x210 samsung s5pc110。
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
- 将
BOARD_NAME变量设置为传入的第一个参数,即x210_sd - 限制传入参数的个数
创建软链接
if [ "$SRCTREE" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -f asm
mkdir asm-$2
ln -s asm-$2 asm
else
cd ./include
rm -f asm
ln -s asm-$2 asm
fi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
# create link for s3c24xx SoC
if [ "$3" = "s3c24xx" ] ; then
rm -f regs.h
ln -s $6.h regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch
fi
- 举两个例子做一简单的说明即可
- 传入的参数
x210_sd arm s5pc11x x210 samsung s5pc110在脚本中引用的方法为$1~$6,分别表示传入的六个值 - 为了让u-boot具有更强大的可配置性而根据不同的平台与架构建立软链接
config.mk文件的生成
#
# Create include file for Make
#
echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
#
# 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
echo "#include <configs/$1.h>" >>config.h
exit 0
- 在脚本的前半部分有一个
cd ./include的操作,所以当前的目录是u-boot根目录下的include目录 - 将传入的第2,3,4,5,6个参数写入config.mk文件中
- 在config.h文件中写入与第1个参数有关的头文件
- 最后的config.h与config.mk文件内容分别为
/* Automatically generated - do not edit */
#include <configs/x210_sd.h>
ARCH = arm
CPU = s5pc11x
BOARD = x210
VENDOR = samsung
SOC = s5pc110
- x210_sd.h文件是开发板的宏定义文件,该文件会被用来生成autoconfig.mk文件并被主Makefile引入,指导整个编译过程,x210_sd.h部分内容如下。
/* Fastboot variables */
#define CFG_FASTBOOT_TRANSFER_BUFFER (0x3E000000)//(0x40000000)
#define CFG_FASTBOOT_TRANSFER_BUFFER_SIZE (0x11000000) /* 272MB */
#define CFG_FASTBOOT_ADDR_KERNEL (0xC0008000)
#define CFG_FASTBOOT_ADDR_RAMDISK (0x30A00000)
#define CFG_FASTBOOT_PAGESIZE (2048) // Page size of booting device
#define CFG_FASTBOOT_SDMMC_BLOCKSIZE (512) // Block size of sdmmc
/* Just one BSP type should be defined. */
//#define CFG_FASTBOOT_ONENANDBSP
//#define CFG_FASTBOOT_NANDBSP
#define CFG_FASTBOOT_SDMMCBSP
/* LCD setting */
//#define CFG_LCD_TL2796 // for C110 - narrow LCD
#define CFG_LCD_NONAME1 // for V210 - wide LCD
#define CFG_LCD_FBUFFER (0x34000000)
边栏推荐
猜你喜欢
随机推荐
1301_ Two ways to add serial port monitoring function to the development board
Data Lake (XVII): Flink and iceberg integrate datastream API operations
VirtualBox:SSH连接
组合数学--排列组合
718. 最长重复子数组
PAT 甲级 A1053 Path of Equal Weight(树的遍历)
PAT 甲级 A 1099 Build A Binary Search Tree
如何通过特殊数据类型索引实现内存数据库加速
一种嵌入式中应用层与硬件层分层管理方法
Pat grade a a1043 is it a binary search tree
微信小程序直播插件--获取临时文件(后台集成小程序直播)
苹果手机蓝牙联网
现在网上开户安全么?接着证券开户选择哪个证券
面试官:抽象工厂模式是什么?
对于测试BUG的处理,代码缺陷的管理和改进
Pat grade a a1064 complete binary search tree
Pat grade a a1079 total sales of supply chain
高性能算力中心 — RDMA — NVIDIA SHARP
Pat grade a a1094 the largest generation
PAT 甲级 A1004 Counting Leaves









