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

    浏览量

    38788
  • Configured
    +关注

    关注

    0

    文章

    3

    浏览量

    7990
  • Uboot
    +关注

    关注

    4

    文章

    125

    浏览量

    28122
收藏 人收藏

    评论

    相关推荐

    奇妙的Air780E之UDP应用示例大赏!

    关于UDP是一种无连接的、不可靠的传输层协议,主要用于实现网络中的快速通讯,我们今天将把Air780E的UDP应用分析透彻
    的头像 发表于 11-04 09:25 72次阅读
    奇妙的Air780E之UDP应用示例大赏!

    LIMS系统的功能与特点分析

    、材料、方法、项目、样品、数据和结果,以实现实验室的自动化、信息化和网络化管理。 1. 功能分析 1.1 样品管理 样品登记 :记录样品的基本信息,如样品编号、来源、类型、接收时间等。 样品追踪 :追踪样品在实验室中的流转过程,包括样品的接收、处理、分析和存储等。 样品存
    的头像 发表于 10-28 17:02 206次阅读

    电源稳压器和电源滤波器哪个重要

    电源稳压器和电源滤波器在电子设备中都具有重要的作用,它们各自承担着不同的功能,因此难以直接比较哪个更重要。以下是它们各自的重要性和功能分析
    的头像 发表于 10-03 15:25 245次阅读

    间隔棒及输电线路状态实时监测装置:功能分析、技术优势科普

    间隔棒及输电线路状态实时监测装置:功能分析、技术优势科普 间隔棒及输电线路状态实时监测装置是专为输电线路设计的智能化监测设备,旨在提高输电线路的稳定性和安全性。以下是深圳鼎信智慧科技对该装
    的头像 发表于 09-04 16:31 328次阅读

    道路积水在线监测预警系统的功能分析

    ,监测道路积水情况,解决道路积水问题。   道路积水在线监测预警系统依托物联网、传感器技术和大数据分析等先进科技手段,实现了对道路积水情况的实时监测和预警。通过在关键路段和易积水区域部署各种监测设备可以采集积水
    的头像 发表于 09-04 09:59 233次阅读

    地面沉降安全预警系统的功能分析

    、卫星定位,准确监测 地面沉降往往是一个缓慢而隐蔽的过程,传统监测手段难以捕捉其细微变化。而地面沉降安全预警系统借助卫星定位技术,能够实现对监测区域的高精度、全天候监测。通过对卫星数据的持续收集与分析,系统能
    的头像 发表于 08-26 14:57 177次阅读

    飞凌嵌入式ElfBoard ELF 1板卡-uboot阶段查看命令的使用

    | 上电后,在uboot倒计时结束前按下空格,输入9进入uboot命令行:进入uboot命令行之后,可以通过输入“?”或者help可以查看uboot全部命令。如图(图未截全): 每一个
    发表于 07-13 09:37

    如何用FFT功能分析示波器的方波校准信号

    示波器仪器仪表
    安泰仪器维修
    发布于 :2024年05月06日 14:56:44

    dtu遥信功能分析

    DTU遥信功能可以通过采集和处理来自现场设备的状态信号,将这些信号转换成可在通信媒体上发送的数据格式,然后将其上传至主站或子站。
    的头像 发表于 02-25 17:14 2399次阅读

    请问MA35D1的buildroot中uboot如何修改,以及uboot的开机画面如何显示?

    新塘MA35D1的官方软件buildroot,修改uboot,按照官方文档修改uboot配置项,make uboot-menuconfig。修改完成后,执行make rebuild,然后在make
    发表于 01-15 08:02

    红外发射电路的功能分析

    红外发射电路是红外通信系统中的重要组成部分,其主要功能是产生和发射红外信号。本文将详细分析红外发射电路的功能,包括其工作原理、主要组成部分、性能指标以及应用场景。 一、红外发射电路的工作原理 红外
    的头像 发表于 12-13 11:02 1809次阅读

    关于锂电池管理系统的硬件电路方案

    本文介绍一套关于锂电池管理系统的硬件电路方案。其本身是一套已经实际应用的成熟的方案功能包括单电池放电模组,电池组放电模组。硬件电路方案包含
    的头像 发表于 12-11 10:57 1756次阅读
    <b class='flag-5'>关于</b>锂电池管理系统的硬件电路<b class='flag-5'>方案</b>

    uboot的启动BL1和BL2两个阶段介绍

    语言来实现。 1、BL1阶段 uboot的BL1阶段代码通常放在start.s文件中,用汇编语言实现,其主要代码功能
    的头像 发表于 12-04 17:53 2744次阅读

    Uboot命令实现大致流程图

    0x40。 (这里你应该知道了为什么要使用bootm命令,以及为什么要是有uImage格式) 在前面我们曾经分析Uboot的启动流
    的头像 发表于 12-04 17:09 371次阅读
    <b class='flag-5'>Uboot</b>命令实现大致流程图

    UBoot如何跳转Kernel

    首先我们知道kernel的镜像最开始是压缩的zImage格式的存在,然后Uboot有工具mkimage把其转换为uImage。 什么?不知道?好,那我先给你整两幅图瞅瞅,你就知道了! 亿图这个水印
    的头像 发表于 12-04 17:02 455次阅读
    <b class='flag-5'>UBoot</b>如何跳转Kernel