嵌入式开发(s5pv210)——u-boot的顶层mkconfig文件分析(代码片段)

代二毛 代二毛     2023-01-15     476

关键词:

mkconfig文件的调用

# 第一步:SRCTREE是源码的路径,也就是顶层的目录
MKCONFIG	:= $(SRCTREE)/mkconfig
export MKCONFIG

#第二步:配置
#$(@:_config=):作用是将x210_sd_config的_config去掉,得到x210_sd
x210_sd_config :	unconfig
	@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
	@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk

#第三步:x210_sd_config目标的依赖
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 \\
		$(obj)board/$(VENDOR)/$(BOARD)/config.mk

解析:上面的脚本是从顶层Makefile中摘抄的,mkconfig也是被顶层mkconfig调用,通过编译指令make x210_sd_config调用,其中x210_sd_config是根据自己开发板来确定的配置项。
(1)第一步:MKCONFIG记录的是顶层mkconfig的路径;
(2)第二步:编译uboot的时候要先配置,然后就会去执行mkconfig脚本,执行时会传参"x210_sd arm s5pc11x x210 samsung s5pc110"。
(3)第三步;unconfig是x210_sd_config的依赖,这个目标的功能是删除掉上一次配置的结果,这样可以保证每次执行配置的操作都可以生效。

mkconfig文件的主要作用

mkconfig是uboot的配置文件,根据传入的参数创建链接指向不同的文件夹,往配置文件里写入不同的内容,适配不同架构的CPU和开发板。创建的链接在源码包含头文件时就会指向不同路径下的头文件,由此实现uboot的兼容性。

mkconfig文件的内容

#!/bin/sh -e

# Script to create header files and links to configure(脚本去创建头文件和配置链接)
# U-Boot for a specific board.(特定开发板的uboot)
#
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC](参数:目标COU架构的开发板的供应商)
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
# 

#根据上面Makefile的分析,传入mkconfig文件的参数是"x210_sd arm s5pc11x x210 samsung s5pc110"
#$1=x210_sd; $2=arm; $3=s5pc11x; $4=x210; $5=samsung; $6=s5pc110

APPEND=no	# Default: Create new config file
BOARD_NAME=""	# Name to print in make output

#判断传入的参数个数是否大于0,并根据$1进行选择
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,也就是x210_sd
[ "$BOARD_NAME" ] || BOARD_NAME="$1"

#传入的参数个数小于4和大于6都会推出
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

echo "Configuring for $BOARD_NAME board..."

#
# Create link to architecture specific headers 创建指向特定架构的链接
#

#这里是判断是原地编译还是单独输出文件夹编译,是单独输出文件夹编译就会去创建相关的文件夹
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

#注意这里已经进入到了相应的include目录,下面都以原地编译进行分析,假设进入到/include目录,/是指uboot源码所在的目录

#删除/include/asm-arm/arch
rm -f asm-$2/arch

#这里$6=s5pc110,所以执行的是:ln -s $LNPREFIXarch-$6 asm-$2/arch
#创建了/include/asm-arm/arch链接指向/include/arch-s5pc110
if [ -z "$6" -o "$6" = "NULL" ] ; then
	ln -s $LNPREFIXarch-$3 asm-$2/arch
else
	ln -s $LNPREFIXarch-$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

# create link for s3c64xx SoC
if [ "$3" = "s3c64xx" ] ; then
	rm -f regs.h
	ln -s $6.h regs.h
	rm -f asm-$2/arch
	ln -s arch-$3 asm-$2/arch
fi

# create link for s5pc1xx SoC
if [ "$3" = "s5pc1xx" ] ; then
        rm -f regs.h
        ln -s $6.h regs.h
        rm -f asm-$2/arch
        ln -s arch-$3 asm-$2/arch
fi

# create link for s5pc11x SoC
#$3=s5pc11x所以条件成立
#创建链接/include/reg.h指向/include/s5pc110.h
#创建链接/include/asm-arm/arch链接指向/include/arch-s5pc11x
if [ "$3" = "s5pc11x" ] ; then
        rm -f regs.h
        ln -s $6.h regs.h
        rm -f asm-$2/arch
        ln -s arch-$3 asm-$2/arch
fi

# create link for s5p64xx SoC
if [ "$3" = "s5p64xx" ] ; then
	rm -f regs.h
	ln -s $6.h regs.h
	rm -f asm-$2/arch
	ln -s arch-$3 asm-$2/arch
fi

# create link for s5p644x SoC
if [ "$3" = "s5p644x" ] ; then
	rm -f regs.h
	ln -s $6.h regs.h
	rm -f asm-$2/arch
	ln -s arch-$3 asm-$2/arch
fi

#创建链接asm-arm/proc指向proc-armv
if [ "$2" = "arm" ] ; then
	rm -f asm-$2/proc
	ln -s $LNPREFIXproc-armv asm-$2/proc
fi

# create link for s3c64xx-mp SoC
if [ "$3" = "s3c64xx-mp" ] ; then
	rm -f regs.h
	ln -s $6.h regs.h
	rm -f asm-$2/arch
	ln -s arch-$3 asm-$2/arch
fi

#
# 创建/include/config.mk文件并写入内容
#创建完成后config.mk的内容为:
#	ARCH   = arm
#	CPU    = s5pc11x
#	BOARD  = x210
#	VENDOR = samsung
#	SOC    = s5pc110#
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

嵌入式开发(s5pv210)——u-boot的顶层config.mk分析(代码片段)

1、config.mk的作用config.mk的作用是配置uboot编译的,比如配置交叉编译工具链,链接地址,编译选项,指定头文件路径等,但是config.mk的配置是建立在顶层mkconfig、主Makefile等配置之上的。2、config.mk的调用#loadothe... 查看详情

