0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于uboot的功能分析透彻方案

电子设计 2018-07-31 09:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

如果我们想快速的移植uboot,那么我们就要先将我们用到的uboot的功能分析透彻,uboot最终目的就是**引导内核**,但是在实际开发中为了方便开发调试,我们将uboot加入了很多功能,比如tftp下载,nfs启动,串口打印等功能;那么我们先按着执行的顺序来分析代码。

uboot并没有对2440进行支持,所以我们分析阶段先分析smdk2410的相关代码,分析完成以后我们在根据s3c2440的技术手册在2410的基础上进行移植。

Makefile分析

首先我们根据编译过程进行分析,编译需要执行命令:

make smdk2410_config

我们查看根目录下Makefile文件,搜索smdk2410_config得到如下代码:

smdk2410_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0在Makefile中;

@表示不打印后面的命令。

$(MKCONFIG)我们通过搜索MKCONFIG得到其定义如下:

MKCONFIG := $(SRCTREE)/mkconfig

SRCTREE定义如下:
SRCTREE := $(CURDIR)
CURDIR在Makefile中为内嵌变量,自动设置为当前的目录。所以$(MKCONFIG)就等于当前目录下的mkconfig文件;$(@:_config=)表示将目标文件的_config变为空,也就是取消目标文件的_config。

所以命令解析如下

smdk2410_config : unconfig
@mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
所以当我们执行make smdk2410_config的时候实际是执行的是:
./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
$1 $2 $3 $4 $5 $6

分析根目录下mkconfig
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done

$#表示了传递进来的参数的个数;

-gt表示大于(>)的含义;

首先如果传递的参数个数大于0,则执行,然后在判断$1是不是--、-a、-n、*等符号,如果是则执行相应的分支,否则继续向下执行。

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

如果没有定义BOARD_NAME,则让BOARD_NAME=$1在这里就是BOARD_NAME=$1=smdk2410

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

-lt是小于(<)的含义;

也就是判断传递进来的个数是否是小于4个或者是大于6个,如果小于4个或者大于6个则退出。

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

打印信息Configuring for smdk2410 board...

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

上面代码if [ "$SRCTREE" != "$OBJTREE" ] ; 是判断SRCTREE 是否等于OBJTREE?

如果不等,则执行if 分支,如果相等等执行else分支,在顶层makefile 下查找可知SRCTREE 和OBJTREE 定义如下:

OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
所以:

OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))

含义:如果定义BUILD_DIR 则OBJTREE=BUILD_DIR 否则OBJTREE=CURDIR搜索mkconfig 可知:BUILD_DIR 没有定义,即OBJTREE=CURDIR所以:SRCTREE := $(CURDIR)即SRCTREE=CURDIR,BJTREE=CURDIR 并且SRCTREE=CURDIR 所以SRCTREE=OBJTREE所以执行else 分支;

else 分支作用如下:

执行上面面三句,就相当于建立一个链接文件asm,它指向$2(即arm)。

这样做的原因?

当我们在源码中包含#include的时候不需要改动,如果是i386 呢?Avr32
呢?所以建立这个链接是为了不需要我们总是修改代码,则直接写#include即可。

rm -f asm-$2/arch

删除asm-arm/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

如果$6 为空或者为NULL 则执行ln -s ${LNPREFIX}arch-$3 asm-$2/arch而$6=s3c6410 所以if 分支忽略即执行else 分支ln -s ${LNPREFIX}arch-$6 asm-$2/arch

分析ln -s ${LNPREFIX}arch-$6 asm-$2/arch执行上面语句相当于在asm-arm($2)目录下面建立一个链接文件arch而链接文件arch 的指向是arch-s3c6410($6)。

if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
通过对$2的判断发现执行此分支。

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

“>”表示新建文件并将内容添加进文件。

“>>”表示只在文件中添加内容。

所以上述的代码含义就是新建config.mk文件并且将下面内容添加进config.mk文件:

ARCH = arm
CPU = arm920t
BOARD = smdk2410
VENDOR = NULL
SOC = s3c24x0

if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
判断APPEND定义是否等于yes开头定义APPEND等于no,所以执行else分支,新建config.h文件

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include " >>config.h

在config.h里面追加内容:

