tiny4412u-boot分析u-boot配置流程分析

CrazyDiode CrazyDiode     2022-08-09     403

关键词:

参考Friendlyarm的文档,编译uboot的流程为

make tiny4412_config
make

这个过程主要涉及到两个文件,顶层的Makefile文件和mkconfig文件,makeconfig文件是一个脚本,通过文件的注释可以了解到它的作用

# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]

意思是,mkconfig 是用来创建头文件和链接脚本,并以此来为特定的开发板配置u-boot的脚本。它的主要参数有

Target  Architecture  CPU  Board [VENDOR] [SOC]

首先来分析顶层的Makefile文件,在Makefile文件中我们可以看到下面的代码

%_config::      unconfig
        @$(MKCONFIG) -A $(@:_config=)

%在Makefile中作为通配符用来通配任意长度的字符,因此当我们执行 make tiny4412_config的时候就会匹配到%_config这条语句。::在Makefile中用来强制执行下面的命令,所以匹配到%_config之后,就会去执行unconfig,unconfig的作用是去除原来的配置信息。然后去执行

@$(MKCONFIG) -A $(@:_config=)

这条命令,@的作用是用来去除回显,$(MKCONFIG)在前面被定义为

MKCONFIG    := $(SRCTREE)/mkconfig
SRCTREE    := $(CURDIR)

我们将@去掉,然后执行make tiny4412_config,可以通过回显看到以下内容

make tiny4412_config
awk (NF && $1 !~ /^#/) { print $1 ": " $1 "_config; $(MAKE)" } boards.cfg > .boards.depend
/....../uboot_tiny4412/mkconfig -A tiny4412
Configuring for tiny4412 board...

所以我们执行make tiny4412_config实际上被解析成

/....../uboot_tiny4412/mkconfig -A tiny4412

指定了-A选项,mkconfig脚本会自动去解析boards.cfg文件,找到以下内容

# Target                     ARCH        CPU         Board name          Vendor         SoC         Options
tiny4412                     arm         armv7       tiny4412            samsung        exynos

所以我们最终执行的命令为

./mkconfig  tiny4412   arm  armv7  tiny4412  samsung  exynos

总结一下,mkcongif脚本主要做了以下几件事

(1)解析boards.cfg tiny4412相关数据

tiny4412                     arm         armv7       tiny4412            samsung        exynos
2)针对平台做了一系列链接,创建平台、开发板相关的头文件的链接
#
# 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}/arch/${arch}/include/asm asm
    LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/
    cd ../include
    rm -f asm
    ln -s ${SRCTREE}/arch/${arch}/include/asm asm
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

实际执行的命令为

cd ./include
rm -f asm
ln -s ../arch/arm/include/asm asm
ln -s arch-exynos asm/arch