嵌入式开发(s5pv210)——u-boot的链接脚本分析(代码片段)

1、脚本内容OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm","elf32-arm","elf32-arm")*/OUTPUT_ARCH(arm)ENTRY(_s 查看详情

嵌入式开发(s5pv210)——u-boot的不同来源和目录结构

1、u-boot的不同来源和联系uboot的来源大致有三个途径:uboot官网下载、Soc厂商提供、开发板厂商提供。假设某个厂商推出新的Soc,Soc厂商的工程师会去uboot的官网下载uboot,然后把此款Soc的开发板的uboot移植上去并开源&... 查看详情

嵌入式开发(s5pv210)——u-boot中如何确定启动方式(代码片段)

1、嵌入式设备确认启动方式设备确认启动方式分为硬件方式和软件方式,硬件方式是通过芯片某几个引脚的高低电平来决定启动方式;软件方式就是通过代码设置来决定启动方式。(1)硬件方式:比如S5PV210芯片,... 查看详情

嵌入式开发(s5pv210)——u-boot的头文件包含问题(代码片段)

前言uboot和kernel的头文件包含比一般的程序更复杂,将头文件的路径用链接来表示,这样的用意是为了程序的可移植性。uboot是高度可移植的,不同的配置和编译指令可以编译出不同Soc和开发板的程序,其中源码是... 查看详情

嵌入式开发(s5pv210)——u-boot中开启mmu(代码片段)

1、MMU介绍在uboot阶段并不是必须要开启MMU(内存管理单元),在没开启MMU前使用的是物理地址,开启MMU后使用的是虚拟地址。MMU就是在物理内存和应用程序之间添加了一个层次,专门用来管理内存,这样写应用程序... 查看详情

嵌入式开发(s5pv210)——u-boot启动过程中三次设置栈(代码片段)

1、多次设置栈的原因无论是汇编代码还是C语言代码,当涉及函数嵌套调用时都需要用栈来保存函数返回地址,所以必须设置栈。多次设置栈的原因是,uboot不同的启动阶段可用的内存空间是不同的。最开始只有IRAM可... 查看详情

第一章之s5pv210启动顺序

我所使用的开发板是:友善之臂smart210,cpu为s5pv210.u-boot版本是:u-boot-2012-101,首先在u-boot中配置相对应的开发板的配置文件#makes5p_goni_config2,设事先编译好的交叉编译器放在Makefile中添加上去,打开Makefile在67行补充CROSS_COMPILE?=arm-linux-... 查看详情

嵌入式开发综述

0、嵌入式系统开发流程:   1、S5PV210内部结构图2、S5PV210系统启动三阶段正解     根据S5PV210芯片手册第6章所述S5PV210consistsof64KBROMand96KBSRAMasinternalmemory(意思210芯片有两块片上内存,ROM:64KB,SRAM:96KB),并... 查看详情

嵌入式开发(s5pv210)——lcd显示器

LCD介绍1.LCD(LiquidCrystalDisplay)俗称液晶,这种材料的一大特点就是在电信号的驱动下液晶分子进行旋转,旋转会影响透光性,不同的透光性会透过不同的颜色的光,于是我们便看到显示屏上五颜六色的画面。2.LCD是... 查看详情

嵌入式开发(s5pv210)——adc和触摸屏

1、ADC介绍ADC(analogdigitalconverter)就是AD转换,把模拟量转换为数字量。CPU本身是数字的、离散的,而外部世界却是模拟的、连续的,所以外界的信息是不能直接被计算机进行处理,需要先将模拟量转换为数字量... 查看详情

s5pv210移植minigui3.0.12

...包,在MiniGui官网可以下载http://www.minigui.org/zhcn/【已放在嵌入式软件组资料共享文件夹】---------------- 查看详情

嵌入式s5pv210的启动流程

S5PV210的启动流程S5PV210上电后执行iROM中的固化代码,即BL0(Bootloader0)。这个代码是厂家出厂前烧写好的,不提供源代码,但提供相应的功能说明,比如进行一些时钟初始化、设备控制器初始化和启动相关... 查看详情

在s5pv210的开发板上使用串口收发信息

 参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先准备一个安装好Linux的开发板  使用 xshell工具连接开发板 ,winscp工具连接开发板 , 准备一个Ubuntu 32位,装上交叉编译链。。使用下... 查看详情

在s5pv210的开发板上点亮一个led灯

 参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先准备一个安装好Linux的开发板  使用 xshell工具连接开发板 ,winscp工具连接开发板 , 准备一个Ubuntu 32位,装上交叉编译链。。使用下... 查看详情

tiny210(s5pv210)移植u-boot(基于2014.4版本号)——移植u-boot.bin(打印串口控制台)

...信息打印。在上节。我们看到调用relocate_code重定位。在u-boot的帮助文档doc/README.arm-relocation中对重定位有说明。u-boot为了生成位置无关码,在链接时指定了-pie选项,这个选项在u-boot-2014.04/arch/arm/config.mk中指定: 查看详情

s5pv210开发板连接虚拟机的网络设置(代码片段)

1、前言用PC机进行嵌入式设备开发,会在pc机上安装虚拟机来运行linux系统,其中就涉及到开发板和虚拟机的通信问题。本文介绍的就是如何正确的设置网络,开发板通过有线网络与虚拟机通信。如果不知道如何设置... 查看详情

嵌入式专题:s5pv210-mpeg4编码

我想说不台的平台,如tiny210和x210。它们的头文件是有稍微区别的。我这个是x210下的代码。但都须要注意的是NV12T与NV12的问题,默认要求输入的图片是NV12T,经过调整之后,能够同意用NV12。即便如此。NV12格式的图片也不好拿... 查看详情