/* Automatically generated - do not edit */
#include

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • S3C2440
    +关注

    关注

    4

    文章

    132

    浏览量

    39974
  • Configured
    +关注

    关注

    0

    文章

    3

    浏览量

    8133
  • Uboot
    +关注

    关注

    4

    文章

    129

    浏览量

    29783
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于瑞萨64位MPU RZ/G2L的uboot串口多波特率支持介绍

    本文主要介绍基于瑞萨64位MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。
    的头像 发表于 07-04 15:54 2761次阅读
    基于瑞萨64位MPU RZ/G2L的<b class='flag-5'>uboot</b>串口多波特率支持介绍

    用IS8000软件和WT5000功率分析仪的DS波形数据流功能分析形数据

    横河IS8000集成软件平台,将功率分析仪的波形采集与示波器的波形数据分析融为一体,提高测试效率。下面我们将为您揭晓如何通过IS8000软件和WT5000的DS波形数据流功能轻松保存并分析
    的头像 发表于 07-03 18:30 436次阅读
    用IS8000软件和WT5000功率<b class='flag-5'>分析</b>仪的DS波形数据流<b class='flag-5'>功能分析</b>形数据

    Linux修改uboot启动延时方法详细攻略,触觉智能RK3568开发板演示

    本文介绍Linux系统修改uboot启动延时方法,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持开源鸿蒙
    的头像 发表于 06-06 18:07 670次阅读
    Linux修改<b class='flag-5'>uboot</b>启动延时方法详细攻略,触觉智能RK3568开发板演示

    RK3562开发板uboot下GPIO的控制方法,触觉智能嵌入式方案

    本文介绍如何uboot下GPIO的控制方法等,使用触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居
    的头像 发表于 06-06 17:49 639次阅读
    RK3562开发板<b class='flag-5'>uboot</b>下GPIO的控制方法,触觉智能嵌入式<b class='flag-5'>方案</b>商

    飞凌嵌入式ElfBoard ELF 1板卡-uboot移植之IOMUX介绍

    需要uboot支持LCD功能接口。所以我们也要对uboot的常用功能接口做一些适配。好在对于这些常用功能接口的硬件设计
    发表于 05-30 09:28

    飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析uboot启动阶段

    uboot启动可分为汇编语言执行和C语言执行两个阶段,两个阶段以_main函数为分界。uboot第一阶段由_start (arch/arm/lib/vectors.S)进入,然后跳转到reset
    发表于 05-30 09:24

    飞凌嵌入式ElfBoard ELF 1板卡-uboot启动流程分析之boot ROM阶段

    CPU上电之后执行的第一段代码并不是uboot代码,因为uboot存储在启动介质(存储介质),如eMMC Flash、NAND Flash、SD卡,CPU想要执行启动介质中的uboot代码,就需要
    发表于 05-28 10:01

    飞凌嵌入式ElfBoard ELF 1板卡-uboot配置详解

    进行配置,也可以使用图形界面两种方式进行配置。但是我们使用的uboot功能比较少,直接使用默认配置文件即可满足目前使用,不需要做修改。但是为了熟悉图形界面,也为后面linux内核章节打下基础,我们演示
    发表于 05-22 11:14

    飞凌嵌入式ElfBoard ELF 1板卡-初次编译uboot

    lzopelf@ubuntu:~$ sudo apt-get install net-tools二、uboot配置uboot配置是针对不同的功能来选择不同的配置项。uboot
    发表于 05-22 11:08

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot目录结构介绍

    api:存放uboot提供的功能函数接口。arch:系统架构相关的代码,这里每一个文件夹名都代表着一种处理器类型,我们关心的是arm,在arch/arm/cpu/armv7里面存在着重要的与uboot
    发表于 05-22 10:53

    飞凌嵌入式ElfBoard ELF 1板卡-Uboot

    -imx-2016.03版本)基础之上做一下差异性修改即可。此软件系统可以通过yocto工程构建获得,其中包含了uboot源码,内核源码,文件系统,以及交叉编译工具,关于系统的构建,在后面章节会有讲解。
    发表于 05-22 10:44

    地电波局放的功能分析

    通过金属壳体的接缝、绝缘衬垫或缝隙传播至设备外部;一个是瞬态对地电压的产生,当电磁波到达设备金属外壳时,会在外表面感应出瞬态对地电压。 针对地电波局放,可采用传感器检测与信号分析的方法来进行检测,通过在设备
    的头像 发表于 05-16 09:09 445次阅读

    用是德示波器DSOX1204G精准波形分析

    在现代电子测试领域,示波器作为信号观测与分析的核心工具,其性能直接决定着测试结果的可靠性与效率。是德科技(Keysight)推出的DSOX1204G示波器凭借其高性能硬件、多功能分析与直观操作界面
    的头像 发表于 04-09 18:14 856次阅读
    用是德示波器DSOX1204G精准波形<b class='flag-5'>分析</b>

    网络网关的主要功能分析

    在现代网络架构中,网络网关扮演着至关重要的角色。它们不仅连接不同的网络,还确保数据在这些网络间有效、安全地传输。 1. 数据转发 网络网关最基本的功能是数据转发。它接收来自一个网络的数据包,并将
    的头像 发表于 01-02 16:04 1589次阅读

    Web缓存的类型及功能分析

    速度,降低了延迟,并提高了网站的可用性。 Web缓存的类型 Web缓存主要分为以下几种类型: 浏览器缓存(Browser Cache) 功能 :浏览器缓存是用户计算机上的缓存,它存储了用户访问过的网页内容。当用户再次访问同一网页时,浏览器会首先检
    的头像 发表于 12-18 09:35 1224次阅读