(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
# Assign board directory to BOARDIR variable
if [ -z "${vendor}" ] ; then
    BOARDDIR=${board}
else
    BOARDDIR=${vendor}/${board}
fi

生成的config.mk内容如下

ARCH   = arm 

CPU    = armv7
BOARD  = tiny4412
VENDOR = samsung
SOC    = exynos

(4)创建开发板相关的头文件inlucde/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
cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/${CONFIG_NAME}.h>
#include <asm/config.h>
EOF

生成的include/config.h内容为

/* Automatically generated - do not edit */ 
#define CONFIG_BOARDDIR board/samsung/tiny4412
#include <config_defaults.h>
#include <configs/tiny4412.h>
#include <asm/config.h>

 

tiny4412u-boot分析u-boot启动流程

从大方面来说,u-boot的启动分成两个阶段,第一个阶段主要的职责是准备初始化的环境,主要有以下几点①设置异常向量表②把CPU的工作模式设置为SVC32模式③关闭中断、MMU和cache④关闭看门狗⑤初始化内存、时钟、串口⑥设置... 查看详情

第二章tiny4412u-boot移植二启动分析

本文转载自:http://blog.csdn.net/eshing/article/details/37521481版权声明:本文为博主原创文章,未经博主允许不得转载。一、启动过程说明      讲解启动过程,首先的源头就是打开电源,这个相信没人人不知道。CPU... 查看详情

tiny4412-1312__uboot移植(代码片段)

...inaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi要移植的u-boot版本:u-boot-2016-11Tiny4412开发板硬件版本为:  底板:  Tiny4412SDK1312B  核心板:Tiny4412-1306 1.获取U-BOOT源码从FTP站点下载: ftp://ftp.denx.de/pub/... 查看详情

tiny4412u-boot烧写及根文件系统制作(不进入终端问题)

http://m.blog.csdn.net/article/details?id=51400196(转) VMware12环境:ubuntu12.4开发板:tiny4412首先烧写bootloader,我用一个8G的内存卡,现在不说sd卡的制作过程了,网上可以参考。现在就把我给arm的emmc烧写过程开始说。用sd卡启动,开发... 查看详情

tiny4412学习杂记

1.Android挂载NFS使用busyboxmount来替代mount命令2.修改Uboot中fastboot最大buff 使用U-boot烧写Android5.0的时候出现remote:datatoolarge将 include/configs/tiny4412.h 改大一点3.tiny4412内核中trustzone配置开关tiny4412 trust 查看详情

uboot移植前奏

  Tiny4412开发板硬件版本为:     底板: Tiny4412/Super4412SDK1506      核心板:Tiny4412-1412 1、下载u-boot源代码,建立u-boot代码仓库   参考:h 查看详情

tiny4412裸机程序说明

...动,只能尽可能找来各种相关资料进行参考分析。我想在U-Boot程序中加入LCD显示功能,但始终都没有正常点亮LCD,放弃的心都有了,后 查看详情

linux内核lcd驱动分析与换屏方法(tiny4412)

​Linux内核中换屏技术​21.5.1u-boot中的参数bootargs实现换屏​在uboot中有一个bootargs环境变量,这个参数就是传递数据给内核的。​对tiny4412提供的内核,可以通过修改bootargs实现驱动不同的LCD屏。​21.5.2分析bootargs中的lcd参数再启... 查看详情

tiny4412标准版,编译u-boot并烧录到sd卡,从sd卡启动后只打印‘ok’两个字符

本人开发板是tiny4412(1G+4G)的标准版,由于开发板自带的光盘资料无法读取,所以就从友善官网下载到最新的资料;然而在做uboot烧录实验的时候,发现烧录完成从SD卡启动后只打印“OK”两个字符,无法正常... 查看详情

x-001friendlyarmtiny4412uboot移植前奏

...inaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi要移植的u-boot版本:u-boot-2016-09参考u-boot版本:友善之臂提供的u-boot-2010-12Tiny4412开发板硬件版本 查看详情

tiny4412--uboot移植串口(代码片段)

...inaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi要移植的u-boot版本:u-boot-2016-11Tiny4412开发板硬件版本为:  底板:  Tiny4412SDK1312B  核心板:Tiny4412-1306 1,原理图查看tiny4412SDK-1312B-Schematic.pdf   ... 查看详情

tiny4412--uboot移植时钟(代码片段)

...inaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi要移植的u-boot版本:u-boot-2016-11Tiny4412开发板硬件版本为:  底板:  Tiny4412SDK1312B  核心板:Tiny4412-1306 1、时钟体系exynos4412芯片时钟体系的介绍在《Exynos4412... 查看详情

tiny4412标准版,编译u-boot并烧录到sd卡,从sd卡启动后只打印‘ok’两个字符

本人开发板是tiny4412(1G+4G)的标准版,由于开发板自带的光盘资料无法读取,所以就从友善官网下载到最新的资料;然而在做uboot烧录实验的时候,发现烧录完成从SD卡启动后只打印“OK”两个字符,无法正常... 查看详情

u-boot启动流程详解-基于itop4412开发板

前言u-boot的作用:CPU上电后,需要设置很多状态,包括CPU状态、中断状态、MMU状态等,其次要做的就是对硬件资源经行板级初始化、代码重定向等,最后若不进入命令行模式,就会将linux内核从flash(NAND,NORFLASH,SD,MMC等)拷贝到D... 查看详情

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中指定: 查看详情

u-boot-2016.07移植(第一篇)初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析目录U-BOOT-201607移植 第一篇 初步分析目录编译和移植环境更新交叉编译工具1下载arm-linux-gcc4432安装arm-linux-gcc443安装环境Ubuntu910下载u-boot-201607并解压分析顶层Makefile1找出目标依赖关系2总结... 查看详情

x-007friendlyarmtiny4412u-boot移植之内存初始化

 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<&l 查看详情

linux系统移植博文导航

...个一个交流的机会,也感谢大家的支持。Linux相关的网站U-BootLinux内核busyboxLinux系统移植Linux系统移植-前言第1章环境搭建(Exynos4412+U-boot2013.1)第1章环境搭建(imx283)第2章u-boot烧写与使用(Exynos4412+U-boot2013.1)第3章U-boot移植A(Ex... 查看详情